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

解決


ひろ  2006-01-18 23:12:57  No: 60354

初めて書き込みさせていただきます。
よろしくお願いいたします。
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 23:34:45  No: 60355

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


ひろ  2006-01-18 23:43:04  No: 60356

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-19 00:06:46  No: 60357

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

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


ひろ  2006-01-19 00:52:55  No: 60358

επιστημη 様

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加