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