當(dāng)前位置:
首頁(yè) >
VC创建系统托盘
發(fā)布時(shí)間:2024/4/11
54
豆豆
1.創(chuàng)建菜單資源? ID:? IDR_MENU_NOTIFY
??????????????? 添加子菜單? 顯示? IDM_NOTIFY_SHOW
??????????????????????????? 退出? IDM_NOTIFY_CLOSE
2.認(rèn)識(shí)一個(gè)API
??????? Shell_NotifyIcon
???????? BOOL Shell_NotifyIcon(??????????????????? //向系統(tǒng)托盤中加入圖標(biāo)
?????????????????????????? DWORD dwMessage,???????? //狀態(tài)????????? ?
?????????????????????????? PNOTIFYICONDATA lpdata?? //含有圖標(biāo)? 消息響應(yīng) 的一個(gè)結(jié)構(gòu)體
???????? );
?3.認(rèn)識(shí)NOTIFYICONDATA? 結(jié)構(gòu)體:
?????????? typedef struct _NOTIFYICONDATA {
??? DWORD cbSize;?????? //結(jié)構(gòu)體自身大小
??? HWND hWnd;????????? //托盤的父窗口? 托盤發(fā)出的消息由哪一個(gè)窗口響應(yīng)
??? UINT uID;?????????? //顯示圖標(biāo)的ID
??? UINT uFlags;???????? //托盤的狀態(tài) (如有圖標(biāo),有氣泡提示,有消息響應(yīng)等)
??? UINT uCallbackMessage; //托盤事件的消息響應(yīng)函數(shù)
??? HICON hIcon;??????????? //圖標(biāo)的變量
??? TCHAR szTip[64];??????? //氣泡的顯示文字
??? DWORD dwState;????????? //圖標(biāo)的顯示狀態(tài)
??? DWORD dwStateMask;????? //圖標(biāo)的顯示狀態(tài)
??? TCHAR szInfo[256];????? //氣泡的顯示文字? (可以忽略)
??? union {
??????? UINT uTimeout;
??????? UINT uVersion;
??? };
??? TCHAR szInfoTitle[64];
??? DWORD dwInfoFlags;
??? GUID guidItem;
??? HICON hBalloonIcon;
} NOTIFYICONDATA, *PNOTIFYICONDATA;
4.在oninitdialog函數(shù)中寫入加入系統(tǒng)脫盤的代碼:
??????? NOTIFYICONDATA nid; //這句話最好添加在頭文件里面
????? ?
??????? nid.cbSize = sizeof(nid);???? //大小賦值
?? ?nid.hWnd = m_hWnd;?????????? //父窗口
?? ?nid.uID = IDR_MAINFRAME;???? //icon? ID
?? ?nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;?? //托盤所擁有的狀態(tài)
?? ?nid.uCallbackMessage = UM_ICONNOTIFY;??????????? //回調(diào)消息
?? ?nid.hIcon = m_hIcon;??????????????????????????? //icon 變量
?? ?CString str="PCRemote遠(yuǎn)程協(xié)助軟件.........";?????? //氣泡提示
?? ?lstrcpyn(nid.szTip, (LPCSTR)str, sizeof(nid.szTip) / sizeof(nid.szTip[0]));
?? ?Shell_NotifyIcon(NIM_ADD, &nid);?? //顯示托盤
5.演示 ,在窗口銷毀時(shí)托盤依然存在
6.添加WM_CLOSE消息并寫入代碼:
????? Shell_NotifyIcon(NIM_DELETE, &nid); //銷毀圖標(biāo)
7.stdafx.h文件中加入自定義消息的定義
???? //自定義消息
enum
{
?? ?UM_ICONNOTIFY= WM_USER+0x100,
};
8.聲明消息處理函數(shù):
???? afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
9.? cpp文件中寫入代碼:
?????? void CPCRemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
{
?? ?switch ((UINT)lParam)
?? ?{
?? ?case WM_LBUTTONDOWN: // click or dbclick left button on icon
?? ?case WM_LBUTTONDBLCLK: // should show desktop
?? ??? ?if (!IsWindowVisible())
?? ??? ??? ?ShowWindow(SW_SHOW);
?? ??? ?else
?? ??? ??? ?ShowWindow(SW_HIDE);
?? ??? ?break;
?? ?case WM_RBUTTONDOWN: // click right button, show menu
?? ??? ?CMenu menu;
?? ??? ?menu.LoadMenu(IDR_MENU_NOTIFY);
?? ??? ?CPoint point;
?? ??? ?GetCursorPos(&point);
?? ??? ?SetForegroundWindow();
?? ??? ?menu.GetSubMenu(0)->TrackPopupMenu(
?? ??? ??? ?TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
?? ??? ??? ?point.x, point.y, this, NULL);
?? ??? ?PostMessage(WM_USER, 0, 0);
?? ??? ?break;
?? ?}
}
10.添加消息響應(yīng):
?? ?ON_MESSAGE(UM_ICONNOTIFY,OnIconNotify) ?
11.添加顯示菜單消息響應(yīng)
?? ?
1.創(chuàng)建菜單資源? ID:? IDR_MENU_NOTIFY
??????????????? 添加子菜單? 顯示? IDM_NOTIFY_SHOW
??????????????????????????? 退出? IDM_NOTIFY_CLOSE
2.認(rèn)識(shí)一個(gè)API
??????? Shell_NotifyIcon
???????? BOOL Shell_NotifyIcon(??????????????????? //向系統(tǒng)托盤中加入圖標(biāo)
?????????????????????????? DWORD dwMessage,???????? //狀態(tài)????????? ?
?????????????????????????? PNOTIFYICONDATA lpdata?? //含有圖標(biāo)? 消息響應(yīng) 的一個(gè)結(jié)構(gòu)體
???????? );
?3.認(rèn)識(shí)NOTIFYICONDATA? 結(jié)構(gòu)體:
?????????? typedef struct _NOTIFYICONDATA {
??? DWORD cbSize;?????? //結(jié)構(gòu)體自身大小
??? HWND hWnd;????????? //托盤的父窗口? 托盤發(fā)出的消息由哪一個(gè)窗口響應(yīng)
??? UINT uID;?????????? //顯示圖標(biāo)的ID
??? UINT uFlags;???????? //托盤的狀態(tài) (如有圖標(biāo),有氣泡提示,有消息響應(yīng)等)
??? UINT uCallbackMessage; //托盤事件的消息響應(yīng)函數(shù)
??? HICON hIcon;??????????? //圖標(biāo)的變量
??? TCHAR szTip[64];??????? //氣泡的顯示文字
??? DWORD dwState;????????? //圖標(biāo)的顯示狀態(tài)
??? DWORD dwStateMask;????? //圖標(biāo)的顯示狀態(tài)
??? TCHAR szInfo[256];????? //氣泡的顯示文字? (可以忽略)
??? union {
??????? UINT uTimeout;
??????? UINT uVersion;
??? };
??? TCHAR szInfoTitle[64];
??? DWORD dwInfoFlags;
??? GUID guidItem;
??? HICON hBalloonIcon;
} NOTIFYICONDATA, *PNOTIFYICONDATA;
4.在oninitdialog函數(shù)中寫入加入系統(tǒng)脫盤的代碼:
??????? NOTIFYICONDATA nid; //這句話最好添加在頭文件里面
????? ?
??????? nid.cbSize = sizeof(nid);???? //大小賦值
?? ?nid.hWnd = m_hWnd;?????????? //父窗口
?? ?nid.uID = IDR_MAINFRAME;???? //icon? ID
?? ?nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;?? //托盤所擁有的狀態(tài)
?? ?nid.uCallbackMessage = UM_ICONNOTIFY;??????????? //回調(diào)消息
?? ?nid.hIcon = m_hIcon;??????????????????????????? //icon 變量
?? ?CString str="PCRemote遠(yuǎn)程協(xié)助軟件.........";?????? //氣泡提示
?? ?lstrcpyn(nid.szTip, (LPCSTR)str, sizeof(nid.szTip) / sizeof(nid.szTip[0]));
?? ?Shell_NotifyIcon(NIM_ADD, &nid);?? //顯示托盤
5.演示 ,在窗口銷毀時(shí)托盤依然存在
6.添加WM_CLOSE消息并寫入代碼:
????? Shell_NotifyIcon(NIM_DELETE, &nid); //銷毀圖標(biāo)
7.stdafx.h文件中加入自定義消息的定義
???? //自定義消息
enum
{
?? ?UM_ICONNOTIFY= WM_USER+0x100,
};
8.聲明消息處理函數(shù):
???? afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
9.? cpp文件中寫入代碼:
?????? void CPCRemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
{
?? ?switch ((UINT)lParam)
?? ?{
?? ?case WM_LBUTTONDOWN: // click or dbclick left button on icon
?? ?case WM_LBUTTONDBLCLK: // should show desktop
?? ??? ?if (!IsWindowVisible())
?? ??? ??? ?ShowWindow(SW_SHOW);
?? ??? ?else
?? ??? ??? ?ShowWindow(SW_HIDE);
?? ??? ?break;
?? ?case WM_RBUTTONDOWN: // click right button, show menu
?? ??? ?CMenu menu;
?? ??? ?menu.LoadMenu(IDR_MENU_NOTIFY);
?? ??? ?CPoint point;
?? ??? ?GetCursorPos(&point);
?? ??? ?SetForegroundWindow();
?? ??? ?menu.GetSubMenu(0)->TrackPopupMenu(
?? ??? ??? ?TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
?? ??? ??? ?point.x, point.y, this, NULL);
?? ??? ?PostMessage(WM_USER, 0, 0);
?? ??? ?break;
?? ?}
}
10.添加消息響應(yīng):
?? ?ON_MESSAGE(UM_ICONNOTIFY,OnIconNotify) ?
11.添加顯示菜單消息響應(yīng)
?? ?
總結(jié)
- 上一篇: VS清理编译垃圾
- 下一篇: Windows系统程序设计之结构化异常处