Visualization Tool Kit(VTK)など

×
色々後付でとんでもないことになっている.Visual StudioのClassViewにあるような隠したり固定したり外したりできるウィンドウを提供する.
ソースを見ると直接な方法でがんばってはいる.マウスがヒットしただとか.AutoHideモードであるかだとか.

派生は下記の通り.
CWnd -> CBasePane -> CPane -> CDockablePane -> CPaneDialog

問題

  1. リソースにダイアログを作成し,Add ClassをしてもCPaneDialogは選べない.
  2. OnInitDialogがない
  3. ダイアログ上のコントールがhandlerをもっていないとDisableになるというおせっかい仕様だが,CPaneDialog派生クラス上でハンドラーを設定してもDisableのままである.
  4. 色々,オーバーライドやメッセージハンドラーなどの追加がIDE上でうまくいかない.

解決

VisualStudio2010をもっているならばMFCのソースがあるはずなのでデバッグで実行してみればCPaneDialogのソースにたどり着くことができる.

OnInitDialog

理由はしらないがLRESULT HandleInitDialogを使用する.
CPaneDialogは virtual LRESULT HandleInitDialog(WPARAM wparam, LPARAM lparam) を持っているがIDE上のオーバーライドには表示されないため,
手入力する必要がある.メッセージマップへの登録はON_MESSAGE(WM_INITDIALOG, &CHogeDlg::HandleInitDialog)とする.

コントロールの有効化

問答無用でコントロールを有効にする(問答無用も普通だが)方法.
  //HogePaneDialog.h
  class CHogePaneDialog : public CPaneDialog
  {
    //追加
    virtual void OnUpdateCmdUI(class CFrameWnd *pTarget, int bDisableIfNoHndler);
  };

  //HogePaneDialog.cpp
  void CHogePaneDialog::OnUpdateCmdUI(class CFrameWnd *pTarget, int bDisableIfNoHndler)
  {
    CPaneDialog::OnUpdateCmdUI(pTarget, FALSE );
  }

コメントをかく


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

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

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

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

Media Foundation

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

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

広告募集中