5

XP64 および Vista64 の複数のモニター ワークステーションで実行されるアプリケーションがあり、アプリケーション内の 1 つのフォームを特定のモニターに移動すると奇妙な問題が発生します。

フォームがプライマリ モニターの左上にあるモニターに移動された場合 ([表示設定] ダイアログで負の座標になっています)、フォームにカーソルを置くと、ユーザーは対角線のサイズ変更カーソルを取得します (私は見ただけです)。カーソルがウィンドウのクロムにあるときに発生しますが、ユーザーはウィンドウ全体で発生していると報告しています)。

カーソルがプライマリ モニターの上にある場合にのみ発生することを確認できました (セカンダリ モニターをプライマリ モニターの上に部分的にのみ作成すると、プライマリ モニターの上にあるフォームの部分でのみ問題が発生します)。

これは、アプリケーション全体で 1 つのフォームでのみ発生します。このフォームは、特に派手なことは何もしません (WndProc をオーバーライドしないなど)。また、使用されるすべてのカスタム コントロールは、この問題を表示しない他のフォームでも使用されます。 .

斜めのサイズ変更カーソルが常に表示される原因は何ですか?

4

2 に答える 2

6

これは Form.WmNCHitTest のバグのようです。x 座標と y 座標を決定する方法が間違っていると思います (y を取得するには、として定義されてHIWORD((int)((long)lParam))いるものを使用するようにドキュメントに記載されています)。GET_Y_LPARAM((int)(short)HIWORD(lParam))

サイズ グリップがオンになっている場合にのみ、この方法が使用されます。サイズ グリップをオフにすると、このコードがバイパスされ、フォームが適切に機能します。

于 2009-10-01T16:46:35.407 に答える
-1

追加情報: Form.SizeGripStyle 設定を Show に設定すると、カーソルが斜めのサイズ変更カーソルになるという奇妙な動作が発生することがわかりました。これは、右下隅からウィンドウのサイズを変更しているように見え、機能します。フォーム ウィンドウがセカンダリ モニターに移動されます。Form.SizeGripStyle をデフォルトの Auto に設定すると、この問題は解消され、フォーム ウィンドウのカーソルとサイズ変更は正常に機能します (適切なカーソルなど)。

于 2014-04-25T16:20:26.267 に答える