событие перемещения мыши при просмотре списка диалогового окна в MFC - PullRequest
0 голосов
/ 13 июля 2011

Я создал диалоговое окно.На котором я создал два списка.Я создал подкласс для просмотра списка.Я хотел знать, где находится мышь, я имею в виду, на каком виде списка.После этого я найду индекс представления списка с помощью CListCtrl :: HitTest ().

Теперь я получаю индекс с использованием HitTest, но перемещение мыши является общим для обоих видов списка.Итак, как я могу отличить представление списка в событии перемещения мыши.

Наконец, я собираюсь создать всплывающую подсказку в соответствии с представлением списка и индексом этого представления списка.

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Если все, что вам действительно нужно, это отображать всплывающую подсказку всякий раз, когда мышь наводит курсор на какой-то элемент управления, который вам нужен, вам не нужно так сильно пачкать руки тестами нажатия, координатами мыши и т. Д. Просто используйте встроенные окнамеханизм для этого.

Предполагая, что ваш диалоговый класс является родителем двух представлений списка:

  • Из OnCreate() вызова диалогового окна EnableToolTips().

  • Добавьте обработчик к карте сообщений, например: ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnTtnNeedText).

  • Реализация OnTtnNeedText() в диалоговом классе.Пример:

    BOOL CMyDialog::OnTtnNeedText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
    {    
        TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;  
        pTTT->hinst = AfxGetResourceHandle();  
        switch ( pNMHDR->idFrom )  
        {
            case IDC_LV_LEFT:
                pTTT->lpszText = "I'm lefty!";
                break;
            case IDC_LV_RIGHT:
                pTTT->lpszText = "I'm righty!";
                break;
        }
        return TRUE;
    }
    

И это более или менее.Обратитесь к этому для получения дополнительной информации: статья

0 голосов
/ 13 июля 2011

CListCtrl наследует форму CWnd. Вы можете получить координаты указателей мыши, реализующие CWnd :: OnMouseMove . В основном у вас есть два варианта:

  • либо создайте подкласс CListCtrl и реализуйте OnMouseMove, как вы хотите в производном классе
  • либо реализуйте OnMouseMove в родительском окне (диалоговом окне) и проверяйте координаты мыши по координатам двух элементов управления списком.

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

НТН, JP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...