2010-01-11 51 views
3

前段時間我問了一下how to pop up the Windows context (right-click) menu for a certain file in Delphi。然而,即使一切正常(幾乎)好,「發送到...」和「打開...」子菜單都沒有任何項目,即使當我在資源管理器中右鍵單擊相同的文件名時工作確定。 (例如,'發送到...'有'桌面(創建shotcut)','電子郵件收件人'等)。如何顯示'發送到'和'打開方式'上下文菜單?

如何讓這些菜單顯示?

回答

4

Raymond Chen幾年前在關於託管上下文菜單的多部分系列文章中提到了這個準確的問題。他的文章的關鍵主題是,在閱讀文檔時,您必須記住您的程序正在播放shell的一部分,而文檔通常是從實現上下文菜單界面的代碼的角度編寫的,而不是調用它們的代碼。

早在part 2,陳觀察發送到和打開的菜單顯示爲空。 Part 5解決您對這些子菜單的直接關注。答案是你需要處理菜單消息。有一個與你的菜單相關的窗口句柄 - 你提供給TrackPopupMenuEx的句柄(HND在你的問題Issam's answer)。該窗口將在菜單處於活動狀態時接收消息,並且需要將它們轉發給實現菜單命令的對象。窗口有一個窗口過程,這就是你需要調用菜單界面的方法HandleMenuMsgHandleMenuMsg2方法。這篇文章有一個例子。

這篇文章系列的其他部分涵蓋了當你說你的菜單「幾乎」有效時,你無疑暗指的其他事情。 Part 3討論屬性對話框出現的位置。 Part 7關於調用默認動詞。我建議你閱讀整個系列。不要害怕一切都以C++爲基礎;它幾乎是所有的接口方法和API函數,所以它應該轉化爲Delphi而不會有太大麻煩。

相關問題