• ベストアンサー

タスクバーのアイコンについて

Win32 APIで、タスクバーにアイコンを表示させるプログラムで、 リソースファイルを使わずに出来ますか。 出来るなら、どうすれば出来るんでしょうか。 Visual Studio 2005を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 こんばんは。補足頂きました。  Shell_NotifyIconで出来るそうです。  http://msdn.microsoft.com/en-us/library/bb762159(VS.85).aspx  http://msdn.microsoft.com/ja-jp/library/cc440880.aspx  Shell_NotifyIconで検索すると、使用例が沢山出て来ますので、其方を参照された方が手っ取り早いかもしれません。  一応当方からもサンプルを出させて頂きます。ウィンドウのクライアント領域を左クリックしてタスクアイコン化、タスクアイコン中に左クリックでウィンドウへ戻します。  以下参考程度に。 //タスクアイコン中に送られるメッセージ const DWORD WM_ICONTRAY = WM_USER + 1; //hWndをタスクアイコンに追加する static VOID AddTaskBar(HWND hWnd) { NOTIFYICONDATA nid = {sizeof(nid)}; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.hWnd = hWnd; nid.uCallbackMessage = WM_ICONTRAY; nid.hIcon = ::LoadIcon(NULL, IDI_WINLOGO); ::_tcscpy(nid.szTip, TEXT("タスク化テスト")); ::Shell_NotifyIcon(NIM_ADD, &nid); } //hWndをタスクアイコンから外す static VOID RemoveTaskBar(HWND hWnd) { NOTIFYICONDATA nid = {sizeof(nid)}; nid.hWnd = hWnd; ::Shell_NotifyIcon(NIM_DELETE, &nid); } //ウィンドウプロシージャ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { //クライアント領域が左クリックされた case WM_LBUTTONDOWN: //自分を隠して ::ShowWindow(hWnd, SW_HIDE); //タスクアイコンへ追加する ::AddTaskBar(hWnd); return 0; //タスクアイコン中にクリックされた case WM_ICONTRAY: switch(lParam) { case WM_LBUTTONDOWN: //自分を表示して ::ShowWindow(hWnd, SW_SHOW); //タスクアイコンから外す ::RemoveTaskBar(hWnd); } return 0; } return ::DefWindowProc(hWnd, msg, wParam, lParam);; }

noname#154655
質問者

お礼

出来ました。 何度もありがとうございます。 サンプルがあったので出来ました。 リンクのサンプルはVBで色々書いてあって私は分からなかったので、 サンプルがあって助かりました。

その他の回答 (1)

回答No.1

 こんばんは。  リソースファイルを使用しないと言うのは、RCファイルを使用しないと言う事でしょうか。   普通にアイコンファイルを読み込んで、ウィンドウに向かって設定すれば出来る筈です。 (1)ファイルからアイコンを読み込む場合はLoadImage()を使用します //http://msdn.microsoft.com/ja-jp/library/cc364835.aspx HICON hIcon = (HICON)::LoadImage(NULL, TEXT("icon.ico"), IMAGE_ICON, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE); (2)プログラム内で作成する場合はCreateIconIndirect()等を使用します。以下は真っ黒なアイコンを作成します HDC hDC = ::GetDC(hWnd); ICONINFO iconInfo = {TRUE}; iconInfo.hbmColor = ::CreateCompatibleBitmap(hDC, 16, 16);//カラーイメージ iconInfo.hbmMask = ::CreateCompatibleBitmap(hDC, 16, 16);//マスクイメージ ::ReleaseDC(hWnd, hDC); //アイコンの作成 //http://msdn.microsoft.com/ja-jp/library/cc410704.aspx HICON hIcon = ::CreateIconIndirect(&iconInfo); //作成元になったビットマップは消去しなければならない ::DeleteObject(iconInfo.hbmColor); ::DeleteObject(iconInfo.hbmMask); (3)アイコンを設定するには以下を使用します //http://msdn.microsoft.com/en-us/library/ms632643.aspx HICON hIconPrev = (HICON)::SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);

noname#154655
質問者

補足

また答えて頂きありがとうございます。 アイコンは表示されたのですが、 常駐ソフトにあるようなタスクバーの右側に 表示されるアイコンのようにしたいのですが、 どうすればいいのでしょうか。

関連するQ&A