[回调函数]不行了,关于SetWindowLong与CView,请兄弟们帮忙!
wacle 2005-11-22 05:08:15 在MDI/SDI模式下,我想通过SetWindowLong来执行回调函数,捕获鼠标信息,但是我这样设置后,发现根本没有截获任何鼠标消息,但可以捕获到WM_PAINT信息;在Dialog Based模式下,通过将nIndex设置成DWL_DLGPROC,可以捕获到鼠标信息,不知何故。请研究过的兄弟们帮我分析一下原因,多谢!
代码如下:
WNDPROC XWndProc;
CWnd* pWnd=NULL;
LRESULT CALLBACK HkWindProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg) {
case WM_MOUSEMOVE:
{
UINT nFlags = (UINT)wParam;
int x=(short)LOWORD(lParam);
int y=(short)HIWORD(lParam);
CString cs;
cs.Format("Mouse over:x=%d,y=%d",x,y);
pWnd->GetDC()->TextOut(100,100,cs);
break;
}
case WM_LBUTTONDBLCLK:
{
UINT nFlags = (UINT)wParam;
int x=(short)LOWORD(lParam);
int y=(short)HIWORD(lParam);
CString cs;
cs.Format("LButton DBLClick:x=%d,y=%d",x,y);
pWnd->GetDC()->TextOut(100,100,cs);
break;
}
case WM_LBUTTONDOWN:
{
UINT nFlags = (UINT)wParam;
int x=(short)LOWORD(lParam);
int y=(short)HIWORD(lParam);
CString cs;
cs.Format("LButton Down:x=%d,y=%d",x,y);
pWnd->GetDC()->TextOut(100,100,cs);
break;
}
case WM_LBUTTONUP:
{
UINT nFlags = (UINT)wParam;
int x=(short)LOWORD(lParam);
int y=(short)HIWORD(lParam);
CString cs;
cs.Format("LButton Up:x=%d,y=%d",x,y);
pWnd->GetDC()->TextOut(100,100,cs);
break;
}
//case WM_PAINT:
// break;
default:
CallWindowProc(XWndProc,hWnd,msg,wParam,lParam);
break;
}
return 0;
}
//设置代码在CView子类的一个成员函数中
void CTestView::OnStart()
{
// TODO: Add your command handler code here
pWnd = this;
XWndProc = (WNDPROC)SetWindowLong(this->m_hWnd,GWL_WNDPROC,(LONG)HkWindProc);
}