WindowsXP VC++6.0でWindowsアプリケーションを作成中です。
プログラムも出来上がりつつあり、アイコンを入れようとしたのですが何度やってもうまくいきません。
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = (HICON)LoadImage(hInst, "ICON32", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
wc.hCursor = (HCURSOR)LoadImage(NULL,
MAKEINTRESOURCE(IDC_ARROW),
IMAGE_CURSOR,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName;
wc.hIconSm = (HICON)LoadImage(hInst, "ICON16", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
return (RegisterClassEx(&wc));
}
これだと、大きいほう(ファイルのアイコン?)は表示されているのですが、小さいほう(実行時に左上に出る)がWindowsのデフォルトのアイコンになってしまいます。
小さいほうのアイコンをリソースではなくファイルからの読み込みにしてみたのですが、そのときはうまくいきました。
ビットマップを表示させる場合もリソースから表示させようとすると表示できないところから、リソースの読み込みがうまく行ってないのかと思います。
しかし、大きいアイコンのリソースはうまく読み込めて、小さいほうのアイコンは読み込めないというのがわからず完全にお手上げです…
もちろんリソースにアイコンを登録してあります。
私は、まだまだヒヨッコで知らないことも多々ありますので、些細なことでも言っていただけると嬉しいです。
よろしくお願いします。
> これだと、大きいほう(ファイルのアイコン?)は表示されているのですが、小さいほう(実行時に左上に出る)がWindowsのデフォルトのアイコンになってしまいます。
> 小さいほうのアイコンをリソースではなくファイルからの読み込みにしてみたのですが、そのときはうまくいきました。
> ビットマップを表示させる場合もリソースから表示させようとすると表示できないところから、リソースの読み込みがうまく行ってないのかと思います。
> しかし、大きいアイコンのリソースはうまく読み込めて、小さいほうのアイコンは読み込めないというのがわからず完全にお手上げです…
MSDNより…
> cxDesired
> [入力]アイコンまたはカーソルの幅をピクセル単位で指定します。
> このパラメータに 0 を指定し、fuLoad パラメータに LR_DEFAULTSIZE を指定すると、
> システムメトリック値の SM_CXICON または SM_CXCURSOR を使って幅が設定されます。
> このパラメータに 0 を指定し、fuLoad パラメータで LR_DEFAULTSIZE を指定しないと、リソースの実際の幅が使われます。
ということで、SM_CXICONとSM_CYICONが大きいアイコンのサイズになってるんじゃないでしょうか?
スモールアイコンの読み出し時のLR_DEFAULTSIZEを外してみてはどうでしょうか?
私のちょっとしたミスのせいで起きた問題のようです。
発言ありがとうございました。
ツイート | ![]() |