2010-05-04 134 views

回答

1

我不知道你怎麼能做到這一點,但TAdvStickyPopupMenu組件(TMS軟件)可以做到這一點。

+0

彈出窗口從托盤圖標出來。我不知道如何在托盤組件上使用TAdvStickyPopupMenu – user332443 2010-05-04 18:36:45

+0

這就是它的工作原理:首先,您必須爲TMS軟件付出一筆不小的財富。你可能不想這樣做。故事結局。 – stevenvh 2017-07-25 12:45:03

2

簡單的一個,禁用該項目。 < g>


開玩笑,不是一件容易的事。

如果您想讓彈出式菜單像最頂級的表單那樣工作(也就是說您既可以與表單上的項目進行交互,也可以與表單上的控件進行交互,而無需停用菜單),那麼就不要使用標準來完成這項工作菜單。

但是,如果您的要求與您的問題中所述完全相同(單擊一個項目,菜單未關閉 - 單擊外部並關閉),但有一些工作,這將是可能的。


您的目標是subclass您的子菜單將駐留的窗口覆蓋一些消息處理。首先,從'TPopupList'派生一個新類並重寫它的'WndProc'。這是一個example這樣做。

如果您打算通過選擇根項目來阻止菜單關閉,那麼在PopupList的WndProc中,您將處理WM_ENTERIDLE並從消息的lParam中獲取彈出菜單的窗口句柄,並從彈出菜單的窗口中獲取子類。

如果您只打算通過選擇子菜單項來阻止菜單關閉,那麼在PopupList的WndProc中,您會看到WM_INITMENUPOPUP消息,其中wParam不是PopupMenu本身的句柄,這意味着子菜單即將顯示。只有這樣你才能處理WM_ENTERIDLE,並獲得子菜單所在的窗口句柄並將該窗口繼承下來。

在子類化彈出式菜單或彈出子菜單所在的窗口後,您將攔截未記錄的'MN_BUTTONDOWN'($ 01ED)消息並阻止進一步處理(不調用原始窗口過程)。可能你也想防止用鍵盤關閉菜單;你會注意WM_KEYDOWN(Enter)和WM_CHAR(加速器)消息。

那麼,我會猜測一些工作。

相關問題