我正在尝试将CTabCtrl添加到我的MFC应用程序中。我试图直接关注MSDN。
* MSDN: Adding Tabs to Tab Control
以下是我的尝试:
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中使用选项卡?
答案 0 :(得分:1)
根据您提供的信息,很明显它是在IsWindow(m_hWnd)上进行ASSERTing。这意味着当您调用InsertItem()时,尚未创建选项卡控件的窗口。
您是将CTabCtrl放在CDialog派生类还是其他CWnd派生类中?您是否在DDX_Control()代码行上设置断点以确保1)它实际被调用,以及2)它是否成功?我觉得它甚至没有被调用,因为如果是,那么你将拥有一个有效的m_hWnd,或者你会在你的DDX_Control()调用点得到一个ASSERT()来说它失败了。