這個問題之前已經被問過,但沒有答案是「好吧,這取決於每個應用程式是否支援不同的選項」。儘管如此,當您右鍵單擊記事本、瀏覽器中的某個選項時,無論某些東西都會建立上下文選單。應用程式如何做到這一點?為什麼我不能添加它?如何新增到突出顯示上下文選單?沒有答案比沒有答案好。
答案1
簡短回答:如果您新增了新的選單項,單擊該項目時,程式不知道要做什麼。實際上,您必須更改程式的程式碼才能使新的選單項目執行某些操作。這就是為什麼「這取決於每個應用程式」是一個有效的答案。
與大多數其他作業系統一樣,Windows 提供了一組用於建立GUI 程式的功能- 有些是系統的一部分(「建立視窗」),其他的主要是為了方便(「繪製一個可以點擊的按鈕」) 。
大多數程式透過使用這些函數來顯示其選單(正常選單和上下文選單)——它們基本上為 Windows 提供一個項目列表,並要求其以菜單的形式顯示在螢幕上,並通知程式您選擇的內容。
Windows 並不特別關心項目清單的來源。有些選單是由程式本身產生的(例如“最近的文件”列表);如果不實際重寫建立最近文件清單的程式部分,則無法變更這些內容。其他選單,例如記事本中的「文件」或「編輯」或「幫助」選單,是根據文件.exe
本身中儲存的「資源」建立的,並且有一些工具可以編輯此類資源(例如重新排列選單項目或更改程式的圖示)。
但是如果你使用這樣的工具來添加新的選單項,它們將不起作用,因為程序不知道該怎麼辦。每個選單項目沒有任何關聯,只有一個數字,即「指令 ID」。例如,在許多程式中常見的「複製」已指派命令 ID 12(「IDM_COPY」),而特定於單一程式的某些內容(例如「新遊戲」)可能具有 1234 或 2468 或其他內容。當您開啟上下文選單並按一下“複製”時,Windows 僅告訴記事本“選擇了命令 ID 12”,並且無論何時發生這種情況,都由記事本實際將選定的文字放入剪貼簿。
- 剪下 → ID 11 → 記事本將文字放入剪貼簿,然後從文件中刪除
- 複製 → ID 12 → 記事本將文字放入剪貼簿
- 貼上 → ID 13 → 記事本從剪貼簿取得文本,然後將其插入文件中
- 唱歌 → ID 12 → 記事本將文字放入剪貼簿
- 再次複製 → ID 3456 → 記事本不執行任何操作,因為它不知道 ID 3456 的含義
附註:上面有點簡化。記事本中的上下文功能表實際上是由「可編輯文字」控制項實現的,它是Windows提供的前述實用功能的一部分。然而,主選單完全是記事本的一部分。
附註:有些程序,通常是那些可以設定皮膚或主題的程序,實際上會自己繪製各種控制項 - 這並不是特別難,因為彈出式選單只是一個沒有標題列的視窗。雖然我自己從未見過此類程式的程式碼,但我認為細節不會有太大變化。