更新:可能的解决方案。在头文件中声明CWait对话框似乎解决了这个问题。控件在非模态对话框中不呈现MFC
UPDATE2:消息泵可能是罪魁祸首。明确的“抽”似乎解决了问题。
我试图显示一个模式“请稍候”对话框,而一些功能在应用程序中执行。我想要显示的对话框是:
使用此代码调用对话框。
CWait dialog;
dialog.Create(IDD_WAIT);
dialog.SetWindowTextW(L"Geocoding");
dialog.ShowWindow(SW_SHOW);
mastImageGeocode(); //Working here
slvImageGeocode();
interfImageGeocode();
cohImageGeocode();
dialog.CloseWindow();
什么最终显示是这样的:
我似乎无法弄清楚,为什么控件不渲染。
我试着手工处理的消息循环使用这种方法的对话框的初始化后:
MSG stMsg;
while (::PeekMessage (&stMsg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage (&stMsg);
::DispatchMessage (&stMsg);
}
没有真正发挥作用。
我也试过指针方式
Cwait * dialog; //THis is in header
dialog = new CWait(this);
dialog->Create(IDD_WAIT);
dialog->SetWindowTextW(L"Geocoding");
dialog->ShowWindow(SW_SHOW);
mastImageGeocode(); //Some work here
slvImageGeocode();
interfImageGeocode();
cohImageGeocode();
dialog->CloseWindow();
delete dialog;
难道我做错了什么。
感谢您的帮助。
更新:如果我在个别函数中调用它,它工作正常!
作为一个快速测试,做dialog.ShowModal();工作好吗? – JBRWilkinson
@JBRWilkinson你的意思是doModal()对不对? 'CWait对话框; \t \t dialog.DoModal();'确实对我有效。 – shaunakde
如果我将相同的代码放在3个函数中的每一个中,它将会工作一次,下一次不会工作(显示) – shaunakde