我想实现程序启动时不显示窗口,不知道这样的思路是否可行?
21 个解决方案
#1
MFC中
dlg.DoModal
dlg.Create
之类的
dlg.DoModal
dlg.Create
之类的
#2
??
#3
dlg.DoModal()是自动显示窗口的.
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?
#4
一般可以在 OnInitDialog 函数里面 用ShowWindow(SW_HIDE)来隐藏窗口 这样的话就不会显示了
#5
4数说的没有效果啊
#6
要看你是产生什么对话框了
如果是dlg.DoModal 产生的模态框,他是自动的显示出你的对话框,这个好像没有办法隐藏
如果是用dlg.create 产生的非模态框,你可以先ShowWindow(SW_HIDE);然后再ShowWindow(SW_SHOW);就可以实现了先隐藏再显示的功能
如果是dlg.DoModal 产生的模态框,他是自动的显示出你的对话框,这个好像没有办法隐藏
如果是用dlg.create 产生的非模态框,你可以先ShowWindow(SW_HIDE);然后再ShowWindow(SW_SHOW);就可以实现了先隐藏再显示的功能
#7
我也试了一个基于对话框的程序在OnInitDialog 使用showwindow和setwindowpos确实都不好用,不过这样的程序直接在资源文件中设置对话框的属性visible的钩拿掉就可以了。
#8
7楼说的也不行啊,
怎么才能实现隐藏运行
怎么才能实现隐藏运行
#9
不要用模态框,用非模态框!就是不用DoModal显示,具体步骤如下:在App类中声明一个对话框类的指针,然后再App类的InitInstance中在堆上用new分配一个对话框实例,并将该实例的指针赋给在头文件中声明的指针,然后调用CDialog的Create将该非模态框创建出来,接着调用ShowWindow将该对话框隐藏!但是这样的话你就不好再次显示对话框了,不知道你是否有可见的父窗口,如果有的话就好办了!
#10
基于对话框的工程吗?显示部分在App类的InitInstance函数中,使用的是DoModal();
#11
在对话框类的OnPaint函数中ShowWindow(SW_HIDE)可以隐藏。不过会有闪烁。
#12
程序启动时不显示窗口,我觉得最好的方法就是不用MFC,直接用SDK
#13
这种方法我试了一下,窗口会闪一下然后消失。
#14
这种方法我试了一下,窗口会闪一下然后消失,程序也退出了。
#15
做一个非常小的对话框作为主对话框,这样即使闪也不明显
#16
难道没有办法了吗?
mfc是在那里把窗口显示出来的
mfc是在那里把窗口显示出来的
#17
你可以跟踪一下,从DoModal()到CreateDlgIndirect()到RunModalLoop()窗口就显示出来了.
在RunModalLoop()中有:
// show the window when certain special messages rec'd
if (bShowIdle && (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
在RunModalLoop()中有:
// show the window when certain special messages rec'd
if (bShowIdle && (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
#18
响应对话框的WM_SHOWWINDOW
void CTest6Dlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
if( GetStyle() & WS_VISIBLE ) {
CDialog::OnShowWindow(bShow, nStatus);
} else {
long Style = ::GetWindowLong(*this, GWL_STYLE);
::SetWindowLong(*this, GWL_STYLE, Style | WS_VISIBLE);
CDialog::OnShowWindow(SW_HIDE, nStatus);
}
}
#19
以上办法都不行啊
#20
18楼对了
谢谢了
谢谢了
#21
xuexi
#1
MFC中
dlg.DoModal
dlg.Create
之类的
dlg.DoModal
dlg.Create
之类的
#2
??
#3
dlg.DoModal()是自动显示窗口的.
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?
#4
一般可以在 OnInitDialog 函数里面 用ShowWindow(SW_HIDE)来隐藏窗口 这样的话就不会显示了
#5
4数说的没有效果啊
#6
要看你是产生什么对话框了
如果是dlg.DoModal 产生的模态框,他是自动的显示出你的对话框,这个好像没有办法隐藏
如果是用dlg.create 产生的非模态框,你可以先ShowWindow(SW_HIDE);然后再ShowWindow(SW_SHOW);就可以实现了先隐藏再显示的功能
如果是dlg.DoModal 产生的模态框,他是自动的显示出你的对话框,这个好像没有办法隐藏
如果是用dlg.create 产生的非模态框,你可以先ShowWindow(SW_HIDE);然后再ShowWindow(SW_SHOW);就可以实现了先隐藏再显示的功能
#7
我也试了一个基于对话框的程序在OnInitDialog 使用showwindow和setwindowpos确实都不好用,不过这样的程序直接在资源文件中设置对话框的属性visible的钩拿掉就可以了。
#8
7楼说的也不行啊,
怎么才能实现隐藏运行
怎么才能实现隐藏运行
#9
不要用模态框,用非模态框!就是不用DoModal显示,具体步骤如下:在App类中声明一个对话框类的指针,然后再App类的InitInstance中在堆上用new分配一个对话框实例,并将该实例的指针赋给在头文件中声明的指针,然后调用CDialog的Create将该非模态框创建出来,接着调用ShowWindow将该对话框隐藏!但是这样的话你就不好再次显示对话框了,不知道你是否有可见的父窗口,如果有的话就好办了!
#10
基于对话框的工程吗?显示部分在App类的InitInstance函数中,使用的是DoModal();
#11
在对话框类的OnPaint函数中ShowWindow(SW_HIDE)可以隐藏。不过会有闪烁。
#12
程序启动时不显示窗口,我觉得最好的方法就是不用MFC,直接用SDK
#13
这种方法我试了一下,窗口会闪一下然后消失。
#14
这种方法我试了一下,窗口会闪一下然后消失,程序也退出了。
#15
做一个非常小的对话框作为主对话框,这样即使闪也不明显
#16
难道没有办法了吗?
mfc是在那里把窗口显示出来的
mfc是在那里把窗口显示出来的
#17
你可以跟踪一下,从DoModal()到CreateDlgIndirect()到RunModalLoop()窗口就显示出来了.
在RunModalLoop()中有:
// show the window when certain special messages rec'd
if (bShowIdle && (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
在RunModalLoop()中有:
// show the window when certain special messages rec'd
if (bShowIdle && (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
#18
响应对话框的WM_SHOWWINDOW
void CTest6Dlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
if( GetStyle() & WS_VISIBLE ) {
CDialog::OnShowWindow(bShow, nStatus);
} else {
long Style = ::GetWindowLong(*this, GWL_STYLE);
::SetWindowLong(*this, GWL_STYLE, Style | WS_VISIBLE);
CDialog::OnShowWindow(SW_HIDE, nStatus);
}
}
#19
以上办法都不行啊
#20
18楼对了
谢谢了
谢谢了
#21
xuexi