dpi 非対応の MFC アプリケーションの 1 つに問題があります。
システム設定を高 dpi (120 または 144 dpi など) に変更すると、タスクバーのアプリケーション アイコンがめちゃくちゃに見えます。WNDCLASS
残念ながら、メインフレーム用に独自に登録する必要があり、WNDCLASS.hIcon
メンバーにアイコンを設定する必要があります。このアイコンはLoadIcon
関数を使用してロードされます。GetSystemMetrics(SM_CXICON)
そして、その関数は、120dpi の場合は 40x40 ピクセルである標準サイズ ( によって返されるものと同じ) で画像をロードしようとします。そのサイズのアイコンを提供していないため、残念です。しかし、これには回避策があります: 不思議なことに、dpi 仮想化は 120 dpi に対して有効ではないように見えますが、GetDeviceCaps(..., LOGPIXELSX)
実際には 120 dpi を返し、GetSystemMetrics(SM_CXICON)
40 を返します。これをキャッチして、アイコンを別のサイズでロードするだけです。しかし、144 dpi では機能しません。仮想化が有効になっているように見え、96 dpi と 32 ピクセルが得られるため、アイコンが非常に見苦しくなります。メンバーをに設定すると、アイコンが正常に表示さ
れることがわかりました。しかし、MSDNによると:WNDCLASS.hIcon
NULL
hIcon
クラス アイコンへのハンドル。このメンバーは、アイコン リソースへのハンドルである必要があります。このメンバーが NULL の場合、システムはデフォルトのアイコンを提供します。
では、そのメンバーを NULL に設定しても、アイコンが常に表示されると期待できますか? もう1つの方法は、アイコンを正しいサイズでロードすることですが、そのためには、システムが実際に144 dpiに設定されていることを知る必要があります. ここまでが私の最初の質問です。システムの DPI 設定を (dpi 仮想化アプリケーション内から) 判別できるかどうかを知っている人はいますか? dpi 対応のアプリケーションに実際の dpi などを教えてもらうなど、汚いことをすることも考えましたが、可能であればそのようなことは避けたいと思います。
よろしくお願いします、
フンバガンバ
更新:メインフレームのアイコンがデフォルトのアイコンに置き換えられるため、メンバーをに
設定することは良い考えではないことがわかりました(タスクバーでは問題なく見えますが...) - 私はその間に気づきませんでした私の最初のテスト。WNDCLASS.hIcon
NULL