vc++中,对话框工程怎么找到显示窗口的函数?

时间:2023-02-10 08:16:30
vc++中,对话框工程怎么找到显示窗口的函数?
我想实现程序启动时不显示窗口,不知道这样的思路是否可行?

21 个解决方案

#1


MFC中
dlg.DoModal
dlg.Create
之类的

#2


??

#3


dlg.DoModal()是自动显示窗口的.
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?

#4


一般可以在 OnInitDialog 函数里面 用ShowWindow(SW_HIDE)来隐藏窗口 这样的话就不会显示了

#5


4数说的没有效果啊

#6


要看你是产生什么对话框了
如果是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


引用 9 楼 wangyang327329 的回复:
不要用模态框,用非模态框!就是不用DoModal显示,具体步骤如下:在App类中声明一个对话框类的指针,然后再App类的InitInstance中在堆上用new分配一个对话框实例,并将该实例的指针赋给在头文件中声明的指针,然后调用CDialog的Create将该非模态框创建出来,接着调用ShowWindow将该对话框隐藏!但是这样的话你就不好再次显示对话框了,不知道你是否有可见的父窗口,如果有的话就好办了!



这种方法我试了一下,窗口会闪一下然后消失。

#14


这种方法我试了一下,窗口会闪一下然后消失,程序也退出了。

#15


做一个非常小的对话框作为主对话框,这样即使闪也不明显

#16


难道没有办法了吗?
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;
}

#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
之类的

#2


??

#3


dlg.DoModal()是自动显示窗口的.
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?

#4


一般可以在 OnInitDialog 函数里面 用ShowWindow(SW_HIDE)来隐藏窗口 这样的话就不会显示了

#5


4数说的没有效果啊

#6


要看你是产生什么对话框了
如果是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


引用 9 楼 wangyang327329 的回复:
不要用模态框,用非模态框!就是不用DoModal显示,具体步骤如下:在App类中声明一个对话框类的指针,然后再App类的InitInstance中在堆上用new分配一个对话框实例,并将该实例的指针赋给在头文件中声明的指针,然后调用CDialog的Create将该非模态框创建出来,接着调用ShowWindow将该对话框隐藏!但是这样的话你就不好再次显示对话框了,不知道你是否有可见的父窗口,如果有的话就好办了!



这种方法我试了一下,窗口会闪一下然后消失。

#14


这种方法我试了一下,窗口会闪一下然后消失,程序也退出了。

#15


做一个非常小的对话框作为主对话框,这样即使闪也不明显

#16


难道没有办法了吗?
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;
}

#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