我编写了一个基于MFC对话框的应用程序,该应用程序由另一个应用程序启动。目前,我还没有添加任何代码。它只是我得到的默认文件。另一个应用程序可以成功启动我的应用程序。
我试图在其他应用程序启动时隐藏我的应用程序窗口。
BOOL CMyApp::InitInstance()
{
CMyAppDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
return FALSE;
}
我试图使用:
dlg.ShowWindow(SW_HIDE)
但它仍然没有隐藏窗口。
我该如何完成这项任务?
答案 0 :(得分:2)
我建议你在某个地方有另一个问题。
如果您创建一个全新的空白MFC应用程序(Visual Studio 2010),那么在App :: InitInstance中,设置SW_HIDE而不是SW_SHOW 会导致隐藏结果窗口。
BOOL CProj1App::InitInstance()
{
// boilerplate code
. . .
// The one and only window has been initialized, so show and update it
m_pMainWnd->ShowWindow(SW_HIDE); // WORKS!
m_pMainWnd->UpdateWindow();
return TRUE;
}
答案 1 :(得分:2)
一旦你致电DoModal
,你的对话就注定要被显示出来。只有一种解决方法可以成功避免焦点/闪烁问题。请在此处查看我的回答:Hiding an MFC dialog box
因此,您的代码应如下所示:
BOOL CMyApp::InitInstance()
{
CMyAppDlg dlg;
dlg.SetVisible(FALSE); // Sets m_visible flag to FALSE.
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
return FALSE;
}
答案 2 :(得分:1)
解决上述问题。 InitInstance代码应如下所示:
BOOL CMyApp::InitInstance()
{
CWinApp::InitInstance();
AfxEnableControlContainer();
CMyAppDlg dlg;
dlg.Create(IDD_MyAppUI_DIALOG,NULL);
dlg.ShowWindow(SW_HIDE);
dlg.UpdateWindow();
m_pMainWnd = &dlg;
return TRUE;
}
答案 3 :(得分:1)
您必须从内部隐藏对话框。
这是代码
BOOL CMyAppDlg::OnInitDialog()
{
BOOL result = CDialogEx::OnInitDialog();
this->ShowWindow(SW_HIDE);
return result; // return TRUE unless you set the focus to a control
}
答案 4 :(得分:1)
首先让我解决先前解决方案的一些问题。
chintan s: 事实上,当功能超出范围时,对话框将被终止。如果将对话框声明为app类的成员变量,那将是一个有效的解决方案。
<强> Vikky:强> 无需调用Windows API,因为对话框是从CWnd派生的,它继承了只接受一个参数的ShowWindow成员:show command。
<强> ixe013:强> 这个解决方案可行,但是,在对话框隐藏之前,它会闪烁,因为在调用OnInitDialog之前调用了ShowWindow。
<强>皮特:强> 这不起作用,因为模态对话框在m_pMainWnd分配了任何值之前就开始了。
解决方案由ixe013指出。
这是迄今为止唯一可行的解决方案,但您必须在对话框类中声明成员变量,如本文所述。
答案 5 :(得分:0)
showWindow方法有2个变量。
nCmdShow(控制窗口的显示方式)
BOOL WINAPI ShowWindow( 在 HWND hWnd中, In int nCmdShow ); 强>
HWND hWnd = GetSafeHwnd();
的ShowWindow(HWND,SW_HIDE);
请参阅HERE