其次,隐藏主窗口
void CMyDialog::OnNcPaint()
{
static int i = 2;
if(i > 0)
{
i --;
ShowWindow(SW_HIDE);
}
else
CDialog::OnNcPaint();
}
重载窗口WM_CLOSE消息,在消息响应函数中:
void CDialog1::OnClose(){
// TODO: Add your message handler code here and/or call default
ShowWindow(SW_HIDE);
//CDialog::OnClose();
}
需要注意的是,标准对话框程序是模态调用的,模态窗口没有隐藏的概念,因此必须改成非模态创建才可以,主对话框修改在InitInstance入口中。
如果要用VC来完成这个事情,需要写代码的。要么用MFC来完成,这个很简单;要么用windows API完成,这个稍微复杂一点,但是用VC也可以直接生成代码(新建工程的时候选择此项即可),然后将窗口显示方式改为SW_HIDE。
总之一句话,你要用main()来控制程序进程,那么就没办法控制窗口的显示;你需要用windows的消息规则来控制窗口的显示。楼上说的都不准确。这个问题要从Windows最基本的原理将其,Windows所有的可见组建都是窗口,按钮,编辑框等都是窗口,他和模态对话框没有什么两样。
Windows有这么几个规定,当父窗口隐藏的时候,它所有的子窗口会同时隐藏,也就是你隐藏了父窗口,父窗口上的按钮,编辑框所有控件都会同时隐藏掉,这是很自然的,所以你由这个父窗口创建的模态对话框也同时被隐藏。如果父窗口被关闭,那么其所有子窗口都被关闭。如果移动父窗口,所有的子窗口会跟着移动。你这要想着对话框上的按钮也是对话框的子窗口,这样Windows的行为都变得可以理解了。
好了,回到你的问题,你要让模态对话框显示而父窗口不显示是不可能的,除非你隐藏的窗口不是他的父窗口,因此解决方法就是你创建模态对话框的时候不要把当前要隐藏的窗口的句柄给他,直接给NULL,这样就会创建没有父窗口的模态对话框,然后再隐藏你要隐藏的对话框就行了。不过顶级对话框可能会在任务栏里面增加新的按钮,这个我不确定。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)