Поиск:

Ответ в темуСоздание новой темы Создание опроса
> template for MFC 
V
    Опции темы
eniac
Дата 9.7.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Можна ли создать шаблон MFC класса? 
Как правильно написать карту сообщений?
PM MAIL   Вверх
eniac
Дата 9.7.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



короче. Проблема решена 
http://www.codeproject.com/KB/cpp/templates.aspx
PM MAIL   Вверх
Earnest
Дата 10.7.2009, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Забавный метод, но уже очень геморройный. Переписывать MFC-макросы... брр...
Я обычно делаю так (это не уверсально, но в конкретных частных случаях работает хорошо).
1) Пишем базовый класс (не CWnd), но со всей нужной функциональностью (большой) и, разумеется, не как шаблон: всю реализацию засовываем в cpp, Доступ к окну можно получить по-разному: через dynamic_cast<CWnd*>, с помощью виртуальной функции, с помощью переданнй в конструктор переменной... в зависимости от ощущения мировой гармонии на момент написания кода...
2) Пишем шаблон, уже оконного класса, аргумент шаблона - конкретный оконный базовый класс, и наследуемся от нашего выше-описанного класса:
template <class BASE> class MyCoolWnd: public BASE, public CMyCoolFunc
{
...

}
В шаблоне нельзя писать MESSAGE_MAP, но можно написать свою версию WindowProc и других виртуальных функций (обычно еще требуется OnCmdMsg), передав в них управление не-оконному базовыму классу.
Ну и еще что-нибуь в зависимости от задачи. Мне кажется, этот подход проще и нагляднее.

Еще, из той же серии (хотя немного сбоку). Часто возникают проблемы с вложенным оконным классом, если у него есть макросы (DYNCREATE или MESSAGE_MAP), причем не на определении, а на реализации: компилятор матерится по тем же причинам (непредусмотренные двоеточия и прочая). Обходится элементарно: перед реализацией достаточно написать: using CMyOuterClass::CMyInnerClass.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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