PreTranslateMessage函数响应消息的问题,比如我按下ESC键,我要在PreTranslateMessage函数中处里pMsg-> wParam == VK_ESCAPE的情况。问题是我现在在一个主对话框上有很多子对话框,子对话框上又有很子对话框,就是很多层了,我是想知道我按下ESC键时到底是那一层可以接获到VK_ESCAPE消息,我发现有时是主对话框,又时又是其他子对话框。想问一下这按下ESC键VK_ESCAPE消息是怎么确定发到哪个对话框上去的?是获得焦点的窗口?是最上面的窗口?
解决方案 »
- MFC vector 定义二维动态数组
- 对话框画图中怎么获得画图区域里像素的范围
- 关于重画线条的问题
- 自定义一个浮动工具栏,并且可以在工具栏中添加和删除某个工具按钮
- AMD CPU中的NB寄存器指的是哪,该如何访问
- 请问谁有VC++,或MFC关于多线程编程方面的资料啊???
- How to skin CtreeCtrl including scrollbars and column headers
- 高手请回答:关于GDIPlus的问题,顶着有分
- 急急急!请问如何将自己在vc下编的程序由debug版变为release版??
- 怎样初始化CFONGDIALOG 我为什么用CFONGDIALOG D;D.DOMODER()不能初始化字体名称和大小?
- 多线程访问数据库,需要同步否?
- 问一个消息的事情,spy++监视:鼠标父窗口上有一个子窗口,发现子窗口有MouseMove,而子窗口上对应用的父窗口缺受不到消息,为什么?
即AfxGetMainWnd得到的窗口
如果当前对话框没有加入PreTranslateMessage函数,那当前对话框应该会退出,除非你代码里禁止ESC退出。如果当前对话框加入了这个函数,那按ESC键就是响应你自己的代码。
if(pMsg-> message == WM_KEYDOWN)
{
if(pMsg-> wParam ==VK_ESCAPE)
{
设断点处。
}
}
跟踪后发现并不是什么情况都在主对话框里截获,有时是子对话框截获的。
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG, *NPMSG, *LPMSG;
virtual BOOL PreTranslateMessage(
MSG* pMsg )
{CWnd *wnd=CWnd::FromHandle(pMsg->hwnd);
if(wnd != NULL && wnd->IsKindOf( RUNTIME_CLASS(CDialog)))
{
pDlg = (CDialog *)wnd;//这就是接收消息对话框
}
}消息中是带有窗口信息的,没有测试,不知道对不对
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
口说无凭,你用messagebox看看pMsg->hWnd是什么就知道了