【发布时间】:2010-05-21 12:54:21
【问题描述】:
这是一个更具体的问题,与我之前的问题有关。
我有一个使用计时器的应用程序。代码的编写方式是我的WM_TIMER 处理程序使用一些自定义消息处理程序调用DialogBoxParam(...)(我们称之为DlgProc)。
这是通过以下方式完成的:
案例 WM_TIMER: { // 例程,显示一个特殊的消息框 显示消息框(...); 返回0; }
现在,如果我让DlgProc 处理这样的消息(参见代码),这将导致大量对话框(每个WM_TIMER 调用一个)。
switch (msg)
{
case WM_INITDIALOG:
// (...)
return TRUE;
case WM_COMMAND:
// (...)
return TRUE;
return FALSE;
}
但是,如果我将一个虚拟的 WM_PAINT 处理程序 (return TRUE;) 添加到我的 DlgProc,这将导致恰好显示一个对话框和 100% 的 CPU 负载(那是因为我收到了大量的 @ 987654330@ 消息)。
问:
如果我希望我的应用程序只显示一个对话框并且没有用于 WM_PAINT 处理的 CPU 负载,可以在这里做什么? (我的意思是,具有类似于绘制唯一对话框并完全暂停父窗口的行为)。
如果有人解释在这种情况下实际发生的情况以及为什么我会在我的对话框中收到大量的WM_PAINT 消息以及为什么它们的处理(使用return TRUE)会导致阻止其他对话框的创建,那就太好了.
谢谢。
【问题讨论】:
-
你是在代码中的某处调用 DefDlgProc
标签: c++ winapi modal-dialog