
在VC編程中,有時候我們需要將我們的程序在任務(wù)欄上的顯示隱藏起來,我試過幾種方法,下面我介紹一下我知道的三種方法。
第一種方法是設(shè)置窗口WS_EX_TOOLWINDOW擴(kuò)展樣式,通過在OnInitDialog函數(shù)中添加如下代碼:
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
ModifyStyleEx函數(shù)原型如下:
BOOL ModifyStyleEx(
DWORD dwRemove,
DWORD dwAdd,
UINT nFlags = 0);
第一個參數(shù)是要被去掉的擴(kuò)展樣式,如果設(shè)為0或NULL,則不去除任何樣式;第二個參數(shù)類似,設(shè)置要添加的擴(kuò)展樣式;第三個參數(shù)默認(rèn)為0,表示不調(diào)用SetWindowPos函數(shù),如果設(shè)為true或非0,表示之后會調(diào)用SetWindowPos函數(shù)。上述代碼為窗口添加了WS_EX_TOOLWINDOW樣式,同時去掉了WS_EX_APPWINDOW樣式,你可理解為這個窗口被設(shè)置成工具窗口,類似工具條。運(yùn)行后效果如下:
通過這種方式隱藏程序在任務(wù)欄中的顯示存在幾個問題,第一個是程序的標(biāo)題欄因?yàn)閃S_EX_TOOLWINDOW樣式的關(guān)系變窄了,和普通的程序標(biāo)題有所區(qū)別;第二個問題是在按下alt+tab鍵進(jìn)行程序切換時,在任務(wù)候選列表中找不到這個程序。
第二種方法比較復(fù)雜,各位看官可以參考VC知識庫的這篇文章《如何隱藏顯示在任務(wù)欄中的對話框程序》。這種方法提到幾點(diǎn):第一、創(chuàng)建對話框時必須將它作為某個不可見框架窗口的子窗口;第二、這個不可見窗口的擴(kuò)展式樣必須設(shè)置WS_EX_TOOLWINDOW;第三、保證對話框的擴(kuò)展式樣沒有設(shè)置WS_EX_APPWINDOW;對比第一種方法,區(qū)別是這里用了兩個具有父子關(guān)系的窗口來實(shí)現(xiàn)這種效果,我應(yīng)用這種方法隱藏了程序在任務(wù)欄中的顯示,而且這里顯示的窗口標(biāo)題欄是正常的樣式。但也發(fā)現(xiàn)一個問題,在按下alt+tab鍵進(jìn)行程序切換時,在任務(wù)候選列表中顯示的程序圖標(biāo)不是程序原來設(shè)置的圖標(biāo),另我發(fā)現(xiàn)打開QQ登錄界面按下alt+tab鍵看到的也是這種情況,(注:新版本QQ2011已修正,另如果什么都不做,只去掉WS_EX_APPWINDOW樣式,也可以隱藏程序在任務(wù)欄中的顯示,但按下alt+tab組合鍵后,切換程序列表中將找不到你的窗口程序)如下圖:
第三種方法很簡單,在資源里添加一個Dialog,添加一個對應(yīng)的窗口類,在主對話框的OnInitDialog中添加這兩句代碼:
CSkyLoginDlg m_SkyLoginDlg;
m_SkyLoginDlg.DoModal();//show login dialog
效果如下:
用這種方法達(dá)到隱藏任務(wù)欄圖標(biāo)的目標(biāo),而且按下alt+tab鍵在任務(wù)候選列表中顯示正常。為使這個子窗口關(guān)閉整個程序跟著退出,可以在最后m_SkyLoginDlg.DoModal();后添上OnCancel()函數(shù)。
以上三種方法都是目前我用過的,能隱藏任務(wù)欄圖標(biāo)的,各位朋友有好的方法歡迎跟貼交流分享一下。
愛華網(wǎng)
