none
MFC マウス列挙子の、斜め部分のサイズ取得は出来ますか? RRS feed

  • 質問

  • たびたびお世話になります。

    少し変わったウィンドウを作成しており、ウィンドウスタイルが画面上のものと異なります。

    さて、このウィンドウにサイズ変更機能を付けようとしていますが、ウィンドウスタイルに WS_THICKFRAME を設定していない為、縦横の部分はいいのですが、マウスカーソルがちょうど斜めになる部分のサイズが判らなくて困っています。

    システム設定の何処かにあった様な覚えがあったのですが、GetSystemMetrics と SystemParameterInfo にはありませんでした。

    他の関数で取得できるのか、レジストリの何処かにあるのか、そもそも、そんな設定はないのでしょうか?
    2010年1月22日 8:10

回答

  • さて、このウィンドウにサイズ変更機能を付けようとしていますが、ウィンドウスタイルに WS_THICKFRAME を設定していない為、縦横の部分はいいのですが、マウスカーソルがちょうど斜めになる部分のサイズが判らなくて困っています。
    ざっと見てみましたが、見当たりませんねぇ。
    まず、タイトルバーの左右では無条件に/になりますが、意外だったのはウインドウの底辺
    で、右に「グリップ」が存在する場合には、左右の/になる範囲が異なっていたことです。
    グリップが無ければ同じのようですね。

    思うに、そもそもWS_THICKFRAME でないなら、また、それと見間違うほど似ていなければ
    WS_THICKFRAME のルールを無理に当てはめる必要はないかもしれません。
    例えば、正三角形ウインドウのサイズ変更カーソルが、どうあるべきかは悩んでしまいますよね。
    要は、ユーザーに無理のない範囲でやれば良いような気がします。


    • 回答としてマーク ミッヒー 2010年1月22日 10:16
    2010年1月22日 10:06
  • ちょっと事情がわからないので、外しているかもしれませんが、
    MFS_4THICKFRAME というキーワードであれこれ調べてみると、吉かもしれません。
    • 回答としてマーク ミッヒー 2010年1月23日 17:06
    2010年1月23日 16:00

すべての返信

  • さて、このウィンドウにサイズ変更機能を付けようとしていますが、ウィンドウスタイルに WS_THICKFRAME を設定していない為、縦横の部分はいいのですが、マウスカーソルがちょうど斜めになる部分のサイズが判らなくて困っています。
    ざっと見てみましたが、見当たりませんねぇ。
    まず、タイトルバーの左右では無条件に/になりますが、意外だったのはウインドウの底辺
    で、右に「グリップ」が存在する場合には、左右の/になる範囲が異なっていたことです。
    グリップが無ければ同じのようですね。

    思うに、そもそもWS_THICKFRAME でないなら、また、それと見間違うほど似ていなければ
    WS_THICKFRAME のルールを無理に当てはめる必要はないかもしれません。
    例えば、正三角形ウインドウのサイズ変更カーソルが、どうあるべきかは悩んでしまいますよね。
    要は、ユーザーに無理のない範囲でやれば良いような気がします。


    • 回答としてマーク ミッヒー 2010年1月22日 10:16
    2010年1月22日 10:06
  • 仲澤@失業者 さん、昨日に引き続き回答下さり、ありがとうございます。
    ざっと見てみましたが、見当たりませんねぇ。
    そうですか・・・。と言うことは私の記憶違いの可能性が高いですね。

    思うに、そもそもWS_THICKFRAME でないなら、また、それと見間違うほど似ていなければ
    WS_THICKFRAME のルールを無理に当てはめる必要はないかもしれません。
    例えば、正三角形ウインドウのサイズ変更カーソルが、どうあるべきかは悩んでしまいますよね。
    要は、ユーザーに無理のない範囲でやれば良いような気がします。
    外見はフローティング可能なウィンドウで、拡張スタイル WS_EX_TOOLWINDOW が付いています。

    しいて言えば、Visual Studio のドッキング / フローティング可能なウィンドウ、でしょうか・・・。
    ごく普通の外見をしているだけに、ごく普通の動作を、と思ったのですが。

    仲澤@失業者 さんのアドバイス通り、ユーザーに無理のない範囲でやってみます。

    二日続けて、ありがとうございました。
    2010年1月22日 10:16
  • ちょっと事情がわからないので、外しているかもしれませんが、
    MFS_4THICKFRAME というキーワードであれこれ調べてみると、吉かもしれません。
    • 回答としてマーク ミッヒー 2010年1月23日 17:06
    2010年1月23日 16:00
  • Atsushi777 さん、お世話になっています。

    大吉でした。

    MFS_4THICKFRAME は MFC のツールバーなどがフローティングする際の、CMiniFrameWnd クラス等で使われる MFC 内部スタイルでしたよね。

    このスタイルは斜めを無視して、上下左右のみのカーソルを表示するものだとばかり思っていましたが、改めて MFC ソースを検索したところ、MFS_THICKFRAME も存在している事が判り、MFC の内部メンバ CSize _afx_sizeMiniSys も見付けられました。

    _afx_sizeMiniSys は AFX_IDB_MINIFRAME_MENU というビットマップリソースの幅と高さで、Visual Studio 2008 で MFC とスタティックリンクをして読み込んでみた所、幅 12、高さ 10 でした。

    当然、MFC ライブラリのバージョン、共有版かどうかでサイズは変わってくる可能性はありますが、概ねその辺りの値と判っただけで大収穫です。比較的近いサイズでシステム設定の影響を受ける GetSystemMetrics を使って、ミニボタンのサイズでも利用しようかと思います。副産物で私のよりは速そうなヒットテストコードも MFC の中で発見できました。

    大助かりです。ありがとうございました。
    • 編集済み ミッヒー 2010年1月23日 17:14 再修正
    2010年1月23日 17:06