C++隱藏任務欄圖標


在VC編程中,有時候我們需要將我們的程序在任務欄上的顯示隱藏起來,我試過幾種方法,下面我介紹一下我知道的三種方法。

  第一種方法是設置窗口WS_EX_TOOLWINDOW擴展樣式,通過在OnInitDialog函數中添加如下代碼:

  ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);

  ModifyStyleEx函數原型如下:

    BOOL ModifyStyleEx(
        DWORD dwRemove,
        DWORD dwAdd,
        UINT nFlags = 0 );

  第一個參數是要被去掉的擴展樣式,如果設為0或NULL,則不去除任何樣式;第二個參數類似,設置要添加的擴展樣式;第三個參數默認為0,表示不調用SetWindowPos函數,如果設為true或非0,表示之后會調用SetWindowPos函數。上述代碼為窗口添加了WS_EX_TOOLWINDOW樣式,同時去掉了WS_EX_APPWINDOW樣式,你可理解為這個窗口被設置成工具窗口,類似工具條。運行后效果如下:

MFC程序隱藏任務欄圖標的三種方法
通過這種方式隱藏程序在任務欄中的顯示存在幾個問題,第一個是程序的標題欄因為WS_EX_TOOLWINDOW樣式的關系變窄了,和普通的程序標題有所區別;第二個問題是在按下alt+tab鍵進行程序切換時,在任務候選列表中找不到這個程序。

  第二種方法比較復雜,各位看官可以參考VC知識庫的這篇文章《如何隱藏顯示在任務欄中的對話框程序》。這種方法提到幾點:第一、創建對話框時必須將它作為某個不可見框架窗口的子窗口;第二、這個不可見窗口的擴展式樣必須設置 WS_EX_TOOLWINDOW;第三、保證對話框的擴展式樣沒有設置 WS_EX_APPWINDOW;對比第一種方法,區別是這里用了兩個具有父子關系的窗口來實現這種效果,我應用這種方法隱藏了程序在任務欄中的顯示,而且這里顯示的窗口標題欄是正常的樣式。但也發現一個問題,在按下alt+tab鍵進行程序切換時,在任務候選列表中顯示的程序圖標不是程序原來設置的圖標,另我發現打開QQ登錄界面按下alt+tab鍵看到的也是這種情況,(注:新版本QQ2011已修正,另如果什么都不做,只去掉WS_EX_APPWINDOW樣式,也可以隱藏程序在任務欄中的顯示,但按下alt+tab組合鍵后,切換程序列表中將找不到你的窗口程序)如下圖:

MFC程序隱藏任務欄圖標的三種方法

  第三種方法很簡單,在資源里添加一個Dialog,添加一個對應的窗口類,在主對話框的OnInitDialog中添加這兩句代碼:
  CSkyLoginDlg m_SkyLoginDlg;

  m_SkyLoginDlg.DoModal();    // show login dialog

效果如下:

MFC程序隱藏任務欄圖標的三種方法
用這種方法達到隱藏任務欄圖標的目標,而且按下alt+tab鍵在任務候選列表中顯示正常。為使這個子窗口關閉整個程序跟着退出,可以在最后m_SkyLoginDlg.DoModal();后添上OnCancel()函數。

 

  以上三種方法都是目前我用過的,能隱藏任務欄圖標的,各位朋友有好的方法歡迎跟貼交流分享一下。

注:本文轉載自 https://blog.csdn.net/lonelyrains/article/details/40195085


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM