Как я могу реализовать поведение "нажмите и удерживайте" в 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
я думаю это то что ты ищешь?