怎样隐藏模态对话框的窗口?

shijianyingxiong 2011-03-02 03:48:51
BOOL CMyApp::InitIstance()
{
CMyDialog theDlg;
m_pMainWnd=&theDlg;
dlg.DoModal();
dlg.ShowWindow(WS_HIDE);
return FALSE;
}

这样不行。。怎么办?
...全文
519 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allen_zhang 2011-03-02
  • 打赏
  • 举报
回复
在OnPaint中ShowWindow(hide),然后直接返回不用画了
liujie250079934 2011-03-02
  • 打赏
  • 举报
回复
我是在OnPaint() 里隐藏的,但是会闪一下
xiaohuh421 2011-03-02
  • 打赏
  • 举报
回复
网上发现这种方法
在OnInitDialog函数中加入如下代码
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);

恢复显示的话,当然是反过程.

只不过按如下方式恢复的话,窗口就变得只有工具栏大小了,所以在隐藏前,得先保存窗口大小和位置,方便恢复.

//只恢复窗口类型但大小被改变了.
ModifyStyleEx(WS_EX_TOOLWINDOW,WS_EX_APPWINDOW);
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_SHOWNORMAL;
SetWindowPlacement(&wp);

//加上其它恢复窗口大小和位置的代码.
xiaohuh421 2011-03-02
  • 打赏
  • 举报
回复
在CDialog类的DoModal函数中有如下代码
if (m_nFlags & WF_CONTINUEMODAL)
{
// enter modal loop 进入模态循环
DWORD dwFlags = MLF_SHOWONIDLE;//注意这里的标记.
if (GetStyle() & DS_NOIDLEMSG)
dwFlags |= MLF_NOIDLEMSG;
VERIFY(RunModalLoop(dwFlags) == m_nModalResult);
}

在 RunModalLoop函数中又有
// show the dialog when the message queue goes idle
//显示对话框当消息队列空闲的时候.
if (bShowIdle)
{
ShowWindow(SW_SHOWNORMAL);//显示
UpdateWindow();
bShowIdle = FALSE;
}

// show the window when certain special messages rec'd
//当接收到某些特别消息的时候显示窗口
if (bShowIdle &&
(pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);//显示
UpdateWindow();
bShowIdle = FALSE;
}

有了这么多限制,想以隐藏的方式创建它还真不容易.......
手机写程序 2011-03-02
  • 打赏
  • 举报
回复
dlg.DoModal();//会阻塞在这里

dlg.ShowWindow(WS_HIDE);//这里运行不到,直到dlg退出。
shenyi0106 2011-03-02
  • 打赏
  • 举报
回复
在CMyDialog 类的OnInitDialog里面调用ShowWindow(WS_HIDE)来隐藏
DoModal()会阻塞的,你无法调用到dlg.ShowWindow(WS_HIDE),DoModal()返回后界面也就消失了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧