![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
AlikV |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.10.2005 Репутация: нет Всего: нет |
У меня на главном окне есть ListView
В нем соответственно записи Каким оразом чере двойной счелчек на оной из записи запустить PropertySheet Как отловить позицию мыши и какие флаги надо ставить (еси надо)На WinAPI |
|||
|
||||
2133 |
|
|||
Unregistered |
||||
|
||||
Aleksandor |
|
||||
![]() Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Придется субклассировать ListView
![]() В процедуре субклассирования обрабатываем сообщение WM_LBUTTONDBLCLICK С передачей параметров в PropertySheet
Без передачи параметров
Это сообщение отредактировал(а) Aleksandor - 5.12.2005, 13:20 -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
||||
|
|||||
AlikV |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.10.2005 Репутация: нет Всего: нет |
Какого типа олжно быть member,
и что-то ругаеться на
Да и самое главное это в процедуре обработке всех сообщений надо описать или отделно создавать(если да то где вызывать)? |
||||
|
|||||
Aleksandor |
|
|||
![]() Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
static int member;
на param будет ругаться, это моя структура, у Вас не определена ![]() надо определить ее как свою структуру, например typedef struct _myparams { char szSearch[250]; //BOOL bSMode; //BOOL bAbook; //DWORD index; // может еще чего что нужно } MYSTRUCTURE; ListView надо субклассировать, т.е написать свою процедуру обработки для нужных сообщений, остальные передавать в default процедуру внутри Windows для субклассирования помимо процедуры нужно сначала объявить саму процедуру и переменную WNDPROC хранящую адрес "настоящей" процедуры в недрах windows WNDPROC wpListProc; LRESULT APIENTRY ListSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); потом когда у нас есть дескриптор окна ListView указываем адрес нашей процедуры- wpListProc=(WNDPROC)SetWindowLong(hwndListView,GWL_WNDPROC,(LONG)ListSubclassProc); собственно все... теперь вызывается сначала наша процедура, а потом та которая в Windows ( в конце нашей пишем - return CallWindowProc(wpListProc, hwnd, uMsg, wParam, lParam); ) для обработки остальных сообщений ![]() -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
"Придется" - слишком сильно сказано. Т.е. так тоже можно, но проще ловить уведомление WM_NOTIFY::MN_DBLCLK, которое приходит паренту, и в обработчике делать то, что Aleksandor предложил. В параметрах уведомления будет и точка клика, и итем. Ловить уведомление лучше еще и потому, что существует некая стандартная обработка кликов, дабл-кликов и прочая, в зависимости от стилей контрола. И это надо учитывать, перехватывая эти сообщения. Тогда как ловля уведомлений ничем не грозит в смысле нарушения стандартного поведения. -------------------- ... |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 4 Всего: 62 |
Кусок вполне рабочего кода из моей программы:
Это сообщение отредактировал(а) rsm - 5.12.2005, 20:02 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Про подклассы писать не буду, слишком много, скажу лишь, что проще всего подставить процедуру окна можно на примере всем известной Delphi, а если про двойной щелчок, то NOTIFY переопределять необязательно, достаточно переопределить WM_LBUTTONDBLCLK
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Фишка-то как раз в том, что для перехвата WM_LBUTTONDBLCLK требуется сабклассить контрол, а для обработки WM_NOTIFY достаточно добавить case (или отдельный обработчик - уж как кто пишет) - в оконную процедура парента, которая по-любому должна быть своя. Понимаешь разницу? Для обработки двойного клика не нужно добавлять новых сущностей - нового класса ListView. -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
...да, верно, согласен, я просто обычно переадресовываю уведомления самому себе, для удобства, и все мои контролы уже изначально вкючают сукклассинг. Считаю этот метод самым гибким.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |