タスクトレイのアイコンについてなのですが
起動するとアイコンのスペースが空いてアイコンの絵は
表示されません。
リソーススクリプトは
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;
}
としています。
よろしくお願いします
LoadImage は間違いなく成功していますか?
まずはそこですね。
シャノンさん書き込みありがとうございます。
LoadImageが成功しているかどうか確認する方法
を教えていただけないでしょうか?
MSDNより
| 関数が成功すると、ロードされたイメージのハンドルが返ります。
| 関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、GetLastError
関数を使います。
明記されています。
質問する前に最低限の調査をしましょう。
keichanさん書き込みありがとうございます。
追加で↓やってみたのですがNULLが返ってるみたいで失敗となります。
HICON hIcon;
hIcon = (HICON)LoadImage(hInst, MYICON, IMAGE_ICON, 0, 0, 0);
if(hIcon == NULL) MessageBox(hWnd, 失敗, conhot ERROR, MB_OK);
確認の仕方はこれであっていますか?
とりあえず、その原因を GetLastError を使って確かめてください。
HICON hIcon = (HICON)LoadImage(hInst, MYICON, IMAGE_ICON, 0, 0, 0);
if(hIcon == NULL)
{
DWORD err = GetLastError();
.
.
.
}
どんなエラー内容なのかは ErrorLookup(VC6ならメニューのツールからエラー検索を選
択するとでる) や ウォッチ もしくは FormatMessage で確認してください。
if(hIcon == NULL)のところに
FormatMessageでやってみたところ
「指定されたリソースの種類がイメージファイルに見つかりません。」
というメッセージが表示されました。
Blueさん 書き込みありがとうございます。
>MYICON
は何処かで #define とかされていませんよね?
参考
http://wisdom.sakura.ne.jp/system/winapi/win32/win72.html
ちなみに、環境は必ず明記してください。
そうしないと、VSのバージョンでうまくいかないとかそういう問題があっても
見つけることができなくなりますので。
OS,VCのバージョン,プロジェクトの種類ぐらいは書いてください。
#define MYICON 100
としていますがこれが問題でしょうか?
>としていますがこれが問題でしょうか?
そうです。
参考のサイト見ましたか?
「アイコン識別子に整数を使う」のところを見ればわかると思いますが、
MAKEINTRESOURCEを使うことになります。
最低限確認できることはしてから質問してほしいです。
Blueさんご丁寧にありがとうございました。
参考のサイトみていたんですが「アイコン識別子に整数を使う」
が原因だったとは気がつかずかなかったです。すみません。
MAKEINTRESOURCE をつかうことで無事アイコン表示されるように
なりました。
皆様ありがとうございました。