なるほどそうでした、失礼しましたm(__)m
CListCtrlが実態が生成していない事を確認するには、
どうすればよいでしょうか?
このような感じで実態が無い場合は処理を回避したいです。
ちなみに、if(ListCtrl != NULL ){はコンバイルエラーになりました。
CListCtrl& ListCtrl = pXXXXXView->GetMyListCtrl();
if(ListCtrl != NULL ){ <<================================== エラー
// ここでリストの数を設定しているが、SetItemCountExで落ちる。
ListCtrl.SetItemCountEx( m_List.size(),
LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL );
ListCtrl.Invalidate();
}
> ちなみに、if(ListCtrl != NULL ){はコンバイルエラーになりました。
ListCtrl は参照であってポインタではありませんので、NULL との比較はできません。
そもそも、参照は(余程ひねくれたことをしない限り)NULL になりません。
> CListView::GetListCtrl() は単に *(CListCtrl*)this を返すだけ
ですので、GetMyListCtrl が GetListCtrl と同じことをしているのだとすれば、
その戻り値が NULL になるケースでは this == NULL ということであり、
こういう事態は、絶対とはいえませんが、そうそうあるものではありません。
ただ、ListCtrl が何を指しているかは、GetMyListCtrl の実装によりますので、
それを示していただかないことには、進展は無いような気がします。
ところで
> ASSERT_KINDOF(CListCtrl, &ListCtrl);で落ちてました。
これはどこに書きました?
void CLeftView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
// Treeを構築
SetTree();
CListCtrl& ListCtrl = pXXXXXView->GetMyListCtrl();
ASSERT_KINDOF(CListView, pExplorerView);
ASSERT_KINDOF(CListCtrl, &ListCtrl);<< --- エラー
ASSERT(ListCtrl.GetStyle() & LVS_OWNERDATA);<< --- エラー
// エラー
ListCtrl.SetItemCountEx( m_List.size(), LVSICF_NOINVALIDATEALL |
LVSICF_NOSCROLL );
ListCtrl.Invalidate();
}
DisplayMode が確実に 0,1,2のいずれかになっていることが
確認されてないようですが、大丈夫でしょうか?
また、pXXXXXViewという変数に値をセットする部分は
どうなっていますか?
みなさんありがとうございました。
無事解決いたしました。
dairygoodsさんの助言の通り、DisplayModeに変な値が入っていて
0,1,2以外の数字になっていました。
私のミスです。
今回のカキコミでASSERT_KINDOFの使い方や、バグの解決の仕方など
色々勉強になりました。
またわからない事があれば、その時は御願いいたします。
>DisplayMode が確実に 0,1,2のいずれかになっていることが
>確認されてないようですが、大丈夫でしょうか?
解決