EntryNavi : « いちごシャーベット | メイン | パワーギア »

CategoryNavi : メイン -> コンピューター -> 開発 -> C/C++

LoadIconの罠?!

おバカな自分がはまったお話です。
結局はリファレンスを良く読めって話なのですが・・・。

以下のソースをご覧ください。

#include <windows.h>
#include "my-res.h"

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)
{
    MSG msg;
    char szClassName[] = "MYWINDOW";
    HWND hWnd;
    WNDCLASS wc;
    
    if(!hPrevInst){
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = WindowProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hCurInst;
        wc.hIcon = LoadIcon(NULL,(PCSTR)IDI_APPLICATION); //問題の場所

        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName = "IDM_MY_MENU";
        wc.lpszClassName = (LPCSTR)szClassName;
        if(!RegisterClass(&wc)){
            return FALSE;
        }
    }
    hWnd = CreateWindow(szClassName,/* 略 */);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    
    while(GetMessage(&msg, NULL, 0, 0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM)
{
    //略
}

問題の場所です。


wc.hIcon = LoadIcon(NULL,(PCSTR)IDI_APPLICATION);

第1引数に、NULLを指定すると第2引数で渡した値によって規定のアイコンを設定できます。
(詳しくは、ぐぐってくださいね。)
ここで、おバカな自分は、第2引数に自作のアイコンを設定したリソースIDに書き換えれば、すんなり変わるだろうと思ってメイクして実行!・・・アイコンが変わってない!Σ( ̄□ ̄;)
そして悩む・・・悩む・・・放置・・・リファレンスをよく読む。なぞが解ける!ヽ( ̄▽ ̄)ノ
と、なんとも恥ずかしい過程を経て

wc.hIcon = LoadIcon(hCurInst,(PCSTR)IDI_MY_ICON);

と、第1引数にウインドウのインスタンスを渡せばOKなことに気がつく。 さっそくメイクして実行!アイコンがちゃんと変わっている!成功です。

そんな悲しいメモでした。

でも、DialogBoxマクロで作成したウィンドウのアイコンが変わっていないことに最近気づいて調べないとなーと放置中の今日この頃でした。_| ̄|○

<Category : C/C++>

検索

Google

サイドフィード

track feed 理ろぐ
人気ブログランキング - 理ろぐ
Powered by
Movable Type 3.34