こんにちは。
環境は WinXP VC++.NET MFC です。
SDIのウィンドウをスプリットウィンドウで区切っているのですが、
1つのペイン(CListView)にCRebarを配置したいのですがうまくいきません。
(CRebarにはCDialogbarを追加)
CFrameWnd::OnCreate()の中でCRebarを作成するとうまくできるのですが、
CListView::OnCreate()の中ではうまく作成する事ができません。
スプリットウィンドウのペインにCRebarを設置するにはどうすればよいのでしょうか?
自分で質問して自分でレスつけるのもなんなのですが、
色々調べていたら過去ログで同じような質問がありました。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200203/02030091.txt
解決方法は”ペインにフレームウィンドウを埋め込む”という方法のようですが、
上のリンクにあるサンプルコードを使ってもペインにフレームウィンドウを作成する事
はできませんでした。
CFrameWnd::Createに渡すパラメータが個数も内容も違うのでコンパイルすら通りませ
ん。
(MFCのバージョンの違いかな?)
で、アイディアだけ頂いて自分でコードを書くと以下のようになりました。
(内容が分かりやすいようにエラー処理を省いたコードです。細かい部分一部省略)
//まず普通にスプリットウィンドウのペインを作成します。
//(CMainFrame::OnCreateClientの中で)
m_wndSplitter.CreateStatic( this, 1, 2 );
m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CaaaView ), CSize( 100, 100 ),
pContext );
m_wndSplitter.CreateView( 0, 1, RUNTIME_CLASS( CbbbView ), CSize( 100, 100 ),
pContext );
//その後作成したペインにフレームウィンドウを埋め込む
CCreateContext ccc;
ccc.m_pCurrentDoc = pContext->m_pCurrentDoc;
ccc.m_pNewViewClass = RUNTIME_CLASS( CcccView ); //CcccViewが目に見えるビュ
ーになる
pFrame1 = new CFrame1; //CFrameはCFrameWndの派生ク
ラス
pFrame1->Create( NULL, NULL, WS_CHILD | WS_VISIBLE,
CRect( 0, 0, 0, 0 ), m_wndSplitter.GetPane( 0, 0 ), NULL, NULL,
&ccc );
HwFrame1 = pFrame1->GetSafeHwnd(); //このハンドルは後でリサイ
ズに使う
とりあえずこれでペインにビュー(CcccView)付きのフレームウィンドウ(CFrame1)が作成
できます。
で、フレームウィンドウ(CFrame1)のサイズはCaaaViewのWM_SIZEで正しい大きさに合わ
せます。
::MoveWindow( HwFrame1, 0, -1, cx, cy, FALSE ); //とかやって
ツールバーやCRebarなどは、普通にCFrame1::OnCreateの中で作成できます。
VC++.NETならこれでOK。それ以外のバージョンは不明ですし、安全かどうかも謎です
(^^;。
これなら、ビューに直接コントロールを張った方が楽でいいかもしれない、、、。