の実際のサイズIDI_ICON1
は14x14ピクセルです。
また、CStatic
コントロールのサイズは21x20で、デザイナーで変更することはできません。
デザイナでコントロールのサイズを確認している場合、ここではリンゴとリンゴを比較していません。設計者は、ピクセルではなく、 DLU(ダイアログボックス単位)でコントロールのサイズを報告しています。
DLUとピクセルの間には必ずしも1対1のマッピングがあるとは限りません。実際、DLUの要点は、ピクセルに依存しないということです。1つのDLUで表される実際のピクセル数は、アプリケーションを実行しているコンピューターのフォントとDPIによって異なります。
ですから、あなたが見ている行動は私には完全に理にかなっています。
このDLUとピクセルの愚かさが信じられない場合は、デバッガーでアプリケーションを実行し、Spy ++を使用して静的コントロールの実際のサイズ(ピクセル単位)を調べてみてください。14x14だと思います。
いいえ、アイコンを表示するように設定されている場合、デザイナで静的コントロールのサイズを変更することはできません。コントロールは、表示しているアイコンに合わせて自動的にサイズ変更されます。これも仕様によるものです。なぜあなたがしたいのか想像できません。あなたの要点は、アイコンがクリップされたくないということのようです。
しかし、コメントで述べたように、静的コントロールはアイコンを自動的に拡大縮小しません。アイコンを自分でスケーリングするコードを作成する必要があります(おそらくDrawIconEx
関数を呼び出すことによって)。静的コントロールにそれ自体のサイズを強制的に変更すると、アイコンがトリミングされるか、アイコンの周囲に境界線が追加されます。duDEが提案しSS_CENTERIMAGE
たように、スタイルを追加すると、アイコンが静的コントロールの中央に配置されるようにこの動作が変更され、トリミングの方法が微妙に変わります。ただし、静的コントロールのサイズに合わせてトリミングされます。
ただし、注意してください。実際にあるアイコンに関するコメントでの私の質問の全体的なポイントはIDI_ICON1
、LoadIcon
関数にはいくつかの重要な制限があるということです。つまり、SM_CXICON
とSM_CYICON
サイズのアイコンのみをロードするように設計されています(ほとんどのシステムでは、32x32になります)。アイコンリソースにアイコンが1つしか定義されていない場合は期待どおりに機能しますが、そうでない場合は機能しなくなります。それがストレッチの説明だったのかもしれません。LoadImage
代わりに、関数を使用することをお勧めします。コードはかなり冗長ですが、より強力な関数です。
HICON hIcon = static_cast<HICON>(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON,
14, /* width (x dimension) */
14, /* height (y dimension) */
LR_DEFAULTCOLOR));
// (make sure to call DestroyIcon() on hIcon when you're done with it!)