// ResizableGrip.cpp: implementation of the CResizableGrip class. // ///////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2000-2001 by Paolo Messina // (http://www.geocities.com/ppescher - ppescher@yahoo.com) // // The contents of this file are subject to the Artistic License (the "License"). // You may not use this file except in compliance with the License. // You may obtain a copy of the License at: // http://www.opensource.org/licenses/artistic-license.html // // If you find this code useful, credits would be nice! // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ResizableGrip.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CResizableGrip::CResizableGrip() { m_sizeGrip.cx = GetSystemMetrics(SM_CXVSCROLL); m_sizeGrip.cy = GetSystemMetrics(SM_CYHSCROLL); } CResizableGrip::~CResizableGrip() { } void CResizableGrip::UpdateGripPos() { // size-grip goes bottom right in the client area // (any right-to-left adjustment should go here) RECT rect; GetResizableWnd()->GetClientRect(&rect); rect.left = rect.right - m_sizeGrip.cx; rect.top = rect.bottom - m_sizeGrip.cy; // must stay below other children m_wndGrip.SetWindowPos(&CWnd::wndBottom, rect.left, rect.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOREPOSITION); // maximized windows cannot be resized if (GetResizableWnd()->IsZoomed()) m_wndGrip.EnableWindow(FALSE); else m_wndGrip.EnableWindow(TRUE); } void CResizableGrip::ShowSizeGrip(BOOL bShow) { m_wndGrip.ShowWindow(bShow ? SW_SHOW : SW_HIDE); } #define RSZ_GRIP_OBJ _T("ResizableGrip") BOOL CResizableGrip::InitGrip() { CRect rect(0 , 0, m_sizeGrip.cx, m_sizeGrip.cy); BOOL bRet = m_wndGrip.Create(WS_CHILD | WS_CLIPSIBLINGS | SBS_SIZEGRIP, rect, GetResizableWnd(), 0); if (bRet) { // set a triangular window region CRgn rgnGrip, rgn; rgn.CreateRectRgn(0,0,1,1); rgnGrip.CreateRectRgnIndirect(&rect); for (int y=0; y