2

ご挨拶。

背景があり、http: //www.codeproject.com/KB/graphics/picturewindow.aspxを使用し、いくつかのピクチャ ボックス コントロールを持つ、ドラッグ可能な MFC ダイアログ ウィンドウを作成する必要があります。私は 2 つのアプローチを試しましたが、それらは機能しますが、いくつかの問題があります。

最初のアプローチは「手動」です-LBUTTONDOWNメッセージで、ウィンドウのクリーンエリアにあるかどうかを確認し、フラグ変数を設定します。MOUSEMOVE では、フラグがチェックされ、設定されている場合は MoveWindow 関数が呼び出され、次に Invalidate(1) が呼び出されます。LBUTTONUP では、フラグが設定されていません。このアプローチは正しく機能し、必要に応じて再描画しますが、どういうわけか非常に遅いです.カーソルを速く動かしすぎると、カーソルがウィンドウの上にないため、ウィンドウが落ちてドラッグされません.

2番目のアプローチは「自動」です-私はただ呼び出します

DefWindowProc(WM_SYSCOMMAND, SC_MOVE+2,MAKELPARAM(point.x,point.y));

LBUTTONDOWNで、残りを処理します。すばやく、遅れることはありませんが、画面の端にドラッグすると(ウィンドウの一部が見えなくなるため)、ドラッグして戻すと、すべてのコントロールが見えなくなり、そうではありませんリフレッシュ、背景は大丈夫です。DefWindowProc() を呼び出した後に実際に呼び出すので、そのように移動中に Invalidate() が呼び出されないためだと思います。そのため、ボタンを押すとすべてが適切に更新されます。

これらのソリューションのいずれかを改善するにはどうすればよいですか? 私はそれが速くて正確である必要があります。必要な情報を提供していない可能性があります。必要に応じて追加します。

前もって感謝します。

4

1 に答える 1

0

2番目の方法を変更して、問題を解決しました。OnPaint() に完全な再描画を追加し、ちらつきをなくすために、フラグ変数を使用して、ドラッグ中にのみ再描画しました。

于 2010-12-21T02:02:02.947 に答える