Добавление вкладок в CTabCtrl в MFC

Я пытаюсь добавить CTabCtrl в мое приложение MFC. Я пытаюсь следовать MSDN напрямую.

Вкладка добавления 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(), чтобы сказать, что это не удалось.

Другие вопросы по тегам