1

MFC CListCtrl で「タップ アンド ホールド」動作を実装するにはどうすればよいですか?

CDialog に MFC CListCtrl があり、CListCtrl に「タップ アンド ホールド」動作を追加する必要があります。

それが「タップアンドホールド」の意味です。

ユーザーが CListCtrl 項目をクリック (マウスの左ボタンで「標準」クリック) すると、関数 A が呼び出されます。

ユーザーが CListCtrl 項目をクリックし、マウスの左ボタンを 1 秒以上押し続けると、関数 B が呼び出されます。

4

4 に答える 4

2

CListCtrlを継承し、OnLButtonDownとOnLButtonUpを実装します。「タブアンドホールド」を実行する前に待機する長さのタイマーをOnLButtonDownに設定します。

タイマーハンドラーで、「タップアンドホールド」アクションを実行します。

タイマーの期限が切れる前にOnLButtonUpを取得した場合は、タイマーをキャンセルして「クリック」アクションを実行します(OnLButtonUpのCPointパラメーターがリスト項目の上にある場合)。

于 2008-10-20T15:26:06.113 に答える
1

ajryans の提案に加えて、ダイアログからマウス メッセージを取得するために、CListBox 派生クラスをサブクラス化する必要がある場合もあります。何かのようなもの;

BOOL CMyDialog::OnInitDialog() 
{
  MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
  CDialog::OnInitDialog();
}
于 2008-10-21T14:51:08.070 に答える
0

タイマーを使用しない別のアプローチを次に示しますhttp://www.codeproject.com/KB/mobile/tapandhold.aspx

于 2009-01-09T16:48:57.603 に答える
0

ピンボークでできる

http://www.ceveni.com/2009/10/sample-code-for-context-menu-in-c.html

私はこれがあなたが探しているものだと思いますか?

于 2009-10-05T14:10:28.433 に答える