MFCの基礎 - 常駐ソフトウェア

2021年7月20日 (火) 17:28時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == タスクトレイに常駐するソフトウェアを開発する手順を記載する。<br> <br> 常駐ソフトウェアを開発するには、ソフト…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

タスクトレイに常駐するソフトウェアを開発する手順を記載する。

常駐ソフトウェアを開発するには、ソフトウェアのメインウィンドウとして登録するウィンドウクラスに、以下の処理を記述する。

  1. タスクバーに非表示のウィンドウを作成する。
  2. ウィンドウを破棄する時、ウィンドウクラスのオブジェクトが自身のオブジェクトを削除する。
  3. タスクトレイに対して、アイコン、ツールチップ文字列、コールバックを登録・変更・削除する。
  4. タスクトレイのアイコンに対するイベントの応答。
  5. ウィンドウを作成する時、タスクトレイに対してアイコンを登録する処理を呼び出す。
  6. ウィンドウを破棄する時、タスクトレイに対してアイコンを削除する処理を呼び出す。



常駐ソフトウェア

タスクバーに非表示のウィンドウを作成する

CView派生クラスを継承したCTrayWndクラスに、ウインドウを作成するメソッドを記述する。

タスクバーに非表示のウィンドウを作成するため、Createメソッドを使用して、拡張ウィンドウスタイルとしてWS_EX_TOOLWINDOWを指定する。
ウィンドウを非表示にするため、ウィンドウの幅・高さを0にする。

 BOOL CTrayWnd::Create()
 {
    return CreateEx(WS_EX_TOOLWINDOW, AfxRegisterWndClass(0), _T("TrayWnd"), WS_OVERLAPPED, 0, 0, 0, 0, NULL, NULL);
 }


CTrayWndクラスに、Createメソッドの宣言を追加する。

 #pragma once
 
 class CTrayWnd : public CWnd
 {
    public:
       BOOL Create();
 
    DECLARE_DYNAMIC(CTrayWnd)
 
    // ...略
 }


ウィンドウを破棄する時にウィンドウクラスが自身のオブジェクトを削除する

CTrayWndクラスに、PostNcDestroyメソッドを追加して、自身のオブジェクトを削除する処理を記述する。

 void CTrayWnd::PostNcDestroy()
 {
    // TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
    CWnd::PostNcDestroy();
 
    delete this;
 }