在MFC中向CTabCtrl添加选项卡

时间:2015-03-11 17:59:25

标签: c++ tabs mfc ctabctrl

我正在尝试将CTabCtrl添加到我的MFC应用程序中。我试图直接关注MSDN。

MSDN Adding Tab

* 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);

我收到以下错误消息: Assertion Fail

如果我点击忽略,我的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 个答案:

答案 0 :(得分:1)

根据您提供的信息,很明显它是在IsWindow(m_hWnd)上进行ASSERTing。这意味着当您调用InsertItem()时,尚未创建选项卡控件的窗口。

您是将CTabCtrl放在CDialog派生类还是其他CWnd派生类中?您是否在DDX_Control()代码行上设置断点以确保1)它实际被调用,以及2)它是否成功?我觉得它甚至没有被调用,因为如果是,那么你将拥有一个有效的m_hWnd,或者你会在你的DDX_Control()调用点得到一个ASSERT()来说它失败了。