sw接口是什么意思啊_为什么有些任务栏上的按钮一点就消失了
蝎子
有時候,你會發現這么一個現象:點擊任務欄上的一個空白按鈕后,這個按鈕就消失不見了。這是為什么呢?在MSDN上,有一篇文章《some basic rules on which windows go into the taskbar》做了些介紹,簡而言之:> 如果一個窗口設置了WS_EX_APPWINDOW風格,則它會顯示在任務欄上。> 如果一個窗口是頂級且未被擁有的,則它會顯示在任務欄上。> 其他的所有情況,都不會顯示在任務欄上。
(盡管ITaskbarList接口把事情搞得有些復雜),當一個任務欄可感知(taskbar-eligible)窗口變為可見狀態時,任務欄將會為這個窗口創建一個按鈕。當它變為隱藏狀態時,任務欄會移除這個按鈕。如果窗口的狀態處于任務欄可感知(taskbar-eligible)和任務欄不可感知(taskbar-ineligible)這兩種狀態之間時,當這個窗口是可見時,則一個空白的按鈕會顯示在任務欄上。
考慮以下行為模式
> 窗口是任務欄可感知的。> 窗口如果變為可見狀態,則任務欄按鈕創建。> 窗口變成了任務欄不可感知的。> 窗口變成了不可見狀態,因為此時窗口不是任務欄可感知的,所以任務欄忽略了這個變化。
造成的結果
在任務欄會出現一個沒有掛接到任何窗口的按鈕。這個也是文檔會這樣建議:”如果你希望將一個窗口的風格進行動態的設置為一個不支持任務欄按鈕的風格,你必須先將窗口進行隱藏(通過傳入SW_HIDE到ShowWindow中),然后修改窗口的風格,最后顯示窗口?!?/p>
問題來了
為什么任務欄不對所有窗口的顯示和隱藏進行監控呢?
答案
因為這個操作是十分昂貴的。
過濾出不符合任務欄條件的窗口這一動作發生在USER32模塊內部,只有當任務欄符合條件的窗口的狀態發生了變化,它就通過HSHELL*通知消息來通知任務欄(或任何安裝了WH_SHELL鉤子的組件)。這樣,任務欄代碼就不會在沒有任何事情可做的情況下被頁換入(paged in)。
總結
這里面的狀態交互,還挺復雜的哈。等會兒,讓我把這事兒給縷縷。。。
最后
Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,里面有很多關于Windows的小知識,對于廣大Windows平臺開發者來說,確實十分有幫助。
本文來自:《What’s with those blank taskbar buttons that go away when I click on them?》
總結
以上是生活随笔為你收集整理的sw接口是什么意思啊_为什么有些任务栏上的按钮一点就消失了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: resultset需要关闭吗_旧电脑福音
- 下一篇: vba 修改access表的链接地址_神