2006-09-25 [長年日記]

メニューっぽいウィンドウを作る

Platform SDKに含まれるサンプルのFakemenuを見るとメニューっぽいウィンドウを作るには、

  1. 親ウィンドウをアクティブにする
  2. ポップアップウィンドウを作りアクティブにせずに表示する
  3. 入力をキャプチャする
  4. メッセージループを回して適宜ディスパッチする

という方法が使われるようです。おそらく、IEのお気に入りのメニューもこの方法で実装されているのではないかと思います。

ところが、この方法は非クライアントエリアの処理と相性が悪いようです。たとえば、このようなポップアップメニュー(たとえば、IEのお気に入りメニュー)を表示した状態で、タイトルバーを右クリックしてもシステムメニューが出ませんし、右上の×ボタンをクリックしてもウィンドウは閉じません。普通のメニューを表示している状態ならば、システムメニューが出たり、ウィンドウが閉じたりします。

入力をキャプチャしているせいで、非クライアントエリアのヒットテストが行われず、その結果これらの入力に対する処理が行われないためだと思いますが、簡単にうまくやる方法はないものでしょうか。

[]