none
SetWindowPos関数の引数に”SWP_NOMOVE | SWP_NOSIZE”を指定したウィンドウがマウス移動できてしまう RRS feed

  • 質問

  • VisualStudio6.0で作成したプログラムです。

    マシンよって、Windows7でSetWindowPos関数の引数に”SWP_NOMOVE | SWP_NOSIZE”を指定しても、タイトルバーをつかんでウィンドウを移動させることができてしまいます。WindowsXPのときは、そのウィンドウは動かなかったのですが、Windows7の端末ではPCの違い(IBM製/HP製)によって、ウィンドウを移動させることができてしまいます。

    何か回避策はないでしょうか?

    2013年7月5日 2:36

回答

  • ありがとうございました。

    WM_WINDOWPOSCHANGINGが発生したときに、WINDOWPOS構造体を編集して、位置修正ができました。

    • 回答としてマーク haohaohao 2013年7月8日 3:01
    2013年7月5日 7:34

すべての返信

  • SetWindowPosの引数のフラグは、そのSetWindowPos関数の呼び出しのうちどのパラメータを使用するかという意味です。SWP_NOMOVEなら、SetWindowPos関数のうちxおよびy引数を無視します。

    ですので、SetWindowPosに何を渡そうが、その後のユーザ操作とは全く関係有りません。

    WM_WINDOWPOSCHANGINGのハンドラと勘違いされていませんか?

    2013年7月5日 2:57
  • 説明不足でわかりつらく申し訳ありません。

    メインウィンドウの「WM_SIZE」「WM_MOVE」にSetWindowPos関数を引数に”SWP_NOMOVE | SWP_NOSIZE”を指定して呼んでいます。

    これで、このウィンドウを動かなく&サイズ変更できなくできると思っていたのですが、間違っていますでしょうか?

    ちなみに「WM_WINDOWPOSCHANGING」にSetWindowPos関数を引数に”SWP_NOMOVE | SWP_NOSIZE”を指定して呼んでみましたが、ウィンドウは普通に動いていました。

    2013年7月5日 5:46
  • 説明不足でわかりつらく申し訳ありません。

    メインウィンドウの「WM_SIZE」「WM_MOVE」にSetWindowPos関数を引数に”SWP_NOMOVE | SWP_NOSIZE”を指定して呼んでいます。

    これで、このウィンドウを動かなく&サイズ変更できなくできると思っていたのですが、間違っていますでしょうか?

    ちなみに「WM_WINDOWPOSCHANGING」にSetWindowPos関数を引数に”SWP_NOMOVE | SWP_NOSIZE”を指定して呼んでみましたが、ウィンドウは普通に動いていました。

    ウィンドウの位置が変えられようとする時に、WM_WINDOWPOSCHANGINGが発生します。このときにLPARAMに格納されているWINDWPOS構造体を編集することで、サイズおよび位置の変更を阻害できます。SetWindowPosを呼び出す必要はありません。

    // WM_SIZE/WM_MOVEでSetWindowPosするときの問題は調べていません。

    • 回答の候補に設定 星 睦美 2013年7月5日 7:49
    2013年7月5日 6:03
  • ありがとうございました。

    WM_WINDOWPOSCHANGINGが発生したときに、WINDOWPOS構造体を編集して、位置修正ができました。

    • 回答としてマーク haohaohao 2013年7月8日 3:01
    2013年7月5日 7:34