wtl、mfc本质上和win32区别不大,按照其关键字搜索都能找到对应的win32函数。
wtl、mfc是对win32函数的hWnd封装,使用m_hWnd代替hWnd,win32函数和mfc函数对比,只是多了hWnd而已。将同功能的win32函数封装进一个类中。
1. 定义自定义消息(NOTIFYICON响应的消息):
#define WM_NOTIFYICON WM_USER + 0x9001
2. 在消息循环中加入
MESSAGE_HANDLER(WM_NOTIFYICON, OnIconNotification)
3.定义 NOTIFYICON 变量,声明响应的回调函数
NOTIFYICONDATA m_NotifyIconData;
LRESULT OnIconNotification(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
4. CMainFrame::OnCreate 函数中加入 初始化代码
m_NotifyIconData.cbSize = sizeof(NOTIFYICONDATA);
m_NotifyIconData.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_INFORMATION));
m_NotifyIconData.hWnd = m_hWnd;
m_NotifyIconData.uFlags = NIF_MESSAGE|NIF_TIP|NIF_ICON;
m_NotifyIconData.uID = 1;
m_NotifyIconData.uCallbackMessage = WM_NOTIFYICON;
_tcscpy_s(m_NotifyIconData.szTip,_T("Hello World"));
Shell_NotifyIcon(NIM_ADD, &m_NotifyIconData);
5. CMainFrame::OnDestroy
Shell_NotifyIcon(NIM_DELETE, &m_NotifyIconData);
6. CMainFrame::OnIconNotification
LRESULT CMainFrame::OnIconNotification(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if(wParam != m_NotifyIconData.uID)
{
return FALSE;
}
switch(lParam)
{
case WM_LBUTTONDOWN:
{
MessageBox(_T("Hello World"));
break;
}
}
return TRUE;
}