Добавление вкладок в CTabCtrl в MFC
Я пытаюсь добавить CTabCtrl в мое приложение MFC. Я пытаюсь следовать MSDN напрямую.
* MSDN: Добавление вкладок в элемент управления вкладками
Вот что я попробовал:
DDX_Control(pDX, TAB1, m_TabCtrl);
TC_ITEM ti;
ti.mask = TCIF_TEXT;
ti.pszText = _T("First Tab");
m_TabCtrl.InsertItem(0,&ti);
Я получаю следующее сообщение об ошибке:
Если я нажимаю игнорировать, мой CTabCtrl отображается, но без каких-либо вкладок (просто серый квадрат). Если я нажму на попытку, я получу точку останова по адресу:
_AFXCMN_INLINE BOOL CTabCtrl::SetItem(int nItem, TCITEM* pTabCtrlItem)
{ ASSERT(::IsWindow(m_hWnd)); return (BOOL)::SendMessage(m_hWnd, TCM_SETITEM, nItem, (LPARAM)pTabCtrlItem); }
Я попытался добавить заголовок #include "afxcmn.h"
но это ничего не меняет.
Я просто пытаюсь получить именованные вкладки для отображения в моем приложении в качестве первого шага. В конце концов я хочу, чтобы вкладки отображали немодальные диалоги. Может кто-нибудь сказать мне, что я делаю не так? Есть ли лучший способ использовать вкладки в MFC?
1 ответ
Из предоставленной вами информации становится ясно, что она ASSERTing для IsWindow(m_hWnd). Таким образом, это означает, что окно для вашего элемента управления вкладками еще не было создано, когда вы вызываете InsertItem().
Вы помещаете CTabCtrl в производный класс CDialog или в другой производный класс CWnd? Вы установили точку останова в строке кода DDX_Control(), чтобы быть уверенными, что 1) она действительно вызывается и 2) что она успешна? У меня такое ощущение, что он даже не вызывается, потому что если бы он был, то у вас был бы действительный m_hWnd, или вы бы получили ASSERT() в момент вызова DDX_Control(), чтобы сказать, что это не удалось.