上·志

上下求索,志在千里。

导航

程序在启动时隐藏窗口

Posted on 2012-12-26 16:33  Shangzhi  阅读(490)  评论(0)    收藏  举报
 

程序在启动时隐藏窗口

--作者:赖玉平(aulyp@163.com)

 

 

       想让对话框程序启动时是隐藏的,也就是在后台启动,(最开始我是为了让3G应用程序在后台初始化)然后需要时又可以显示。刚开始我也想到在OnInitDialog()中加上ShowWindow(SW_HIDE),其实这样是不行的,我试过在OnInitDialog的最后加了一个while(1)拖住进程,结果什么都没有显示,也就是说,OnInitDialog完了之后,才去进行显示资料处理。

找了网上的方法,都没有满足我的要求,下面我给出一个自已辛苦总结出来的方式,完全满足要求。方便广大同行。

1、在OnInitDialog()中用MoveWindow 隐藏窗口

MoveWindow(0,0,0,0);  //隐藏窗口

2、OnInitDialog最后,启用定时器,

SetTimer(12,1,NULL); //使用定时器12,

3、在定时器处理函数OnTimer()实现如下

 

  1. case 12:  
  2.                    {  
  3.                              KillTimer(12);  
  4.                ShowWindow(SW_HIDE); //这里是消除任务栏上的打开痕迹的。  
  5.                              break;  
  6.                    }  
 

 

4、当想让程序恢复显示,一般是响应快捷键,或是双击等操作,比如我现在写的3G应用程序,它初始化成功,会在任务栏显示一个信号强度图标,双击该图标,就是打开电话界面,实现代码如下:

 

  1. ShowWindow(SW_SHOW);  
  2. SetForegroundWindow();  
  3.          MoveWindow(150,100,505,327,TRUE);//设置窗口显示位置  
 

 

 

大功造成!

 

下面是我在网上到到的一个比较可行的方法,但是屏还会闪一个框

============================================================

定义一个bool m_show;//决定是否隐藏

m_show=false;//默认隐藏

可以在对话框中重载虚函数DefWindowProc()。 

 
  1. LRESULT CTest2Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)   
  2. {  
  3. if(message== WM_PAINT )   
  4. {  
  5. if(m_show==false)  
  6.     ShowWindow(SW_HIDE);  
  7. else  
  8.    ShowWindow(SW_SHOW);  
  9. }  
  10. return CDialog::DefWindowProc(message, wParam, lParam);  
  11. }  
 

 

程序中想还原显示的时候可以

m_show=true;
this->ShowWindow(SW_SHOW);