gpt4 book ai didi

c++ - 隐藏 MFC 对话框

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:32 28 4
gpt4 key购买 nike

好的,所以我使用这段代码来隐藏基于对话框的 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不到半秒然后消失(隐藏)。

最佳答案

如果您使用 CDialog::DoModal() 显示您的对话框,框架将确保显示您的对话框。只有一种方法可以阻止显示模态对话框:

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_WM_WINDOWPOSCHANGING()
END_MESSAGE_MAP()

BOOL CHiddenDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_visible = FALSE;

return TRUE;
}

void CHiddenDialog::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if (!m_visible)
lpwndpos->flags &= ~SWP_SHOWWINDOW;

CDialog::OnWindowPosChanging(lpwndpos);
}

关于c++ - 隐藏 MFC 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com