如何使用 MFC 从控制台正确弹出无模式对话框
Posted
技术标签:
【中文标题】如何使用 MFC 从控制台正确弹出无模式对话框【英文标题】:How to correctly pop a modeless dialog from console using MFC 【发布时间】:2010-03-25 11:50:42 【问题描述】:我需要创建一个具有 main() 函数的控制台应用程序并弹出一个无模式对话框,这样控制台仍然可以与无模式对话框并行工作(做其他工作,比如与无模式对话框通信)。
无论我尝试了什么,我都只能弹出一个模态对话框。 (控制台一直保持到模态对话框自行关闭)。
当使用 Create() 和 ShowWindow() 切换到 modeless 对话框时,对话框显示时没有控件并且它冻结/阻止(您可以看到沙漏光标) .
1) 我试图从 main() 函数中弹出无模式对话框:
void main()
AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
TestGUI * gui;
gui = new TestGUI();
gui->Create(TestGUI::IDD);
gui->ShowWindow(SW_SHOW);
// just to see if the modeless dialog responses
Sleep(10000);
2) 我试图从 CWinApp 派生类的 InitInstance() 中弹出无模式对话框:
extern int AFXAPI AfxWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow);
class MyApp : public CWinApp
public:
virtual BOOL InitInstance()
gui = new TestGUI();
gui->Create(TestGUI::IDD);
gui->ShowWindow(SW_SHOW);
return TRUE;
private:
TestGUI * gui;
;
MyApp my_app;
void main()
AfxWinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
// just to see if the modeless dialog responses
Sleep(10000);
在所有情况下,无模式对话框都会冻结。
我相信这是一个单一的解决方案。 请帮忙。
TNX,Vertilka
【问题讨论】:
【参考方案1】:下面的代码sn-p解决问题:
#include "stdafx.h"
#include "TestGUI.h"
DWORD WINAPI ModelessThreadFunc(LPVOID)
TestGUI gui;
gui.Create(TestGUI::IDD);
gui.ShowWindow(SW_SHOW);
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, L"CloseModelessDialog");
MSG msg;
while(WaitForSingleObject(hEvent, 0) != WAIT_OBJECT_0)
while(::GetMessage(&msg, NULL, 0, 0))
::TranslateMessage(&msg);
::DispatchMessage(&msg);
// event cleanup
CloseHandle(hEvent);
return 0;
void main()
// initialize MFC
AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
// create thread for the modeless dialog
CreateThread(NULL, 0, ModelessThreadFunc, NULL, 0, NULL);
// wait for the modeless dialog to close itself
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, L"CloseModelessDialog");
while(WaitForSingleObject(hEvent, 0) != WAIT_OBJECT_0)
// do other job
// event cleanup
CloseHandle(hEvent);
另请看以下链接:microsoft newsgroups
【讨论】:
以上是关于如何使用 MFC 从控制台正确弹出无模式对话框的主要内容,如果未能解决你的问题,请参考以下文章