WTL - DDX & ComboBox
От: Janis Baumanis Латвия  
Дата: 20.11.01 13:21
Оценка:
Есть WTL программа и в ней находится диалог. В этом диалоге имеется 7 контролей типа ComboBox. Захотелось этих ComboBox'ов подсоединить к переменным класса диалога, чтобы потом каждый раз при обращении к этим элементам не надо было их подсоединить отдельно с API'шным GetDlgItem(). В MFC это делается так (на примере одного ComboBox):

// MainDlg.h
class CXDlg : public CDialog
{
public:
.....
    CComboBox    m_cboName;
.....
}

// MainDlg.cpp
.....
void CMainDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CMainDlg)
    DDX_Control(pDX, IDC_COMBO_NAME, m_cboName);
.....
    //}}AFX_DATA_MAP
}
.....


В WTL варианте я пробовал делать то же самое, ибо в WTL тоже присутствует CComboBox и DDX_CONTROL.

.....
    CComboBox    m_cboName;
.....
    BEGIN_DDX_MAP(CMainDlg)
        DDX_CONTROL(IDC_COMBO_NAME, m_cboName)
.....
    END_DDX_MAP()
.....


Но при компиляции вся хорошая затея полетела с сообщением:

c:\program files\microsoft visual studio\vc98\wtl\include\atlddx.h(477) : error C2039: 'SubclassWindow' : is not a member of 'CComboBoxT<class ATL::CWindow>'
        d:\work\utils\operaadr\maindlg.h(65) : see reference to function template instantiation 'void __thiscall WTL::CWinDataExchange<class CMainDlg>::DDX_Control(unsigned int,class WTL::CComboBoxT<class ATL::CWindow> &,int)' being compiled


Покопаясь в ATL и WTL исходниках, нашёл, что WTL-ишный CComboBox наследуется от CWindow, у кого метод "SubclassWindow" точно не присутствует. Но тот есть у темплейта CWindowImpl, которому в основе стоит этот самый CWindow. Наверно придётся делать свой ComboBox-ный класс на основе CWindowImpl. Только непонятно, как это всё обединить вместе. Есть идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.