在 MFC 中为 CTabCtrl 添加选项卡

Adding tabs to CTabCtrl in MFC

我正在尝试将 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); }

我尝试添加 header #include "afxcmn.h" 但它没有改变任何东西。

作为第一步,我只是试图让命名的选项卡显示在我的应用程序上。最终我希望选项卡显示无模式对话框。有人可以告诉我我做错了什么吗?有没有更好的方式在MFC中使用制表符?

根据您提供的信息,很明显它正在对 IsWindow(m_hWnd) 进行断言。因此,这意味着当您调用 InsertItem() 时,您的选项卡控件的 window 尚未创建。

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