分割ビューのポインタ取得 – プログラミング – Home

分割ビューのポインタ取得
 
通知
すべてクリア

[解決済] 分割ビューのポインタ取得


ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

開発環境 : 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イベントで行いたいのですが、ドキュメントクラスのポインタを取得する
 方法が分かりませんでした。できればこちらの方にも回答いただけるとありがたいで
す。


引用未解決
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

ボタンのウィンドウが作成される前にOnSizeが呼ばれているのでは。

if (!::IsWindow(pView->m_BtnUpDown))
return;
pView->m_BtnUpDown.GetWindowText(strBtnText);


返信引用
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

kerryさん

おっしゃる通りボタンのウィンドウが作成される前にOnSizeが呼ばれて
いたみたいです。無事ボタンのテキストが変わりました。
ありがとうございます。

ひとまずこれで解決とさせていただきます。
ですが※で記述した方法で実現したいと考えておりますので、
なにか情報ありましたら引き続き当スレにて書き込みをお願いいたします。


返信引用
a
 a
(@a)
ゲスト
結合: 23年前
投稿: 59
 

>ドキュメントクラスのポインタを取得する
((CFrameWnd*)GetParent())->GetActiveDocument();

ただ、
GetPane()で直接Viewポインターを取った方が楽


返信引用
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

aさん

貴重な情報ありがとうございます。
早速試してみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました