Как я могу реализовать поведение "нажмите и удерживайте" в MFC CListCtrl?

Как я могу реализовать поведение "нажмите и удерживайте" в MFC CListCtrl?

У меня есть MFC CListCtrl в CDialog, и мне нужно добавить в CListCtrl поведение "нажмите и удерживайте".

Вот что я имею в виду для "нажмите и удерживайте":

Если пользователь щелкает ("стандартный" щелчок левой кнопкой мыши) на элементе CListCtrl, то вызывается функция A.

Если пользователь щелкает элемент CListCtrl и удерживает нажатой левую кнопку мыши в течение более одной секунды, то вызывается функция B.

4 ответа

Унаследовать CListCtrl и реализовать OnLButtonDown и OnLButtonUp. Установите таймер в OnLButtonDown для длины, которую вы хотите подождать, прежде чем делать "вкладку и удерживать".

В обработчике таймера выполните действие "коснитесь и удерживайте".

Если вы получаете OnLButtonUp до истечения времени таймера, отмените таймер и выполните действие "щелкнуть" (если параметр CPoint в OnLButtonUp находится над элементом списка).

В дополнение к предложению ajryans вам также может понадобиться создать подкласс вашего производного класса CListBox, чтобы он мог получать сообщения мыши из вашего диалога. Что-то вроде;

BOOL CMyDialog::OnInitDialog() 
{
  MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
  CDialog::OnInitDialog();
}

Вот еще один подход без таймеров http://www.codeproject.com/KB/mobile/tapandhold.aspx.

Это можно сделать с помощью пинвокинга

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

я думаю это то что ты ищешь?

Другие вопросы по тегам