win32アプリケーションで常駐型のアプリを作成しているのですが、
int MyInitNotifyIcon(HWND hWnd)
{
memset(&ni, 0, sizeof(NOTIFYICONDATA));
ni.cbSize = sizeof(NOTIFYICONDATA);
ni.hWnd = hWnd;
ni.uID = ID_MYTRAY;
ni.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
ni.hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON, 16, 16, 0);
ni.uCallbackMessage =MYTRAY_MESSAGE;
lstrcpy(ni.szTip, TEXT("UJ"));
Shell_NotifyIcon(NIM_ADD, &ni);
bTray = true;
return 0;
}
のように記述して起動時にこの関数を呼んでいるのですが、
アイコンが正しく表示されません。
アイコンファイルをいろいろ変えてみても、
・領域のみできているがアイコンが表示されない
・三角の黄色いアイコンが表示される
・?の青いアイコンが表示される
のいづれかの状態になっています。
どこが原因なのかわからず途方にくれております。
ご指南いただけますでしょうか?
アイコンは、LoadOmageではなく、LoadIconを使うのでは?
ni.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
私はこれでうまくいっています。
ちなみに、環境はきちんと書いた方がいいと思います。
OSは?VC++のバージョンは?MFC?SDK?etc.・・・
LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
を使っても?の青いアイコンが表示されてしまいました。
環境ですが、
VISTA VC++2008
MFCではないので、SDKだと思います。
dora→どら(変換忘れ^^;)です。
えと、リソースでちゃんとアイコンファイルを読み込んでいますか?
おそらく、指定されているIDI_ICON1が空のアイコンなのでは?
Express Editionでないのであれば、リソースエディタからアイコンを追加して、そのリソースIDでLoadIconしてください。
Express Editionの場合は・・・たしかリソースファイルを直接編集だったかな?
スミマセン、ちょっと覚えてません^^;
Express Editionではありません。
リソースファイルを追加し、新しいアイコンを作成。
仮で真黒なアイコンを作っても、?の青いアイコンが表示されてしまいます。
一度以下の手順を試してみてください。
1.適当なアイコンファイルを入手。
2.リソースエディタから1で入手したアイコンを追加
3.2で取り込んだアイコンのIDで、LoadIcon
これでそのアイコンが表示されたら、アイコン側の問題かと。
hInstの値がおかしかったようです。
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
BOOL bRet;
hIcon = LoadIcon(hCurInst, MAKEINTRESOURCE(IDI_ICON1));
if(!InitApp(hCurInst))
return false;
if(!InitInstance(hCurInst, nCmdShow))
return false;
while((bRet = GetMessage(&msg, NULL, 0, 0) != 0))
{
if(bRet == -1)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
int MyInitNotifyIcon(HWND hWnd)
{
memset(&ni, 0, sizeof(NOTIFYICONDATA));
ni.cbSize = sizeof(NOTIFYICONDATA);
ni.hWnd = hWnd;
ni.uID = ID_MYTRAY;
ni.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
ni.hIcon = hIcon;
ni.uCallbackMessage =MYTRAY_MESSAGE;
lstrcpy(ni.szTip, TEXT("UJ"));
Shell_NotifyIcon(NIM_ADD, &ni);
bTray = true;
return 0;
}
と記述したらうまく表示できました。
お手数おかけしました。
ありがとうございました。
ツイート | ![]() |