■ITaskbarListによるタスクバーへのウィンドウの登録・削除を行う関数
タスクバーにウィンドウを登録する関数
/**
* タスクバーにウィンドウを登録する
* @param hnd ウィンドウハンドル
*/
void AddTaskBarBtn(HWND hnd)
{
ITaskbarList* TaskbarList;
CoCreateInstance(CLSID_TaskbarList,
0,
CLSCTX_INPROC_SERVER,
IID_ITaskbarList,
(void**)&TaskbarList);
//タスクバーリストオブジェクトを初期化する
TaskbarList->HrInit();
//タスクバーにウィンドウを登録する
TaskbarList->AddTab(hnd);
//アクティブにする
TaskbarList->ActivateTab(hnd);
}
タスクバーからウィンドウを削除する関数
/**
* タスクバーからウィンドウを削除する
* @param hnd ウィンドウハンドル
*/
void DelTaskBarBtn(HWND hnd)
{
ITaskbarList* TaskbarList;
CoCreateInstance(CLSID_TaskbarList,
0,
CLSCTX_INPROC_SERVER,
IID_ITaskbarList,
(void**)&TaskbarList);
//タスクバーリストオブジェクトを初期化する
TaskbarList->HrInit();
//タスクバーから項目を削除する
TaskbarList->DeleteTab(hnd);
}
■サンプルプログラム
メインフォームでサブウィンドウを表示するようにします。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
(new TForm2(this))->Show();
}
サブフォームのOnActiveOnイベントでAddTaskBarBtn関数を実行すると、サブウィンドウをタスクバーに表示することができます。
static int i = 2;
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Caption = IntToStr(i++);
}
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
void __fastcall TForm2::FormActivate(TObject *Sender)
{
AddTaskBarBtn(this->Handle);
}
さらにOnDeactivateイベントでDelTaskBarBtn関数を実行すると、サブウィンドウの中でアクティブなウィンドウだけをタスクバーに表示できます。
static int i = 2;
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Caption = IntToStr(i++);
}
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
void __fastcall TForm2::FormActivate(TObject *Sender)
{
AddTaskBarBtn(this->Handle);
}
void __fastcall TForm2::FormDeactivate(TObject *Sender)
{
DelTaskBarBtn(this->Handle);
}
すごく役に立ちました!