【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23297

アイコン表示について
投稿者---わたこ(2005/09/26 02:07:51)


はじめまして、わたこと申します。
C言語のウインドウ作成時、およびタスクトレーに格納時におけるアイコンの表示について質問させていただきます。
 ソースを提示させて頂いたほうが早いと思うので、以下に一部を示します。

====ここからソース====
void MyTaskTray(HINSTANCE hInstance, HWND hWnd, PNOTIFYICONDATA lpni){
HICON hIcon = LoadIcon(hInstance, "IDI_ICON1");
lpni->cbSize = sizeof(NOTIFYICONDATA);
lpni->hIcon = hIcon;
lpni->hWnd = hWnd;
lpni->uCallbackMessage = 12;
lpni->uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
lpni->uID = 13;
strcpy(lpni->szTip, "ICMP_CAPTCHA");

Shell_NotifyIcon(NIM_ADD, lpni);
return;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg;
NOTIFYICONDATA ni;

// ウィンドウクラス設定
WNDCLASSEX wc = { sizeof(WNDCLASSEX),
CS_CLASSDC,
WndProc,
0L,
0L,
GetModuleHandle(NULL),
LoadIcon(hInstance, "IDI_ICON1"),
NULL,
NULL,
NULL,
szWinName,
NULL };
RegisterClassEx( &wc );

// ウィンドウ生成
hWnd = CreateWindowEx(WS_EX_TOPMOST,
szWinName, szWinName,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
320, 240,
GetDesktopWindow(), NULL, wc.hInstance, NULL );

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

// タスクトレーに格納
MyTaskTray(wc.hInstance, hWnd, &ni);

while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
====ここまでソース====

現在の状態を
http://www.h7.dion.ne.jp/~m-forest/question.JPG
に示します。

この状態に、IDI_ICON1というアイコンのリソースも準備しています。
 ここで、これを実行すると、タスクトレーの題名の横に表示されるアイコンは正常にIDI_ICON1が表示されるのですが、ウインドウで表示されている場所のアイコンはデフォルトのままになってしまいます。
 さらに、タスクトレーには、格納されるものの、アイコンが表示されません。(アイコンが表示されないだけであって、格納はされる。)


原因がわかる方、ご教授お願いいたします。

環境:VC++ 6.0 WindowsXP



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:アイコン表示について 23298 ぽへぇ 2005/09/26 06:14:47
<子記事> Re:アイコン表示について 23301 わたこ 2005/09/26 09:42:43


No.23298

Re:アイコン表示について
投稿者---ぽへぇ(2005/09/26 06:14:47)



> HICON hIcon = LoadIcon(hInstance, "IDI_ICON1");
たぶん
HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
では?

ウィンドウクラスの所もね。



この投稿にコメントする

削除パスワード

No.23299

Re:アイコン表示について
投稿者---わたこ(2005/09/26 09:27:13)


早い返信、ありがとうございます。
早速、ご指摘の通り"MAKEINTRESOURCE"を付け加えて実行してみたのですが、やはりうまくいかないようです。


この投稿にコメントする

削除パスワード

No.23301

Re:アイコン表示について
投稿者---わたこ(2005/09/26 09:42:43)


ソースコードが読みにくいため、もう一度提示させていただきます。
掲示板利用上の注意をよく読みませんでした。
申し訳ございません。
ぽへぇさんのご指摘から、MAKEINTRESOURCEを付け加えさせていただきました。

====ここからソース====

void MyTaskTray(HINSTANCE hInstance, HWND hWnd, PNOTIFYICONDATA lpni){
    HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE("IDI_ICON1"));
    lpni->cbSize = sizeof(NOTIFYICONDATA);
    lpni->hIcon = hIcon;
    lpni->hWnd = hWnd;
    lpni->uCallbackMessage = 12;
    lpni->uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    lpni->uID = 13;
    strcpy(lpni->szTip, "ICMP_CAPTCHA");

    Shell_NotifyIcon(NIM_ADD, lpni);
    return;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
{
    MSG msg;
    NOTIFYICONDATA ni;

    // ウィンドウクラス設定


    WNDCLASSEX wc = {
        sizeof(WNDCLASSEX),
        CS_CLASSDC,
        WndProc, 
        0L,
        0L,
        GetModuleHandle(NULL),
        LoadIcon(hInstance, MAKEINTRESOURCE("IDI_ICON1")),
        NULL,
        NULL, 
        NULL,
        szWinName,
        NULL };
    RegisterClassEx( &wc );

    // ウィンドウ生成


    hWnd = CreateWindowEx(
        WS_EX_TOPMOST, 
        szWinName, szWinName, 
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
        320, 240,
        GetDesktopWindow(), NULL, wc.hInstance, NULL );

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    // タスクトレーに格納


    MyTaskTray(wc.hInstance, hWnd, &ni);

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (msg.wParam);
}



====ここまでソース====


この投稿にコメントする

削除パスワード

No.23302

Re:アイコン表示について
投稿者---Blue(2005/09/26 09:46:21)


MAKEINTRESOURCEのIDにはリテラルがいらないです。

アイコンリソース
の"アイコン識別子に整数を使う"を参考にどうぞ



この投稿にコメントする

削除パスワード

No.23305

解決しました!
投稿者---わたこ(2005/09/26 10:10:36)


すいません、リテラルはいらないですね。
ぽへぇさんの記述にもリテラルはついていないのに、勝手に自分でつけてしまいました・・・。

まずは他人の記述をしっかりと読まないといけないですね・・。
申し訳ございませんでした。

初歩的な質問に付き合って頂きまして、ぽへぇさん、Blueさん、ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧