2017-02-20 247 views

回答

0

WS_EX_APPWINDOW樣式是無主窗口在任務欄上顯示時所必需的。

Extended Window Styles文檔明確指出,「工具窗口未出現在任務欄」中。

MSDN進一步對此進行了更詳細:

The Taskbar

殼牌放在任務欄上的按鈕,每當應用程序創建一個無主窗口,也就是說,不具有父窗口並且具有適當的擴展樣式位(參見下面的Managing Taskbar Buttons)。

...

管理任務欄按鈕

每當應用程序創建未擁有的窗口的shell創建任務欄上的按鈕。 要確保窗口按鈕放置在任務欄上,請使用WS_EX_APPWINDOW擴展樣式創建一個無主窗口。要防止將窗口按鈕放置在任務欄上,請使用WS_EX_TOOLWINDOW擴展樣式創建無主窗口。作爲替代方案,您可以創建一個隱藏窗口,並將該隱藏窗口設置爲可見窗口的所有者。

只有當窗口樣式支持可見的任務欄按鈕時,Shell纔會從任務欄中刪除窗口的按鈕。如果要將窗口樣式動態地更改爲不支持可見任務欄按鈕的樣式,則必須先隱藏該窗口(通過調用ShowWindowSW_HIDE),更改窗口樣式,然後顯示該窗口。

...

修改的Shell32.dll中的任務欄

Version 4.71 and later的內容添加到修改任務欄的內容的能力。 從應用程序中,您現在可以添加,刪除和激活任務欄按鈕。激活該項目不會激活窗口;它顯示在任務欄上按下的項目。

任務欄修改功能在一個組件對象模型(COM)對象(CLSID_TaskbarList)暴露該ITaskbarList接口(IID_ITaskbarList)來實現。您必須調用ITaskbarList::HrInit方法來初始化對象。然後可以使用ITaskbarList接口的方法修改任務欄的內容。

所以,你可能能夠使用ITaskbarList::AddTab()爲您的工具窗口:

任何類型的窗口可以被添加到任務欄,但建議該窗口至少有WS_CAPTION風格。

+0

好的,那麼有沒有辦法使用WS_EX_TOOLWINDOW風格,但使用WS_EX_APPWINDOW來顯示按鈕? – Dementor

+0

@演員這兩種風格不能混在一起。但是,您可以嘗試使用'ITaskbarList :: AddTab()'。我更新了我的答案。 –