Есть 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. Только непонятно, как это всё обединить вместе. Есть идеи?