SkinedButton & WTL
От: VictorProg  
Дата: 12.04.06 06:54
Оценка:
Всем доброго времени суток.

Перед тем, как задать этот вопрос, что будет далее, я пересмотрел форум на предмет подобной проблемы и почитал статью "Использование WTL" и много чего ещё на совтовых форумах.

Итак. Есть такой чудо класс под MFC написанный какимто умельцем из какойта странны. Клас зовётся CxSkinButton базируется он на CButton.
Работает просто отлично, но под MFC. Его назначение — создавать скиновую кнопку. Прикольная штука. Можно найти здесь .

Так вот. Я ничего не имею против MFC, но привык юзать WTL. Более приятная штука и не тянет за собой лишнего.
Я решил переделать этот класс под WTL. Сделал. Решил протестить на какомнить диалоге и столкнулся с проблемой.

Проблема в следующем. Мне нужно привязать контрол, кнопку, которая лежит на диалоге, в ресурсам, к мемберу класса, описывающего диалог.
Я делал так:


public:
    CSkinedButton m_FileButton;
public:
    BEGIN_DDX_MAP(CMainDlg)
        DDX_CONTROL(IDC_BUTTON1, m_FileButton)
    END_DDX_MAP()


Ничего не получается, кнопка не реагирует ниначто, не рисует картинку на себе, не обрабатываются евенты, которые описываются в CSkinedButton.

Пробовал делать так:


          BEGIN_DDX_MAP(CMainDlg)
        DDX_CONTROL_HANDLE(IDC_BUTTON1, m_FileButton)
      END_DDX_MAP()


Не получается. Компилятор ругается на базовый класс.

И так тоже пробовал:


BOOL DoDataExchange(BOOL /*bSaveAndValidate*/, UINT /*nCtlID*/);



Не лечит.

И даже так (на всякий случай):

m_FileButton.Attach(GetDlgItem(IDC_BUTTON1));



Я не забывал при юзании мапы DDX в список базовых классов для диалога делать следующее:

class CMainDlg : public CAxDialogImpl<CMainDlg>,
    public CWinDataExchange<CMainDlg>


И привязку к ресурсу для этого диалога тоже:

public:
    enum { IDD = IDD_MAINDLG };


Вроде всё нормально. Но не работает.

Вот объявление класса кнопки.

class CSkinedButton :
    public CWindowImpl<CSkinedButton, CButton>


Подскажите пожалуйста, что я не так делаю и как это лечить?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.