Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шаблоны и MFC, кому интерсно... 
:(
    Опции темы
deniska
Дата 2.10.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



был создан набор классов для реализации пользовательского интерфейса (сделал свои кнопки, эдиты и прочее) чтото около 10 штук...
потом понадобилось ишо и дизайнер сделать для динамического изменения интерфейса. соответственно понадобилось чтоб у всех этих классов было в итоге одинаковое поведение на клики, перетаскивания мышью и т.д. начал делать, на втором классе все это надоело(по сути один и тот же код обработки событий мыши нужно было вставить в наследников). стал копаться в инете инфы не так уж много оказалось. первое что попалось - реализация обобщенного класса через definы типа этого:
Код

ifdef (MYEDIT)
define BASECLASS CEdit
else
define BASECLASS CWnd

class CMouseEvent : public BASECLASS
{
....
};

попробовал, как то не понравилось (да и не очень то получилось smile )
стал пробовать через шаблоны... убил на это часов 5  smile . вот что вышло (код для VC2005. если нужен для 6-ки макрос карты сообщений нуна самому делать)
собственно шаблон. в нем реализуется функционал, общий для разных классов(для примера сократил код):
Код

#pragma once
enum ResizeMode { right, left, top, bottom };
template<class BASE_TYPE = CWnd>
class CMouseCtrl : public BASE_TYPE
{
public:
    CMouseCtrl();
    virtual ~CMouseCtrl(){}

protected:
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);


    DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

typedef CMouseCtrl<CEdit>      CTemplEdit;

template<class BASE_TYPE>
CMouseCtrl<BASE_TYPE>::CMouseCtrl()
{
}

BEGIN_TEMPLATE_MESSAGE_MAP(CMouseCtrl, BASE_TYPE, BASE_TYPE)
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()



template<class BASE_TYPE>
void CMouseCtrl<BASE_TYPE>::OnLButtonDown(UINT nFlags, CPoint point)
{
      //реализация общего поведения
     BASE_TYPE::OnLButtonDown( nFlags, point);//если нуно вызываем 
}


дальше в наследнике все просто: наследуем его от описанного выше CTemplEdit...

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


 




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


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

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