dポイントプレゼントキャンペーン実施中!

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

Visual Studio 2005を使っています。

A 回答 (2件)

 こんばんは。

補足頂きました。
 Shell_NotifyIconで出来るそうです。

 http://msdn.microsoft.com/en-us/library/bb762159 …
 http://msdn.microsoft.com/ja-jp/library/cc440880 …

 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);;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/04/04 23:14

 こんばんは。


 リソースファイルを使用しないと言うのは、RCファイルを使用しないと言う事でしょうか。 
 普通にアイコンファイルを読み込んで、ウィンドウに向かって設定すれば出来る筈です。

(1)ファイルからアイコンを読み込む場合はLoadImage()を使用します
//http://msdn.microsoft.com/ja-jp/library/cc364835 …
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 …
HICON hIcon = ::CreateIconIndirect(&iconInfo);

//作成元になったビットマップは消去しなければならない
::DeleteObject(iconInfo.hbmColor);
::DeleteObject(iconInfo.hbmMask);

(3)アイコンを設定するには以下を使用します
//http://msdn.microsoft.com/en-us/library/ms632643 …
HICON hIconPrev = (HICON)::SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);

この回答への補足

また答えて頂きありがとうございます。

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

補足日時:2009/04/04 19:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!