C++ Builder Tips


タスクトレイに入れる


タスクトレイに入れるには以下の手順を踏みます。

1.Form1のヘッダ内にイベントハンドラを登録します。

2.Form1内の適当な場所(FormCrateなど)でタスクトレイに登録します。

3.タスクトレイから削除(FormClose)をなどに記述します。

4.イベントハンドラ関数の中身を記述します。

注意点としては、SetForgroundWindowをポップアップの処理の前に呼び出して、ポップアップのほうにフォーカスが移るようにしているところです。こうしておくとフォーカスが移る前にポップアップしてしまうのを防げます。
Windows2000/XPで実行するときは、SetForegroundWindowの実行時にスレッドをアタッチする必要があります。

// Header File
// Form1.h

private: // ユーザー宣言
void __fastcall TForm1::MYWMTaskbarIconNotify(Messages::TMessage& Message);

//メッセージハンドラの登録
#define MYWM_TASKBARICONNOTIFY (WM_USER+120)
BEGIN_MESSAGE_MAP
MESSAGE_HANdlER(MYWM_TASKBARICONNOTIFY,TMessage,MYWMTaskbarIconNotify);
END_MESSAGE_MAP(TComponent)

NOTIFYICONDATA pNotifyIconData; // タスクトレイ登録用

// cpp File
// Form1.cpp

pNotifyIconData.cbSize = sizeof(NOTIFYICONDATA);
pNotifyIconData.hWnd = Form1->Handle;
//uIDはアプリケーションで複数のアイコンをタスクトレイに登録するときの識別に使用
pNotifyIconData.uID = 100; 
pNotifyIconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
pNotifyIconData.uCallbackMessage = MYWM_TASKBARICONNOTIFY;
//イベントハンドラの名前
pNotifyIconData.hIcon = Application->Icon->Handle;
//タスクトレイにアイコンを登録
strcpy(pNotifyIconData.szTip,"MyApplication");
Shell_NotifyIcon(NIM_ADD,&pNotifyIconData);
//登録
ShowWindow(Application->Handle,SW_HIDE);
// タスクバーから隠す

Shell_NotifyIcon(NIM_DELETE,&pNotifyIconData);

void __fastcall TForm1::MYWMTaskbarIconNotify(Messages::TMessage& Message)
{
 POINT p;
 GetCursorPos(&p);
 if(Message.WParam == 1){ //設定したuID
     switch(Message.LParam){
         case WM_LBUTTONDBLCLK: //左ボタンダブルクリック
             Application->Restore();
             SetForegroundWindow(fMain->Handle);
             break;
         case WM_RBUTTONDOWN: //右ボタンクリック
             SetForegroundWindow(fMain->Handle);
             if(bCanPopup)pmTaskTray->Popup(p.x,p.y);
             break;
     }
 }
 TForm::Dispatch(&Message); //タスクトレイ以外のメッセージをTFormの処理関数に戻す
}


目次に戻る
Copyright(c) 2008 WoodenSoldier Software