之前想弄個像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