// ScrollBarExt.cpp: implementation of the CScrollBarExt class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ScrollBarExt.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif WNDPROC CScrollBarExt::m_cWndProc = NULL; int CScrollBarExt::pos = 0; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// LRESULT CScrollBarExt::DefWindowProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_PAINT: case WM_NCPAINT: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MOUSEMOVE: CallWindowProc( m_cWndProc, hwnd, message, wParam, lParam ); // ShowWindow(hwnd, SW_HIDE); OnPaint(hwnd); return 0; case WM_ERASEBKGND: return 1; default: break; } return CallWindowProc( m_cWndProc, hwnd, message, wParam, lParam ); } void CScrollBarExt::OnPaint( HWND hWnd ) { RECT rcItem; HDC hdc=GetWindowDC(hWnd); GetWindowRect(hWnd, &rcItem); rcItem.right -=rcItem.left ; rcItem.bottom -=rcItem.top ; rcItem.top =rcItem.left =0; const int nFrameSize = GetSystemMetrics( SM_CXEDGE ); const int nScrollSize = GetSystemMetrics( SM_CXHSCROLL ); RECT rc; if(rcItem.right >rcItem.bottom )//根据滚动的长宽判断是水平还是垂直..水平 { rc.left = rcItem.left + nFrameSize; rc.top = rcItem.bottom - nFrameSize - nScrollSize; rc.right = rcItem.right - nFrameSize; rc.bottom = rcItem.bottom - nFrameSize; DrawScrollBar(hWnd, hdc, rc, SB_HORZ, 1 ); } else { rc.left = rcItem.right - nFrameSize - nScrollSize; rc.top = rcItem.top + nFrameSize; rc.right = rcItem.right - nFrameSize; rc.bottom = rcItem.bottom - nFrameSize; DrawScrollBar(hWnd, hdc, rc, SB_VERT, 1 ); } }