程序在启动时隐藏窗口
--作者:赖玉平([email protected])
想让对话框程序启动时是隐藏的,也就是在后台启动,(最开始我是为了让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()实现如下
<textarea cols="50" rows="15" name="code" class="cpp:nogutter"> case 12: { KillTimer(12); ShowWindow(SW_HIDE); //这里是消除任务栏上的打开痕迹的。 break; }</textarea>
4、当想让程序恢复显示,一般是响应快捷键,或是双击等操作,比如我现在写的3G应用程序,它初始化成功,会在任务栏显示一个信号强度图标,双击该图标,就是打开电话界面,实现代码如下:
<textarea cols="50" rows="15" name="code" class="cpp"> ShowWindow(SW_SHOW); SetForegroundWindow(); MoveWindow(150,100,505,327,TRUE);//设置窗口显示位置</textarea>
大功造成!
下面是我在网上到到的一个比较可行的方法,但是屏还会闪一个框
============================================================
定义一个bool m_show;//决定是否隐藏
m_show=false;//默认隐藏
可以在对话框中重载虚函数DefWindowProc()。
<textarea cols="50" rows="15" name="code" class="c-sharp">LRESULT CTest2Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message== WM_PAINT ) { if(m_show==false) ShowWindow(SW_HIDE); else ShowWindow(SW_SHOW); } return CDialog::DefWindowProc(message, wParam, lParam); }</textarea>
程序中想还原显示的时候可以
m_show=true;
this->ShowWindow(SW_SHOW);