怎樣讓窗口不顯示在任務欄和ALT+TAB中(隱藏窗口再嵌套,幾乎是萬能的辦法)


之前想弄個像QQ旋風那樣的懸浮窗口,就研究了下怎么讓窗口不顯示在任務欄中,方法其實很簡單就是將窗口的擴張屬性設置成WS_EX_TOOLWINDOW,MSDN中對該屬性有詳細介紹,代碼如下:

 

::SetWindowLong(m_hWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW );

 

但是這樣一來窗口的其他的擴展屬性不管有沒有,肯定是全沒有,因此可以用下面的方法保留窗口的其他擴展屬性:

 

DWORD dwExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);  
dwExStyle |= WS_EX_TOOLWINDOW;  
::SetWindowLong(m_hWnd, GWL_EXSTYLE, dwExStyle);

 

不過上面的代碼並不能達到目的,也就是任務欄中仍然有顯示,后來研究發現只有去掉了WS_EX_APPWINDOW這個擴展屬性才能兩個目的都能完全達到,代碼如下:

 

DWORD dwExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);  
dwExStyle |=  WS_EX_TOOLWINDOW;
::SetWindowLong(m_hWnd, GWL_EXSTYLE, dwExStyle & ~WS_EX_APPWINDOW);

 

我在網上看過一種方法是先創建一種隱藏窗口,然后以這個隱藏窗口為父窗口再創建一個子窗口,是的,任務欄是沒有顯示了,但是你用ALT+TAB還是看得到,要徹底隱藏,這個時候只需再給這個子窗口設置一個WS_EX_TOOLWINDOW屬性就可以了。

另外還有一個WS_EX_LAYERED  的使用,當你需要修改窗口的透明度時必須給窗口加上該屬性。

 

注:上面的代碼可以加在OnInitDialog()里面測試

http://blog.csdn.net/magictong/article/details/3486744


免責聲明!

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



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