「MFCの基礎 - 常駐ソフトウェア」の版間の差分

ナビゲーションに移動 検索に移動
13行目: 13行目:
== 常駐ソフトウェア ==
== 常駐ソフトウェア ==
==== タスクバーに非表示のウィンドウを作成する ====
==== タスクバーに非表示のウィンドウを作成する ====
CDialog派生クラスまたはCView派生クラスを継承したCTrayWndクラスに、ウインドウを作成するメソッドを記述する。<br>
<code>CDialog</code>派生クラスまたは<code>CView</code>派生クラスを継承したCTrayWndクラスに、ウインドウを作成するメソッドを記述する。<br>
<br>
<br>
タスクバーに非表示のウィンドウを作成するため、Createメソッドを使用して、拡張ウィンドウスタイルとしてWS_EX_TOOLWINDOWを指定する。<br>
タスクバーに非表示のウィンドウを作成するため、Createメソッドを使用して、拡張ウィンドウスタイルとして<code>WS_EX_TOOLWINDOW</code>を指定する。<br>
ウィンドウを非表示にするため、ウィンドウの幅・高さを0にする。<br>
ウィンドウを非表示にするため、ウィンドウの幅・高さを0にする。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
52行目: 52行目:
<br>
<br>
==== タスクトレイにアイコン・ツールチップ・コールバックを登録・変更・削除する ====
==== タスクトレイにアイコン・ツールチップ・コールバックを登録・変更・削除する ====
上記で作成したCTrayWndクラスに、タスクトレイにアイコンを登録・変更・削除するメソッドを記述する。
上記で作成したCTrayWndクラスに、タスクトレイにアイコンを登録・変更・削除するメソッドを記述する。<br>
このメソッドは、最終的には、Win32APIのShell_NotifyIcon関数が行う。
このメソッドは、最終的には、Win32APIの<code>Shell_NotifyIcon</code>関数が行う。<br>
 
<br>
Shell_NotifyIcon関数の第1引数で、アイコンの登録・編集・削除を指定する。
<code>Shell_NotifyIcon</code>関数の第1引数で、アイコンの登録・編集・削除を指定する。<br>
Shell_NotifyIcon関数の第2引数のNOTIFYICONDATA構造体において、アイコン、ツールチップ文字列、コールバックを指定する。
<code>Shell_NotifyIcon</code>関数の第2引数の<code>NOTIFYICONDATA</code>構造体において、アイコン、ツールチップ文字列、コールバックを指定する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  BOOL CTrayWnd::NotifyIcon( DWORD dwMessage, HICON hIcon, LPCTSTR pszTip /*= NULL*/ )
  BOOL CTrayWnd::NotifyIcon( DWORD dwMessage, HICON hIcon, LPCTSTR pszTip /*= NULL*/ )
100行目: 100行目:
<br>
<br>
TrayWnd.cppファイルのヘッダ部に、ID_ICONおよびWM_USER_TRAYNOTIFYICONの定義を記述する。<br>
TrayWnd.cppファイルのヘッダ部に、ID_ICONおよびWM_USER_TRAYNOTIFYICONの定義を記述する。<br>
CTrayWndクラスのコンストラクタに、m_hIcon_currentメンバ変数の初期化処理を記述する。<br>
CTrayWndクラスのコンストラクタに、メンバ変数m_hIcon_currentの初期化処理を記述する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  // TrayWnd.cpp : 実装ファイル
  // TrayWnd.cpp
//
   
   
  #include "stdafx.h"
  #include "stdafx.h"
109行目: 108行目:
  #include "TrayWnd.h"
  #include "TrayWnd.h"
   
   
  #define ID_ICON (100)
  #define ID_ICON                 100
  #define WM_USER_TRAYNOTIFYICON (WM_APP+100)
  #define WM_USER_TRAYNOTIFYICON WM_APP + 100
   
   
  IMPLEMENT_DYNAMIC(CTrayWnd, CWnd)
  IMPLEMENT_DYNAMIC(CTrayWnd, CWnd)
133行目: 132行目:
     public:
     public:
       BOOL Create();
       BOOL Create();
       BOOL NotifyIcon( DWORD dwMessage, HICON hIcon, LPCTSTR pszTip = NULL );
       BOOL NotifyIcon(DWORD dwMessage, HICON hIcon, LPCTSTR pszTip = NULL);
       BOOL NotifyIcon( DWORD dwMessage, HICON hIcon, UINT nStringResource );
       BOOL NotifyIcon(DWORD dwMessage, HICON hIcon, UINT nStringResource);
   
   
       DECLARE_DYNAMIC(CTrayWnd)
       DECLARE_DYNAMIC(CTrayWnd)
339行目: 338行目:
       afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
       afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  };
  };
</syntaxhighlight>
<br>
==== ウィンドウの作成および破棄におけるアイコンの登録・削除 ====
CTrayWndクラスのコンストラクタに、メンバ変数m_hIcon_mainの初期化処理を記述する。<br>
CTrayWndクラスに、<code>WM_CREATE</code>、<code>WM_DESTROY</code>メッセージに対応するイベントハンドラを記述する。<br>
<syntaxhighlight lang="c++">
// TrayWnd.cpp
#include "stdafx.h"
#include "MyApplication.h"
#include "TrayWnd.h"
#include "AboutDlg.h"
IMPLEMENT_DYNAMIC(CMyApplicationTrayWnd, CTrayWnd)
CTrayWnd::CTrayWnd() : m_hIcon_main(NULL)
{
    // ...略
}
// ...略
int CTrayWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if(CWnd::OnCreate(lpCreateStruct) == -1)
    {
      return -1;
    }
    // TODO:  ここに特定な作成コードを追加してください。
    m_hIcon_main = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    NotifyIcon(NIM_ADD, m_hIcon_main, _T("MyApplication"));
    return 0;
}
void CTrayWnd::OnDestroy()
{
    CWnd::OnDestroy();
    // TODO: ここにメッセージ ハンドラ コードを追加します。
    NotifyIcon( NIM_DELETE, NULL );
}
</syntaxhighlight>
<br>
TrayWnd.hファイルに、メンバ変数m_hIcon_mainの宣言を記述する。<br>
<syntaxhighlight lang="c++">
// TrayWnd.h
#pragma once
class CTrayWnd : public CWnd
{
    private:
      HICON m_hIcon_main;
    protected:
      void LButtonClick();
      void RButtonClick();
      void LButtonDoubleClick();
      DECLARE_DYNAMIC(CTrayWnd)
    // ...略
}
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー