WM_NCHITTEST ― 2008年05月18日 21:23
プログラマ向けの話題です。
背景をドラッグしてダイアログを移動する機能について書きましたが、
http://cessna373.asablo.jp/blog/2008/05/11/3500439
それを簡単に実現する方法です。
特に特別なことはなくて、WM_NCHITTEST で HTCAPTION を返すだけです。
詳しくは、WM_NCHITTEST と HTCAPTION で検索すればいろいろ出てきます。
簡単に言うと、マウスイベントが発生したとき、以下のような処理になっているということです。
1. ウィンドウマネージャがウィンドウに WM_NCHITTEST を送る。
2. ウィンドウはマウス位置に応じて、そこがキャプションか、クライアント領域か、などの情報を返す。
3. クライアント領域でなければ、ウィンドウマネージャはウィンドウを移動するなどの独自の処理を行う。クライアント領域なら、単に WM_MOUSE*** メッセージを送る。
単純なダイアログの場合は HTCAPTION を返すだけでいいのですが、プロパティシートのプロパティページなど、ダイアログの子ウィンドウでは HTTRANSPARENT を返すなどの工夫が必要になります。
この辺りはいろいろ試してみてください。
以前、Win2k だとサイズボックス上でマウスカーソルが変わらないという問題について書きました。
http://cessna373.asablo.jp/blog/2008/01/26/2580943
ここに書いているとおり WM_SETCURSOR でカーソルを設定してもいいのですが、それ以外に WM_NCHITTEST で HTBOTTOMRIGHT を返す方法もあります。
背景をドラッグしてダイアログを移動する機能について書きましたが、
http://cessna373.asablo.jp/blog/2008/05/11/3500439
それを簡単に実現する方法です。
特に特別なことはなくて、WM_NCHITTEST で HTCAPTION を返すだけです。
詳しくは、WM_NCHITTEST と HTCAPTION で検索すればいろいろ出てきます。
簡単に言うと、マウスイベントが発生したとき、以下のような処理になっているということです。
1. ウィンドウマネージャがウィンドウに WM_NCHITTEST を送る。
2. ウィンドウはマウス位置に応じて、そこがキャプションか、クライアント領域か、などの情報を返す。
3. クライアント領域でなければ、ウィンドウマネージャはウィンドウを移動するなどの独自の処理を行う。クライアント領域なら、単に WM_MOUSE*** メッセージを送る。
単純なダイアログの場合は HTCAPTION を返すだけでいいのですが、プロパティシートのプロパティページなど、ダイアログの子ウィンドウでは HTTRANSPARENT を返すなどの工夫が必要になります。
この辺りはいろいろ試してみてください。
以前、Win2k だとサイズボックス上でマウスカーソルが変わらないという問題について書きました。
http://cessna373.asablo.jp/blog/2008/01/26/2580943
ここに書いているとおり WM_SETCURSOR でカーソルを設定してもいいのですが、それ以外に WM_NCHITTEST で HTBOTTOMRIGHT を返す方法もあります。
コメント
トラックバック
このエントリのトラックバックURL: http://cessna373.asablo.jp/blog/2008/05/18/3523565/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。