Visualization Tool Kit(VTK)など

非常にややこしい,かつ,クラスウィザードによるイベントハンドラの追加やオーバーライドに対応していないため手入力しなくてはならない.
しかしながら,複雑なコーディングをすることなく,タブ化・並べて表示・フローティングウィンドウで表示を動的にできるためその点では有用である.
直接移行するよりも新しいスケルトンに既存のクラスを移すほうがかなり簡単だと思われる.

新規スケルトンを作る

  • MFCアプリケーションを新規作成する.
  • Doc-Viewアーキテクチャのサポートを外す(どうしても使いたければ止めないがどうせPaneはViewではないためUpdateAllViewsの通知対象外である)
  • Classic Menuは不可.Use a menu bar and toolbar か Use a ribbonを選択する
  • その他設定は必要に応じて行う.

既存のダイアログを移行する.

  • CDialog派生クラスをCPaneDialog派生クラスに変更する.
  • コンストラクタの引数を消す.
  • OnInitDialogをHandleInitDialog(WPARAM wparam, LPARAM lparam)に変更する.
  • メッセージマップにON_MESSAGE(WM_INITDIALOG, HandleInitDialog)を追加する.

新規スケルトンのCMainFrameで移行したダイアログを作成する.

  • ダイアログクラス自体のIDを設定する.ID_VIEW_HOGEVIEW.
  • CMainFrameにON_COMMAND(ID_VIEW_HOGEVIEW, OnViewHogeView)というイベントハンドラを作る.
  • OnCreateでダイアログを作成する(下記参照).

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
  ON_COMMAND(ID_VIEW_HOGEVIEW, OnViewHogeView)
  ON_COMMAND(ID_VIEW_FUGAVIEW, OnViewFugaView)
END_MESSAGE_MAP()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  //省略
  //CMainFrame::CHogeView m_wndHogeView;  //derived from CDockablePane
  //CMainFrame::CFugaDialog m_wndFugaDlg; //derived from CPaneDialog
  m_wndHogeView.Create(_T("Hoge"), this, CRect(0, 0, 100, 100), TRUE, ID_VIEW_HOGEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI);
  m_wndFugaDlg.Create(_T("Fuga"), this, TRUE, CFugaDialog::IDD,  WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI, ID_VIEW_FUGAVIEW);
  m_wndHogeView.EnableDocking(CBRS_ALIGN_ANY);
  m_wndFugaDlg.EnableDocking(CBRS_ALIGN_ANY);
  DockPane(&m_wndHogeView);
  DockPane(&m_wndFugaDlg);
}
void CMainFrame::OnViewHogeView()
{
  ShowPane (&m_wndHogeView, !(m_wndHogeView.IsVisible ()), FALSE, TRUE);
  RecalcLayout ();
}
void CMainFrame::OnViewFugaView()
{
  ShowPane (&m_wndFugaDlg, !(m_wndFugaDlg.IsVisible ()), FALSE, TRUE);
  RecalcLayout ();
}

他CMFCMenuやCMFCToolbarが適切に設定されていれば,メニュー上右クリックで表示されるCMFCPopupMenuで表示非表示の設定も有効になるはずである.

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

#include<memory> #include<string> #include<sstream> #include<algorithm> #include<functional> #include<numeric>

Media Foundation

【メニュー編集】
Wiki記法ガイド

メンバーのみ編集できます