0

MFC アプリケーションに CTabCtrl を追加しようとしています。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 でタブを使用するより良い方法はありますか?

4

1 に答える 1

2

提供された情報から、IsWindow(m_hWnd) でアサートしていることは明らかです。つまり、InsertItem() を呼び出した時点では、タブ コントロールのウィンドウはまだ作成されていません。

CTabCtrl を CDialog 派生クラスまたは他の CWnd 派生クラスに配置していますか? コードの DDX_Control() 行にブレークポイントを設定して、1) 実際に呼び出されていること、および 2) 成功したことを確認しましたか? もしそうなら、あなたは有効な m_hWnd を持っているか、または DDX_Control() 呼び出しの時点で ASSERT() を取得して、失敗したと言うからです。

于 2015-03-11T21:16:49.813 に答える