5

標準の情報アイコンを表示する必要があるダイアログボックスがあります。これが私のRCコードです:

ICON    "",IDC_ICON_INFORMATION,18,70,21,20

WM_INITDIALOGメッセージを次のように処理します。

HICON aIcn = LoadIcon(NULL, IDI_INFORMATION);
SendDlgItemMessage(m_hWnd, IDC_ICON_INFORMATION, STM_SETICON, (WPARAM) aIcn, 0);

すべてが96DPIで正常に機能します。静的コントロールは、32x32ピクセルのアイコンを表示します。

ただし、より高いDPIに切り替えると(デスクトップを右クリックして[画面の解像度]を選択し、[作成]またはその他のアイテムを拡大または縮小することで)、アイコンが拡大縮小されません。他のすべてがうまく拡大縮小されるため、アイコンは隣接するテキストよりも視覚的にはるかに小さく見えます。144 DPI(150%)では、アイコンのサイズは48x48ピクセルになると思います。XMLマニフェストを使用して、アプリケーションをDPI対応として宣言しました。

最も気の毒なことは、私が自分のカスタムメイドのアイコン(これもRCファイルからのもの)を使用すると、すべてが完全にスケーリングされることです。さらに、フラグを使用しMessageBoxて呼び出された関数は、アイコンの拡大縮小バージョンも表示します。MB_ICONINFORMATION

これらの考えを踏まえて、私は次のことを想定しています。

  1. スタイル付きの静的コントロールは、SS_ICON拡大縮小されたバージョンのアイコンを表示できます。
  2. 標準の情報アイコンを含むアイコンリソースには、拡大縮小されたバージョンのアイコン(48x48)があります。

それでは私は何を間違っているのですか?

4

1 に答える 1

0

LoadIcon ()の代わりにLoadImage()を使用し、GetSystemMetrics(SM_CYICON)およびGetSystemMetrics(SM_CXICON)から取得した値を使用してcxDesiredおよびcyDesiredパラメーターを指定します。

または、DPI対応としてアプリを宣言するだけで十分でしょうか?マニフェストファイルにするテキストファイルを作成するだけで、簡単に試すことができます。SetProcessDPIAwareAPIの備考セクションの例を参照してください

于 2010-08-25T14:23:07.380 に答える