首先要在App类中把对对话框的模式创建改为非模式创建。
具体方法如下:
此时已经创建好了一个非模式对话框,并且初始是隐藏的。
CTestHideDialogDlg *dlg = new CTestHideDialogDlg();
m_pMainWnd = dlg;
if (dlg!=NULL) {
BOOL ret = dlg->Create(IDD_TESTHIDEDIALOG_DIALOG);
if(!ret){
AfxMessageBox("Error creating Dialog");
return FALSE;
}
dlg->ShowWindow(SW_HIDE);
}
else
AfxMessageBox("Error Creating Dialog Object");
接下来要添加消息循环的处理代码,否则程序会自动退出。
BOOL bRet;
MSG msg;while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0 )
{
if (bRet == -1 )
{
}
else if (msg.message == WM_COMMAND && msg.wParam == IDOK) {
break;
}
else if (!IsWindow(m_pMainWnd->m_hWnd) || !IsDialogMessage(m_pMainWnd->m_hWnd, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
此处设计为当用户按下对话框上的OK键时程序退出。
由于一开始程序主窗口是隐藏的,需要一个键盘的Hook,设计为当用户按下某个键或组合键时,程序主窗口显示出来。具体的细节不在此文中叙述,请查阅相关资料。