8

MFCを使用してVS2008で作成されたプログラムがあります。これで、「モニターごとの DPI 対応」に変更して、ほぼ完了です。マニフェストを変更し、WM_DPICHANGE メッセージを処理しました。しかし、まだ 1 つの問題があります。

CFileDialogクラスを使用して開く/保存ダイアログを表示し、 SHBrowseForFolder関数を使用してフォルダー選択ダイアログを表示しました。ただし、これらのダイアログはすべて「モニターごとの DPI 対応」ではありません。DPI 設定が異なるモニター間でダイアログを移動しても、UI は調整されません

これらのダイアログのメッセージを監視するためにスパイ++を使用しています.WM_DPICHANGEDメッセージを受信できることがわかりましたが、それを処理していません.

また、Windows 10 の notepad.exe でファイルを開くダイアログをテストしたところ、完全に機能しました。

これらのダイアログを「モニターごとの DPI 対応」にする方法を知っている人はいますか?

--------編集--------

さらに 2 つの問題があります。

  1. ウィンドウを異なる DPI のモニターに移動すると、ウィンドウのサイズは自動的に変更されますが、タイトル バーの高さとタイトルのフォント サイズは変更されません。
  2. チェックボックス コントロールのボックス サイズも変更されません。

これらの問題には何らかの関連があるのではないかと思いますが、わかりません。

--------悲しいニュース--------

Microsoft の「DPI チュートリアル サンプル」を VS2013 でコンパイルしましたが、同じ問題が発生しました。

https://code.msdn.microsoft.com/DPI-Tutorial-sample-64134744

4

2 に答える 2

0

MSDNによると、メッセージを処理するウィンドウは0 を返す必要があります。ただし、不明なメッセージに対して既定のウィンドウ プロシージャを呼び出すため、WM_DPICHANGED送信した MFC ウィンドウまたはコントロールは0 を返します。WM_DPICHANGED

したがって、戻り値をゼロと比較してウィンドウがWM_DPICHANGEDメッセージを処理するかどうかを判断することは正確ではありません。LRESULT

MSDNに記載されているように、モニターごとの DPI 対応アプリケーションのウィンドウのタイトル バーは、異なる DPI モニター間を移動するときにスケーリングしません。残念ながら、ウィンドウの非クライアント領域は DPI を調整しません。

電卓およびその他のモニターごとの DPI 対応 Windows ネイティブ アプリには、ここで説明されているように、カスタム タイトル バーの描画があります。

于 2016-04-18T10:25:31.207 に答える