程式在啟動時隱藏視窗
--作者:賴玉平(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()實現如下
case 12:<br /> {<br /> KillTimer(12);<br /> ShowWindow(SW_HIDE); //這裡是消除工作列上的開啟痕迹的。<br /> break;<br /> }
4、當想讓程式恢複顯示,一般是響應快速鍵,或是雙擊等操作,比如我現在寫的3G應用程式,它初始化成功,會在工作列顯示一個訊號強度表徵圖,雙擊該表徵圖,就是開啟電話介面,實現代碼如下:
ShowWindow(SW_SHOW);<br /> SetForegroundWindow();<br /> MoveWindow(150,100,505,327,TRUE);//設定視窗顯示位置
大功造成!
下面是我在網上到到的一個比較可行的方法,但是屏還會閃一個框
============================================================
定義一個bool
m_show;//決定是否隱藏
m_show=false;//預設隱藏
可以在對話方塊中重載虛函數DefWindowProc()。
LRESULT CTest2Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)<br />{<br />if(message== WM_PAINT )<br />{<br />if(m_show==false)<br /> ShowWindow(SW_HIDE);<br />else<br /> ShowWindow(SW_SHOW);<br />}<br />return CDialog::DefWindowProc(message, wParam, lParam);<br />}
程式中想還原顯示的時候可以
m_show=true;
this->ShowWindow(SW_SHOW);