MFC 非模态对话框窗如何响应PreTranslateMessage
时间: 2024-02-02 10:03:04 浏览: 99
MFC 非模态对话框教程
4星 · 用户满意度95%
在 MFC 中,非模态对话框窗口需要手动响应 PreTranslateMessage 函数。你可以在非模态对话框的消息处理函数中调用 PreTranslateMessage 函数,或者在 OnCreate 函数中手动创建对话框窗口并调用 PreTranslateMessage 函数。以下是一些示例代码:
在非模态对话框的消息处理函数中调用 PreTranslateMessage 函数:
```
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_ESCAPE)
{
// 处理 ESC 键按下事件
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
```
在 OnCreate 函数中手动创建对话框窗口并调用 PreTranslateMessage 函数:
```
int CMyDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建非模态对话框窗口
if (!m_mySubDlg.Create(IDD_MY_SUBDLG, this))
return -1;
// 手动调用 PreTranslateMessage 函数
MSG msg;
while (PeekMessage(&msg, m_hWnd, 0, 0, PM_REMOVE))
{
if (!m_mySubDlg.PreTranslateMessage(&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
```
需要注意的是,在非模态对话框的 PreTranslateMessage 函数中处理完消息后,需要将返回值传递给父窗口的消息处理函数,以确保消息被正确处理。
阅读全文