读书人

为何小弟我派生的 CWnd 子类create后接

发布时间: 2012-01-29 21:39:32 作者: rapoo

为何我派生的 CWnd 子类create后接收不到 MouseMove 等消息?
我从 CWnd 派生了一个子类 CMyWnd, 在MFC对话框程序里某个按钮里面,new 出实例 CMyWnd.
然后, 对其进行了 CreateEx , 并且在 ClassName 参数传递了 AfxRegisterWndClass() 函数结果:
CString strClassName = ::AfxRegisterWndClass ( 0 );
return CWnd::CreateEx( WS_EX_TOOLWINDOW | WS_EX_TOPMOST , strClassName.GetBuffer(), _T(""), WS_POPUP, CRect(0,0,120,120), NULL, 0 );

按理说, 这样 CreateEx 后, 显示出来的窗口应该是个正常的窗口, 能接收所有的消息.
但是, 我这个新建出来的窗口其它功能都正常, 就是无法接收某些消息, 比如 MouseMove 消息就接收不到.
我跟踪过 CMyWnd 的 WindowProc 函数, 里面是有消息流过的, 当鼠标在这个窗体上滑过时, WindowProc 也接收到了不少消息. 但是没有一个是 MouseMove , 为什么呢??

[解决办法]
可以啊
CMyWnd m_wnd;

void CDialogDlg::OnBtnCreateNewWnd()
{
// TODO: Add your control notification handler code here
CString strClassName = ::AfxRegisterWndClass ( 0 );
m_wnd.CreateEx( WS_EX_TOPMOST | WS_EX_TOOLWINDOW ,
strClassName.GetBuffer(100), _T(""),
WS_OVERLAPPEDWINDOW | WS_POPUP| WS_VISIBLE,
CRect(0,0,400,200),NULL, NULL, 0 );
strClassName.ReleaseBuffer( );
}

void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
TRACE0(_T("OnMouseMove in CMyWnd\n"));
CWnd::OnMouseMove(nFlags, point);
}

读书人网 >VC/MFC

热点推荐