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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Контекстным меню для ListBox'a, не могу выделить строку 
:(
    Опции темы
Doc_d0s
Дата 15.1.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кусок кода где обрабатывается сообщение:
Код

case WM_CONTEXTMENU:
            wmId    = LOWORD(wParam); 
            wmEvent = HIWORD(wParam); 
            GetCursorPos(&pt);
            TrackPopupMenu(    GetSubMenu(ContextMenu, 0), 
                    TPM_RIGHTALIGN|TPM_RIGHTBUTTON, 
                    pt.x, 
                    pt.y, 
                    NULL, 
                    hWnd, 
                    NULL);
            nItem = SendMessage(hwndList, LB_ITEMFROMPOINT, 0, lParam);

            i = SendMessage(hwndList, LB_GETITEMDATA,nItem,0);
            
            SendMessage(hwndList,LB_SETCURSEL,i,0);
                        
            break;


так вот nItem возвращает 0x0001003 а это значит что на лист бокс координаты не попадают, варианта два, либо у меня галллюцинации с нарушением координации либо я чего то не допонимаю
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dizzy1984
Дата 15.1.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

WM_CONTEXTMENU Notification
...
The low-order word specifies the horizontal position of the cursor, in screen coordinates, at the time of the mouse click. 
The high-order word specifies the vertical position of the cursor, in screen coordinates, at the time of the mouse click. 


Цитата

LB_ITEMFROMPOINT Message
lParam
The low-order word specifies the x-coordinate of a point, relative to the upper-left corner of the client area of the list box
The high-order word specifies the y-coordinate of a point, relative to the upper-left corner of the client area of the list box.

PM MAIL   Вверх
Doc_d0s
Дата 15.1.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(dizzy1984 @ 15.1.2008,  12:11)
Цитата

WM_CONTEXTMENU Notification
...
The low-order word specifies the horizontal position of the cursor, in screen coordinates, at the time of the mouse click. 
The high-order word specifies the vertical position of the cursor, in screen coordinates, at the time of the mouse click. 


Цитата

LB_ITEMFROMPOINT Message
lParam
The low-order word specifies the x-coordinate of a point, relative to the upper-left corner of the client area of the list box
The high-order word specifies the y-coordinate of a point, relative to the upper-left corner of the client area of the list box.

Я знаю английский, и целый вечер провел изучая МСДН, но все же если бы мне отписались кодом я бы понял гораздо лучше
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dizzy1984
Дата 16.1.2008, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сначала идея, потом код.
Я хотел сказать, что lparam от WM_CONTEXTMENU в координатах дисплея, а lparam для LB_ITEMFROMPOINT ждет его в координатах относительно левого врхнего угла листбокса. Соответственно где-то должен быть переход :
х_координита_в_границах_листбокса = х_координата_клика_на_экране - х_координата_левого_верхнего_угла_листбокса_на_экране
у_координита_в_границах_листбокса = у_координата_клика_на_экране - у_координата_левого_верхнего_угла_листбокса_на_экране
PM MAIL   Вверх
Doc_d0s
Дата 17.1.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



это я понял, только вот проблема в том что GetClientRect(GetDlgItem(hWnd,IDC_LRESULT), &rect)
возвращает rect у которого верхний левый угол стоит в (0,0)
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dizzy1984
Дата 18.1.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй GetWindowRect вместо этого.
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.

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


 




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


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

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