12,993
回編集
13行目: | 13行目: | ||
== 常駐ソフトウェア == | == 常駐ソフトウェア == | ||
==== タスクバーに非表示のウィンドウを作成する ==== | ==== タスクバーに非表示のウィンドウを作成する ==== | ||
<code>CDialog</code>派生クラスまたは<code>CView</code>派生クラスを継承したCTrayWndクラスに、ウインドウを作成するメソッドを記述する。<br> | |||
<br> | <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の<code>Shell_NotifyIcon</code>関数が行う。<br> | |||
<br> | |||
<code>Shell_NotifyIcon</code>関数の第1引数で、アイコンの登録・編集・削除を指定する。<br> | |||
<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> | |||
<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 | #define ID_ICON 100 | ||
#define WM_USER_TRAYNOTIFYICON | #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> |