Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > как узнать на каком элементе ListView было вызвано


Автор: Dmitriy2k 17.1.2008, 16:08
Подскажите пожалуйста. У меня готовый ListView(стиль REPORT). 
Я вызываю над ним контекстное меню

Код

switch (message){
      case WM_CONTEXTMENU:
      if(DoContextMenu(hDlg, wParam, lParam))  //hDlg - главное диалоговое окно,
                                                                          //wParam - hwndListView
                                                                          //lParam - координаты мыши.
         return FALSE;
      break; 


DoContextMenu - моя функция, создает контекстное меню

Хотелось бы узнать, как можно определить - на каком элементе появилось контекстное меню?
Не хотелось бы услышать такой ответ- "просчитай высоту строки, умножь и тд итп..

файл- пример прилагается.

Автор: BorisVorontsov 17.1.2008, 16:24
Лови NM_RCLICK.

Автор: Doc_d0s 17.1.2008, 19:56
И что дальше???

Автор: Earnest 17.1.2008, 20:36
Не нужно никого ловить, тем более мы уже поймали WM_CONTEXTMENU. Нужно узнать коорднаты мыши (GetCursorPos), преобразовать их в координаты окна (ScreenToClient) и послать сообщение LVM_SUBITEMHITTEST (или воспользоваться макросом ListView_SubItemHitTest). 
В результате получишь и номер строки, и другую информацию (вдруг пригодится).

Добавлено через 1 минуту и 26 секунд
Ах да, в WM_CONTEXTMENU уже есть координаты мыши, экранные.

Автор: BorisVorontsov 18.1.2008, 10:04
Цитата(Doc_d0s @  17.1.2008,  19:56 Найти цитируемый пост)
И что дальше??? 


Дальше читать MSDN...

Цитата(MSDN)
NM_RCLICK (list view) Notification

--------------------------------------------------------------------------------

Sent by a list-view control when the user clicks an item with the right mouse button. This notification message is sent in the form of a WM_NOTIFY message.

Syntax

NM_RCLICK

    lpnmitem = (LPNMITEMACTIVATE) lParam;
Parameters

lpnmitem
Version 4.71. Pointer to an NMITEMACTIVATE structure that contains additional information about this notification message. The iItem, iSubItem, and ptAction members of this structure contain information about the item.
Return Value

Return nonzero to not allow the default processing, or zero to allow the default processing.

Remarks

The iItem member of lpnmitem is only valid if the icon or first-column label has been clicked. To determine which item is selected when a click takes place elsewhere in a row, send an LVM_SUBITEMHITTEST message.
 

Автор: Dmitriy2k 18.1.2008, 14:56
Earnest: Спасибо большое за подсказку.
Координаты окна получил. Номер элемента ListView узнал, что собственно мне и было нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)