CMainFrame OnCreate 中的消息框
Posted
技术标签:
【中文标题】CMainFrame OnCreate 中的消息框【英文标题】:Messagebox in CMainFrame OnCreate 【发布时间】:2014-03-24 12:32:14 【问题描述】:我有一个旧的 MFC 应用程序,其 OnCreate 函数跨越 200 行以上。
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
...
PostMessage(LOAD_IMAGES,0,0);
...
ValidatePermissions();
...
LOAD_IMAGES
是一条用户消息,其处理程序尝试加载上次会话中未保存的图像。基本上它尝试创建一个新的 CDocument...
ValidatePermissions
函数在发现缺少任何权限时会弹出一个模态消息框..
我注意到如果弹出模式消息框,那么当 LOAD_IMAGES 处理程序触发时我会崩溃(因为它无法创建 CDocument,我认为这是因为 CMainFrame 尚未创建)。
我应该如何处理这种情况。是否有任何文档建议在 OnCreate 中不要有模式消息框?
【问题讨论】:
【参考方案1】:尝试将对 ValidatePermissions 的调用移至 LOAD_IMAGES 的消息处理程序。在您让消息框泵送消息之前,这应该让窗口创建完成。
【讨论】:
所以基本上我应该移动任何可能导致模式消息框从 PostMessage 调用运行的东西? 一个消息框泵送消息,它引入了重新进入您的 wndproc 的可能性(即,当您仍在另一个消息处理程序中时调用 MFC 消息处理程序。) PostMessage 不是问题的原因:很多消息可能会导致在消息框期间重新进入。 好的,所以基本上如果有消息泵送,就有风险。从 postmessage 调用中调用消息框将允许 OnCreate 消息处理程序在消息框泵启动之前完成。以上是关于CMainFrame OnCreate 中的消息框的主要内容,如果未能解决你的问题,请参考以下文章
c++单文档如何在点关闭按钮时出现提示框,必须是在窗口关闭前出现
在MFC应用程序中的CStatusBar中添加CSliderCtrl