【发布时间】:2012-01-05 12:10:48
【问题描述】:
好的,所以我正在使用此代码来隐藏基于对话框的 MFC 应用程序 (VC++) 的任务栏图标。每当我单击十字或关闭按钮时,任务栏图标和对话框都会隐藏。但我不能把这件事做对。每当我从标题栏点击关闭或十字按钮时,对话框首先闪烁并显示一种中间对话框,然后隐藏。这很烦人。经过两天徒劳的努力,我在这里发布了我的代码。所以请大家帮帮我。提前致谢。
void CMyAppDlg::OnBnClickedCancel()
{
// TODO: Add your control notification handler code here
CWnd* pWnd;
pWnd = AfxGetMainWnd();
RemoveTaskbarIcon(pWnd);
pWnd->ModifyStyle(WS_VISIBLE, 0);
mVisible = FALSE;
}
BOOL CMyAppDlg::RemoveTaskbarIcon(CWnd* pWnd)
{
LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
// Create static invisible window
if (!::IsWindow(mWndInvisible.m_hWnd))
{
if (!mWndInvisible.CreateEx(0, pstrOwnerClass, _T(""),
WS_POPUP,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, 0))
return FALSE;
}
pWnd->SetParent(&mWndInvisible);
return TRUE;
}
这是对话框的屏幕截图。当我按下关闭或交叉按钮时,最初看起来像this 的对话框在不到半秒的时间内变成了this,然后消失(隐藏)。
【问题讨论】:
-
如果您不想在任务栏中显示对话框,请更改窗口样式。不要弄乱不可见的父窗口(不可见的窗口的子窗口......不可见)。查看 WS_EX_TOOLWINDOW。
-
另外你不应该直接切换 WS_VISIBLE。使用 ShowWindow(SW_HIDE)。
标签: c++ visual-studio winapi visual-c++ mfc