为自定义 Win32 模式对话框模仿 ::DialogBox()
Posted
技术标签:
【中文标题】为自定义 Win32 模式对话框模仿 ::DialogBox()【英文标题】:Mimicking ::DialogBox() for a custom Win32 modal dialog 【发布时间】:2013-05-09 06:51:29 【问题描述】:我有一个用 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 上以编程方式设置它的内容,但我想了解为什么上述方法不起作用。
【问题讨论】:
【参考方案1】:如果您想以编程方式布局对话框,请使用DialogBoxIndirectParam
。
【讨论】:
以上是关于为自定义 Win32 模式对话框模仿 ::DialogBox()的主要内容,如果未能解决你的问题,请参考以下文章
在无模式对话框中阻止 ESC 和 Enter 键(Win32,非 MFC)