開発環境 : WinXP SP2 VS2005 MFC使用 MDIアプリケーション
初めて書き込ませていただきます、ユウと申します。
今、CMDIChildWndクラスのOnCreateClient内でCSplitterWndクラスの
CreateViewを使用し、静的な分割ウィンドウ(3行×1列)を作成しています。
ビューにはグリッドを貼り付けたビューAとグリッド+ボタンを貼り付けたビューB(X2)
を表示しています。
ボタンは初期状態で▼表示になっていて、クリックするとクリックしたビューが縮小
し、表示が▲に変わり
再度クリックすると元の大きさに戻り、▼表示になります。
一度ボタンをクリックしてビューが縮小し、表示が▲に変わった時、分割バーをドラ
ッグしたら表示を
▼に戻したいので、ビューのOnSizeイベントにて以下のようなコードを記述しまし
た。
CDocument* pDoc = (CDocument*)GetDocument();
POSITION pos = pDoc->GetFirstViewPosition();
while(pos != NULL){
CView* pPnView = (CView*)pDoc->GetNextView(pos);
if ( pPnView->IsKindOf( RUNTIME_CLASS(twoPnView)) ){
twoPnView* pView = (twoPnView*)pPnView;
CString strBtnTxt;
pView->m_BtnUpDown.GetWindowText(strBtnTxt);
if(strBtnTxt == _T(▲)){
strBtnTxt = _T(▼);
pView->m_BtnUpDown.SetWindowText
(strBtnTxt);
return;
}
}
}
早速実行してみたところ、アサーションが発生したのでブレークポイントを調べまし
た。
どうやらGetWindowTextで落ちているようなのですが、原因がはっきりしません。
どなたか分かる方いましたらご教授をお願いいたします。
※私としてはOnSizeイベントではなくCSplitterWndクラスの継承クラスで呼ばれる
OnLButtonUpイベントで行いたいのですが、ドキュメントクラスのポインタを取得する
方法が分かりませんでした。できればこちらの方にも回答いただけるとありがたいで
す。
ボタンのウィンドウが作成される前にOnSizeが呼ばれているのでは。
if (!::IsWindow(pView->m_BtnUpDown))
return;
pView->m_BtnUpDown.GetWindowText(strBtnText);
kerryさん
おっしゃる通りボタンのウィンドウが作成される前にOnSizeが呼ばれて
いたみたいです。無事ボタンのテキストが変わりました。
ありがとうございます。
ひとまずこれで解決とさせていただきます。
ですが※で記述した方法で実現したいと考えておりますので、
なにか情報ありましたら引き続き当スレにて書き込みをお願いいたします。
>ドキュメントクラスのポインタを取得する
((CFrameWnd*)GetParent())->GetActiveDocument();
ただ、
GetPane()で直接Viewポインターを取った方が楽
aさん
貴重な情報ありがとうございます。
早速試してみます。