在開始我們的IContextMenu系列文章之前,我想先開個小差,講講有關於WM_CONTEXTMENU這個訊息的微妙之處。
首先,我們看看下面來自於標頭檔案中關於HANDLE_WM_CONTEXTMENU宏的定義。
顯然,在標頭檔案中所定義的HANDLE_WM_CONTEXTMENU宏沒有考慮多顯示器支援。
第二個需要注意的地方是,WM_CONTEXTMENU訊息不僅可以透過滑鼠右鍵來觸發,而且還可以透過鍵盤按鍵來觸發。如果你的桌上型電腦有一臺104按鍵的鍵盤,你可以觀察下,鍵盤空格鍵的右邊會有一個選單按鍵。如果你的電腦是一臺膝上型電腦,則情況可能有些不同,因為膝上型電腦的鍵盤很難被標準化,各個廠家都會有一些獨特的定製按鍵。但不管怎麼樣,你都可以按下Shift + F10 來實現相同的效果。
當用戶從鍵盤上按下選單按鍵觸發了上下文選單時,x和y座標都會變成-1。在這種情況下,你應該在當前選中的條目上(或者當前被多個選中的條目上)來顯示上下文選單,如果你不注意這個細節,則可能會對無效座標(-1, -1)執行點選測試(Hit-Testing),而點選測試不會為你返回任何有意義的東西。
總結
好了,現在有關於WM_CONTEXTMENU訊息的細節就介紹到這裡,希望對你有所幫助。
後面,我們會重新回到遊戲主線情節,即IContextMenu介面系列文章。
最後
Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。
本文來自:《Pitfalls in handling the WM_CONTEXTMENU message》
最近我寫了個東西
正如你們所知道的,拓撲梅爾智慧辦公平臺(Topomel Box)是一款綠色軟體,主要面向經常使用電腦的朋友。它提供了各種提升辦公效率的小功能,同時操作上儘可能地簡單方便。
我想:你值得擁有。