タブコントロール(InsertItem呼び出し時のエラー)不具合

解決


ひろ  2006-01-18 14:12:57  No: 60354  IP: 192.*.*.*

初めて書き込みさせていただきます。
よろしくお願いいたします。
VC初心者です。質問の意味がわからなければ、
ご指摘の程よろしくお願いいたします。

動作環境:WindowsXP上でVC++6.0

①ダイアログベースで、ワークスペースの作成を行い、
  その後、新しくダイアログ((仮)IDD_IMAGE_DIALOG)を挿入します。

②そうすると、あたらしく(仮)ImageViewクラスが作成されているので
  そのクラス内の、コンストラクタで、

//------------------------------------------------------------
// タブ  初期化処理
//------------------------------------------------------------
  
  TC_ITEM tc0;
  tc0.mask    = TCIF_TEXT ;
  tc0.pszText ="test";
  tc0.lParam=0;
  m_tab.InsertItem(0,&tc0);

と記述。


③その後、実行してみると必ず
m_tab.InsertItem(0,&tc0);でエラーになってしまう。

エラー内容です。
File: afxcmn.inl
Line: 536

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)


すいません。
本と同じように、実装していると思うのですが、
関数でエラーがでてしまうと
根本的に考え方がまちがっているのか
わかりません。

なにかご助言等ございましたら
よろしくおねがいします。

編集 削除
επιστημη  2006-01-18 14:34:45  No: 60355  IP: 192.*.*.*

で、肝心の afxcmn.inlの536行目 にはどんなコードが書かれてましたか?

編集 削除
ひろ  2006-01-18 14:43:04  No: 60356  IP: 192.*.*.*

afxcmn.inlの536行目のコードです。

_AFXCMN_INLINE BOOL CTabCtrl::InsertItem(int nItem, TCITEM* pTabCtrlItem)
        { ASSERT(::IsWindow(m_hWnd)); return (BOOL)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)pTabCtrlItem); }


これから何を読み取ればいいは、わかりません。

編集 削除
επιστημη  2006-01-18 15:06:46  No: 60357  IP: 192.*.*.*

ASSERT(::IsWindow(m_hWnd))
これにひっかかるってことは、まだWindow(TAB-controll)が生成
されていないのにInserItemしてるってことですね。

コンストラクタの中でやっても早すぎ。
OnInitDialogの末尾あたりでやってみて。

編集 削除
ひろ  2006-01-18 15:52:55  No: 60358  IP: 192.*.*.*

επιστημη 様

OnInitDialogに処理を入れたところ
正常に動作しました。
ありがとうございました。

編集 削除