我有一个用 C++ 编写的老式 Win32 模态对话框。布局是在代码中构建的(不是从资源加载的),并使用自定义模式消息循环显示,如下所示:
// Spin message loop
window->m_modalInfo = &mi;
while (!mi.modalFinished)
{
// Get a message
MSG msg;
GetMessage(&msg, NULL, 0, 0);
// Process dialog messages first
if (IsDialogMessage(hWnd, &msg))
continue;
// Dispatch other messages
TranslateMessage(&msg);
DispatchMessage(&msg);
}
在大部分作品中,除了一些烦恼
使用 Common Controls 6 时,在按标准对话框按下 alt 键后,快捷助记符和虚线焦点矩形上的下划线不会出现。(如果我在对话框启动时按住键,它们确实会出现)。
单击父窗口时,我没有像标准对话框那样使对话框框闪烁。(在运行上述循环之前,我禁用了拥有窗口)。
基本上我想要标准对话框过程的功能,但不从资源加载对话框。
需要明确的是,无法从资源加载布局。我可以使用一个空的对话框模板,调用 ::DialogBox() 并在 WM_INITDIALOG 上以编程方式设置它的内容,但我想了解为什么上述方法不起作用。