// EditExt.cpp: implementation of the CEditExt class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "EditExt.h" #include "library.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif WNDPROC CEditExt::m_cWndProc = NULL; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// LRESULT CEditExt::DefWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { CWnd *pWnd = NULL; CPoint point; LRESULT lReturn; pWnd = CWnd::FromHandle( hWnd ); switch( message ) { case WM_PAINT: case WM_NCPAINT: lReturn=CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam ); OnPaint( pWnd ); return lReturn; default: break; } return CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam ); } void CEditExt::OnPaint( CWnd *pWnd ) { CDC* pDC = pWnd->GetDC(); CRect m_rcDropDown; RECT Rect; MEMDCXP Mdcxp; HANDLE hHandle; // 获取窗口大小 GetWindowRect(pWnd->GetSafeHwnd (), &Rect); Rect.right -= Rect.left; Rect.bottom -= Rect.top; Rect.top = Rect.left = 0; // 获取内存兼容设备场景 Mdcxp.hWnd = pWnd->GetSafeHwnd (); Mdcxp.bTransfer = TRUE; Mdcxp.hBitmap = NULL; GetMemDCXP(&Mdcxp); // 绘制外框 FrameRect(Mdcxp.hMemDC, &Rect, (HBRUSH) g_frameedgebrush); // 绘制内框 InflateRect(&Rect, -1, -1); hHandle = (HANDLE) ::GetStockObject (WHITE_BRUSH); FrameRect(Mdcxp.hMemDC, &Rect, (HBRUSH) hHandle); /* InflateRect(&Rect, -1, -1); Rect.left = Rect.right - GetSystemMetrics(SM_CYVTHUMB); FrameRect(Mdcxp.hMemDC, &Rect, (HBRUSH) hHandle); Rect.left++;*/ // 还原并释放内存设备场景 Mdcxp.bTransfer = TRUE; ReleaseMemDCXP(&Mdcxp); }