タスクトレイのアイコンについて

[戻る]
RYU 2006/12/18(月) 02:01:51
タスクトレイのアイコンについてなのですが
起動するとアイコンのスペースが空いてアイコンの絵は
表示されません。

リソーススクリプトは 
MYICON ICON DISCARDABLE "icon.ico"
としています。

#define MYTRAY_MESSAGE (WM_APP + 1)
NOTIFYICONDATA ni;

WinMainでMyInitNotifyIcon関数を呼び出しており
MyInitNotifyIcon関数は

int MyInitNotifyIcon(HWND hWnd)
{
memset(&ni, 0, sizeof(NOTIFYICONDATA));

ni.cbSize = sizeof(NOTIFYICONDATA);
ni.hWnd  = hWnd;
ni.uID  = 0;
ni.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
ni.hIcon = (HICON)LoadImage(hInst, "MYICON", IMAGE_ICON, 0, 0, 0);
ni.uCallbackMessage = MYTRAY_MESSAGE;
strcpy(ni.szTip, "  ");
Shell_NotifyIcon(NIM_ADD, &ni);
return 0;
}

としています。

よろしくお願いします

シャノン 2006/12/18(月) 08:59:17
LoadImage は間違いなく成功していますか?
まずはそこですね。

RYU 2006/12/18(月) 11:26:44
シャノンさん書き込みありがとうございます。
LoadImageが成功しているかどうか確認する方法
を教えていただけないでしょうか?

keichan [E-Mail] 2006/12/18(月) 11:55:02
MSDNより
| 関数が成功すると、ロードされたイメージのハンドルが返ります。
| 関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、GetLastError
関数を使います。

明記されています。
質問する前に最低限の調査をしましょう。

RYU 2006/12/18(月) 12:18:39
keichanさん書き込みありがとうございます。

追加で↓やってみたのですがNULLが返ってるみたいで失敗となります。

HICON hIcon;
hIcon = (HICON)LoadImage(hInst, "MYICON", IMAGE_ICON, 0, 0, 0);
if(hIcon == NULL)  MessageBox(hWnd, "失敗", "conhot ERROR", MB_OK);

確認の仕方はこれであっていますか?

Blue 2006/12/18(月) 13:06:57
とりあえず、その原因を GetLastError を使って確かめてください。

HICON hIcon = (HICON)LoadImage(hInst, "MYICON", IMAGE_ICON, 0, 0, 0);
if(hIcon == NULL)
{
    DWORD err = GetLastError();
    .
    .
    .
}

どんなエラー内容なのかは ErrorLookup(VC6ならメニューのツールからエラー検索を選
択するとでる) や ウォッチ もしくは FormatMessage で確認してください。

RYU 2006/12/18(月) 21:29:43
if(hIcon == NULL)のところに
FormatMessageでやってみたところ
「指定されたリソースの種類がイメージファイルに見つかりません。」
というメッセージが表示されました。

RYU 2006/12/18(月) 21:30:38
Blueさん 書き込みありがとうございます。

Blue 2006/12/19(火) 00:56:17
>MYICON
は何処かで #define とかされていませんよね?

参考
http://wisdom.sakura.ne.jp/system/winapi/win32/win72.html

ちなみに、環境は必ず明記してください。
そうしないと、VSのバージョンでうまくいかないとかそういう問題があっても
見つけることができなくなりますので。
OS,VCのバージョン,プロジェクトの種類ぐらいは書いてください。

RYU 2006/12/19(火) 02:10:05
#define    MYICON        100

としていますがこれが問題でしょうか?

Blue 2006/12/19(火) 07:09:28
>としていますがこれが問題でしょうか?
そうです。

参考のサイト見ましたか?
「アイコン識別子に整数を使う」のところを見ればわかると思いますが、
MAKEINTRESOURCEを使うことになります。


最低限確認できることはしてから質問してほしいです。

RYU 2006/12/19(火) 11:49:19
[[解決]]
Blueさんご丁寧にありがとうございました。
参考のサイトみていたんですが「アイコン識別子に整数を使う」
が原因だったとは気がつかずかなかったです。すみません。
MAKEINTRESOURCE をつかうことで無事アイコン表示されるように
なりました。

皆様ありがとうございました。

古いスレッドには追加発言できません。