(MFC の質問) CScrollView で現在表示されているクライアント領域を特定する最善の方法は何ですか? 表示部分のサイズだけが必要なので、ここでは GetClientRect() は機能しません。
3 に答える
GetClientRect() を使用する必要がありますが、間違った質問をしていると思います。スクロールされたビューに、物理的にスクロールされる非常に大きなクライアント ウィンドウがあるわけではありません。代わりに、スクロールすると、DC のビューポート テキストとマッピング モードが調整され、ビューが実際よりも大きく見えるようになります。したがって、現在のビューポートの左上隅から右下隅まで線を引きたい場合は、GetViewPortOrg() と GetViewportExt() が必要です。これらが間違った値を返す場合、CScrollView の使用に何か問題があります。SetScrollSizes() を呼び出しましたか?
Yep, you're both right. GetClientRect was exactly what I needed. A brain fart on my part...
OnDraw() 関数内で、pDC->GetViewportOrg および pDC->GetViewportExt を呼び出すことができます。
編集: 申し訳ありませんが、ビューポートの範囲はスケーリング係数のみであることを忘れていました。ここで本当に必要なのは client rect であることに同意します。