Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2013, 01:27   #1
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию MFC, CListCtrl и Колбэки

Привет!

Мне нужно повесить обработчик на CListCtrl на срабатывание WM_LBUTTONDBLCLK, с этим справился путем создания класса CMyListCtrl с унаследованием от CListCtrl. И там в MESSAGE_MAP() уже обработал.
Если кто знает как обработать нажатие по CListCtrl из родительского фрейма, просьба поделиться кодом.

Другая загвоздка, нужно как-то передать callback на обработчик WM_LBUTTONDBLCLK, который открывает диалог для изменения данных, которые будут браться из выделенного пункта в CListCtrl. Как это можно сделать?
Просто не хочется каждый раз для разных фреймов делать отдельную копию CListCtrl со своими обработчиками.

Задача которая преследуется: В CListCtrl выводятся данные из БД, то есть этот лист - справочник в БД. По двойному щелчку открывается форма с данными с выбранной позиции. Так как справочники разношерстные и не хочется делать кучу копий CListCtrl, подумалось сделать один, но с колбэком под конкретный формат справочника.

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

Спасибо!
psycho-coder вне форума Ответить с цитированием
Старый 13.01.2013, 10:30   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

ДОбавьте в свой CListCtrl указатель на функцию, которую надо вызыать при том или ином событии ну и для разных типов меняйте эту функцию... Ну, т.е. сделайте свой callback.

Не совсем понятно нежелание наследовать класс - сделайте CBaseListCtrl чтоб реагировал на dblclick вызывом виртуального метода куда будет передавать скажем индекс текущей строки а потом в наследниках только меняйте имплементацию этого метода.
waleri вне форума Ответить с цитированием
Старый 13.01.2013, 16:43   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
ДОбавьте в свой CListCtrl указатель на функцию, которую надо вызыать при том или ином событии ну и для разных типов меняйте эту функцию... Ну, т.е. сделайте свой callback.
Делал, но было несоответствие типов потому что в разных классах методы и ссылки, но я думаю это из-за незнания чего-то у меня.

Цитата:
Сообщение от waleri Посмотреть сообщение
Не совсем понятно нежелание наследовать класс - сделайте CBaseListCtrl чтоб реагировал на dblclick вызывом виртуального метода куда будет передавать скажем индекс текущей строки а потом в наследниках только меняйте имплементацию этого метода.
Не хотелось плодить кучу одинаковых по функционалу классов. Но этот способ получился, так что думаю остановлюсь на нем. Только объявил абстрактный метода OnLButtonDblClk.
Спасибо!

P.S. Вопрос о том, как сделать подобие MMC консоли, только не такой универсальной, а в области одной программы, остается открытый.

upd
Нашел способ повесить обработчик непосредственно на CListCtrl

в MESSAGE_MAP
Код:
ON_NOTIFY(LVN_COLUMNCLICK, LIST_CTRL, OnColumnClick)
ON_NOTIFY(NM_DBLCLK, LIST_CTRL, OnButtonDblClick)
Прототипы
Код:
void OnColumnClick(NMHDR * nmhdrWnd, LRESULT * lResult);
void OnButtonDblClick(NMHDR * nmhdrWnd, LRESULT * lResult);
На счет классов надо будет еще хорошенько подумать, может быть с ними будет впоследствии удобней работать...

Последний раз редактировалось psycho-coder; 13.01.2013 в 17:41.
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag&Drop NO MFC! NO MFC! Антоним Win Api 1 12.11.2012 21:43
Различие кода mfc и WinApi(mfc ручками набили, а WinApi автоматически с генерировался!! нужно явное отличие, не могу найти) Артём1991 Помощь студентам 0 25.03.2012 17:13
MFC sir.andrey Обсуждение статей 0 21.08.2011 14:11
MFC BioS Win Api 2 19.04.2010 17:52
MFC Diman2008 Visual C++ 2 06.03.2008 16:24