Как я могу реализовать поведение «нажмите и удерживайте» в MFC CListCtrl? - PullRequest
1 голос
/ 20 октября 2008

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

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

Вот что я имею в виду под «нажми и держи»:

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

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

Ответы [ 4 ]

2 голосов
/ 20 октября 2008

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

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

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

1 голос
/ 21 октября 2008

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

BOOL CMyDialog::OnInitDialog() 
{
  MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
  CDialog::OnInitDialog();
}
0 голосов
/ 05 октября 2009

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

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

Я думаю, это то, что вы ищете?

0 голосов
/ 09 января 2009

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

...