如何在MFC CListCtrl中實現「輕敲並按住」行爲?如何在MFC CListCtrl中實現「輕敲並按住」行爲?
我有一個MFC CListCtrl在CDialog中,我需要添加到CListCtrl「點擊並按住」的行爲。
這就是我的意思是「點擊並按住」:
如果用戶點擊(「標準」用鼠標點擊左鍵)上一個CListCtrl項目,然後功能A將被調用。
如果用戶點擊一個CListCtrl項並按住鼠標左鍵超過一秒鐘,那麼函數B將被調用。
如何在MFC CListCtrl中實現「輕敲並按住」行爲?如何在MFC CListCtrl中實現「輕敲並按住」行爲?
我有一個MFC CListCtrl在CDialog中,我需要添加到CListCtrl「點擊並按住」的行爲。
這就是我的意思是「點擊並按住」:
如果用戶點擊(「標準」用鼠標點擊左鍵)上一個CListCtrl項目,然後功能A將被調用。
如果用戶點擊一個CListCtrl項並按住鼠標左鍵超過一秒鐘,那麼函數B將被調用。
繼承CListCtrl並實現OnLButtonDown和OnLButtonUp。在執行「選項卡並保持」之前,在OnLButtonDown中設置一個計時器,其長度等於您要等待的時間。
在您的計時器處理程序中,執行「點按並按住」操作。
如果你得到OnLButtonUp計時器到期之前,取消計時器和執行「點擊」操作(如果OnLButtonUp的連接點的參數是一個列表項。)
除了ajryans建議,您也可以需要繼承CListBox派生類,以便它從您的對話框中拾取鼠標消息。就像是;
BOOL CMyDialog::OnInitDialog()
{
MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
CDialog::OnInitDialog();
}
這裏是另一種沒有計時器的方法http://www.codeproject.com/KB/mobile/tapandhold.aspx。
您可能需要捕獲鼠標,或嘗試檢測鼠標何時離開窗口(或項目) - 以防用戶鼠標移動,移動和鼠標移動。 – Aardvark 2008-10-21 13:12:58