Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать на каком элементе ListView было вызвано, контекстное меню (LISTVIEW стиль REPORT) 
:(
    Опции темы
Dmitriy2k
Дата 17.1.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Подскажите пожалуйста. У меня готовый ListView(стиль REPORT). 
Я вызываю над ним контекстное меню

Код

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


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

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

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

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  listview.zip 40,76 Kb
PM MAIL   Вверх
BorisVorontsov
Дата 17.1.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Лови NM_RCLICK.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Doc_d0s
Дата 17.1.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



И что дальше???
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Earnest
Дата 17.1.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



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

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


--------------------
...
PM   Вверх
BorisVorontsov
Дата 18.1.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Цитата(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.
 


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Dmitriy2k
Дата 18.1.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Earnest: Спасибо большое за подсказку.
Координаты окна получил. Номер элемента ListView узнал, что собственно мне и было нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.