分割ウィンドウの入れ替え

[戻る]
まひ 2002/07/03(水) 17:57:44
はじめまして、まひと申します。
VC++6.0(MFC)の勉強を始めて一ヶ月の若輩者です。

MDIで↓のようにCSplitterWndを使用して分割ウィンドウを作成しました。
そこでメニューに切換えの項目を作り、[BView]と[CView]を入れ替えるプログラムを
組みたいのですが、どうしてもできませんでした。

|~~~~~~~|~~~~~~~|
|       | BView |
| AView |-------|
|       | CView |
|_______|_______|

どのようにすれば実現できるでしょうか?
ご教授よろしくお願いします。

TAD [E-Mail] 2002/07/03(水) 20:49:17
入れ替えたいビューの ID を交換すれば可能です。
以下にソースを参考にしてみてください。


// 入れ替えるビューの取得
CView* pView1 = (CView*)m_wndSplitter.GetPane(0, 0);
CView* pView2 = (CView*)m_wndSplitter.GetPane(0, 1);

// ID の入れ替え
UINT nID1 = pView1->GetDlgCtrlID();
UINT nID2 = pView2->GetDlgCtrlID();
pView1->SetDlgCtrlID(nID2);
pView2->SetDlgCtrlID(nID1);

// ウィンドウ位置の入れ替え
CRect rcWnd1;
CRect rcWnd2;
pView1->GetWindowRect(rcWnd1);
pView2->GetWindowRect(rcWnd2);
m_wndSplitter.ScreenToClient(rcWnd1);
m_wndSplitter.ScreenToClient(rcWnd2);
pView1->MoveWindow(rcWnd2);
pView2->MoveWindow(rcWnd1);


ID だけを入れ替えれば認識されるはずなのですが、画面を更新させるために、
ウィンドウ位置も入れ替えています。

まひ 2002/07/04(木) 09:25:08
[[解決]]
TADさんレスありがとうございます。大変参考になりました。
GetPaneをつかってCWndを取得して何かやるんだろうな〜
というところから進まなかったんです。

また、どうしても分からない事があった時はよろしくお願いします。
本当にありがとうございました。

古いスレッドには追加発言できません。