如何动态修改CButton的风格(通过SetWindowLong)
我在对话框种有一个按钮:ID = IDOK
在WM_INITDIALOG消息函数中:
CWnd *pWnd = GetDlgItem(IDOK);
long lProc = GetWindowLong(pWnd->m_hWnd,GWL_WNDPROC);
// DWORD dwStyle = pWnd->GetStyle();
// dwStyle |= BS_OWNERDRAW;
// ::SendMessage(pWnd->m_hWnd,BM_SETSTYLE,dwStyle,TRUE);
SetWindowLong(pWnd->m_hWnd,GWL_WNDPROC,(long)&XPButtonWndProc);
XPButtonWndProc为我自己的处理函数;
可是怎么不进WM_DRAWITEM消息:
下面是我的Button绘制函数:
那位大侠帮忙看看,哪儿出错了,还是前面的SetWindowLong出错了?
LONG APIENTRY XPButtonWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int i;
switch(uMsg)
{
case WM_CREATE:
break;
case WM_MOUSEMOVE:
if (!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = hwnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
m_bTracking = _TrackMouseEvent(&tme);
}
break;
case WM_MOUSELEAVE:
m_bOver = FALSE;
m_bTracking = FALSE;
InvalidateRect(hwnd,NULL, FALSE);
return 0;
case WM_MOUSEHOVER:
m_bOver = TRUE;
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case WM_DRAWITEM:
DrawButtonItem(hwnd,(int)wParam,(LPDRAWITEMSTRUCT)lParam);
return 0;
default:
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}