2015年4月23日木曜日

Visual C++のFeature Packをインストールすると、Visual Studioのような自由にドッキング可能なウィンドウが簡単に実現できるけど、ドキュメントが少なくてちょっと苦労する件

自分に対する備忘録です。


  • x閉じるボタンで閉じた時に、CPane派生クラスを削除する方法

    ドッキングフレームウィンドウのxボタンを押すとウィンドウは閉じたように見えるけれど、実際には作成たCPane派生クラスのウィンドウは非表示になっているだけ。フレームワークは、CPaneのコンテナウィンドウ(直接の親ミニフレームウィンドウ)しか破棄してくれない。
    xボタンを押した時にそのCPane派生ウィンドウも破棄するには、ドッキング対象の親フレームウィンドウクラス(CMDIFrameWndExとか)のOnCloseDockingPaneメンバ関数をオーバーライドする。そして、この関数に渡されるCDockablePaneに対して、WM_CLOSEをPostMessageすると良いようだ。
    SendMessageはダメで、あくまでもフレームワークにいったんCPaneを非表示にさせておいて、その後WM_CLOSEハンドラで削除するという流れになるようだ。

  • x閉じるボタンを押さないで、アプリ側から特定のドッキングウィンドウを削除する方法

    これは結構悩みました。CPaneがフローティング状態か、ドッキングしているか、他のドッキングウィンドウとのタブ化されているか、ドッキング後隠れている状態かといろんな状態があって、それによってコンテナウィンドウが違うんですね。どの親コンテナに、どんなメッセージを送るべきか、あるいは、どの関数を呼ぶべきか・・・。

    結論は、そういうアプローチじゃなかったです。自分のCPane派生クラスのOnPressCloseButton()メンバ関数を呼ぶだけで良かったんです。それで、上のいろんなドッキング/フローティング状態からも、その親ミニフレームウィンドウも含めて、うまくウィンドウを破棄してくれました。

0 件のコメント:

コメントを投稿