2015-11-22 51 views

回答

1

根據這個MSDN文檔:

How to Enable Tablet Press-and-Hold Gesture in MFC Application

要啓用右鍵單擊的概念,通常是指「顯示上下文菜單」,並附帶在WM_RBUTTONDOWN,WM_RBUTTONUP的形式,和WM_CONTEXTMENU消息和ISG_HOLDENTER和ISG_RIGHTTAP事件,必須爲該窗口啓用「按住」手勢。爲了檢測這種手勢,必要時引入一些延遲來區分簡單的「按壓」(被視爲左鍵單擊)和「按住」(右鍵單擊)。因此,左鍵單擊事件將需要更長的時間,而應用程序看起來反應較慢。所以,出於這個原因,默認行爲是禁用「按住」手勢。

如果沒有這種手勢,長按不會產生WM_CONTEXTMENU消息,VCL用它來顯示彈出式菜單。

如果你的應用程序要啓用按下並保持姿勢,你必須[處理WM_TABLET_QUERYSYSTEMGESTURESTATUS消息]在[窗口]和返回的東西,不包括TABLET_DISABLE_PRESSANDHOLD標誌。

嘗試繼承ListBox的WindowProc財產趕上那消息:

private 
    PrevListBoxWndProc: TWndMethod; 
    procedure ListBoxWndProc(var Message: TMessage); 

... 

procedure TMyForm.FormCreate(Sender: TObject); 
begin 
    PrevListBoxWndProc := ListBox1.WindowProc; 
    ListBox1.WindowProc := ListBoxWndProc; 
end; 

procedure TMyForm.ListBoxWndProc(var Message: TMessage); 
const 
    WM_TABLET_QUERYSYSTEMGESTURESTATUS = 0x02CC; 
begin 
    if Message.Msg = WM_TABLET_QUERYSYSTEMGESTURESTATUS then 
    Message.Result := 0 
    else 
    PrevListBoxWndProc(Message); 
end; 
相關問題