【VC编程技巧】窗体☞3.7托盘程序介绍(模拟QQ消息)
2014-07-29 14:29
701 查看
所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序。代表它运行的图标称作托盘图标。我们可以通过使用小图标来控制应用程序的状态。
typedef struct _NOTIFYICONDATA {
DWORDcbSize;//结构体大小
HWNDhWnd;//接受icon消息的窗口句柄
UINT uID;//icon图标的资源Id
UINTuFlags;//标志一些成员是否有效
UINTuCallbackMessage;//自定义消息
HICONhIcon;//资源icon句柄
TCHARszTip[64];//鼠标移动到icon上,提示消息
DWORDdwState;//图标的状态
DWORDdwStateMask;//图标状态的有效
TCHARszInfo[256];//气泡消息
union {
UINTuTimeout;
UINTuVersion;
};
TCHARszInfoTitle[64];//气泡消息标题
DWORDdwInfoFlags;//气泡消息标志位
GUIDguidItem;//win7以前保留字段,以后标识icon的guid
HICONhBalloonIcon;//自定义气泡消息icon
} NOTIFYICONDATA, *PNOTIFYICONDATA;
参数
dwMessage:表示函数行为
NIM_ADD:表示添加icon到状态栏
NIM_DELETE:删除icon从状态栏
NIM_MODIFY:修改icon在状态栏
lpdata:上述结构体NOTIFYICONDATA
![](https://oscdn.geek-share.com/Uploads/Images/Content/201407/819ed550d1e84697e877bc45e56a328d)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201407/ee819957111a2578a4e5943f87563e91)
示例代码:
1.初始化函数OnInitDialog()中,初始化icon图标,添加icon到托盘中,设置定时期去更新托盘中的icon图标。
2.初始化icon图标函数,添加icon图标到托盘函数和更新icon图标函数
3.定时器相应函数
P.S文章示例代码:http://download.csdn.net/detail/chenjintaoxp/7693189
(一)NOTIFYICONDATA Structure
typedef struct _NOTIFYICONDATA {
DWORDcbSize;//结构体大小
HWNDhWnd;//接受icon消息的窗口句柄
UINT uID;//icon图标的资源Id
UINTuFlags;//标志一些成员是否有效
UINTuCallbackMessage;//自定义消息
HICONhIcon;//资源icon句柄
TCHARszTip[64];//鼠标移动到icon上,提示消息
DWORDdwState;//图标的状态
DWORDdwStateMask;//图标状态的有效
TCHARszInfo[256];//气泡消息
union {
UINTuTimeout;
UINTuVersion;
};
TCHARszInfoTitle[64];//气泡消息标题
DWORDdwInfoFlags;//气泡消息标志位
GUIDguidItem;//win7以前保留字段,以后标识icon的guid
HICONhBalloonIcon;//自定义气泡消息icon
} NOTIFYICONDATA, *PNOTIFYICONDATA;
(二)函数:BOOLShell_NotifyIcon(DWORD dwMessage,
PNOTIFYICONDATA lpdata);
参数
dwMessage:表示函数行为
NIM_ADD:表示添加icon到状态栏
NIM_DELETE:删除icon从状态栏
NIM_MODIFY:修改icon在状态栏
lpdata:上述结构体NOTIFYICONDATA
(三)模拟QQ消息示例
示例代码:
1.初始化函数OnInitDialog()中,初始化icon图标,添加icon到托盘中,设置定时期去更新托盘中的icon图标。
// CTrayProgramDlg 消息处理程序 BOOL CTrayProgramDlg::OnInitDialog() { ... // TODO: 在此添加额外的初始化代码 //初始化icon信息 InitIcon(); //应用程序添加到托盘 AddToTray(); //设置并启动定时器 SetTimer(1, 500, NULL); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
2.初始化icon图标函数,添加icon图标到托盘函数和更新icon图标函数
void CTrayProgramDlg::InitIcon(void) { m_isUpadate = 0x00; m_hIcon1 = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1)); } //添加icon到托盘 void CTrayProgramDlg::AddToTray(void) { ZeroMemory(&m_nid, sizeof(m_nid)); m_nid.cbSize = sizeof(NOTIFYICONDATA); m_nid.hWnd = m_hWnd; m_nid.uID = IDI_ICON1; m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP|NIF_INFO; m_nid.uCallbackMessage = WM_TRAYNOTIFY; m_nid.hIcon = m_hIcon1; m_nid.dwInfoFlags = NIIF_INFO; m_nid.uVersion = NOTIFYICON_VERSION_4; lstrcpy(m_nid.szTip, _T("心")); lstrcpy(m_nid.szInfo, _T("愿得一人心,白首不相离!")); lstrcpy(m_nid.szInfoTitle, _T("白头吟")); //在托盘添加图标 Shell_NotifyIcon(NIM_ADD, &m_nid); } //更新托盘icon void CTrayProgramDlg::UpdateIcon(void) { m_nid.uFlags = NIF_ICON; Shell_NotifyIcon(NIM_MODIFY, &m_nid); }
3.定时器相应函数
void CTrayProgramDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 if (nIDEvent == 1) { if (m_isUpadate ^= 0x01 ) { //将图标句柄设为0 m_nid.hIcon = 0; } else { //将图标句柄还原 m_nid.hIcon = m_hIcon1; } //更新icon图标 UpdateIcon(); } CDialogEx::OnTimer(nIDEvent); }
P.S文章示例代码:http://download.csdn.net/detail/chenjintaoxp/7693189
相关文章推荐
- 【VC编程技巧】窗体☞3.3利用CPropertySheet制作向导(或安装程序)
- 【VC编程技巧】窗体☞3.5对单文档或者多文档程序制作启动画面
- 【VC编程技巧】窗体☞3.1利用字体对话框和颜色对话框改变静态标签中字体颜色背景.
- VC编程制作系统托盘程序zz
- VC编程制作系统托盘程序
- C++MFC编程笔记day01 MFC介绍、创建MFC程序和重写消息处理
- VC编程制作系统托盘程序
- 【VC编程】笔记2--SDK编程的模板程序/MFC消息映射机制的本质解析
- C++MFC编程笔记day01 MFC介绍、创建MFC程序和重写消息处理
- VC编程制作系统托盘程序 - 任务栏
- VC编程制作系统托盘程序
- 模拟QQ聊天程序_服务器端_网络编程
- 【VC编程技巧】窗体☞3.8静态窗口分割
- vc给别的程序窗体上的按钮发送消息
- VC编程制作系统托盘程序zz
- 【VC编程技巧】窗体☞3.2利用CPropertySheet制作设置工具.
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
- VC编程制作系统托盘程序
- 【VC编程技巧】窗体☞3.6以渐变效果载入对话框
- 【VC编程技巧】窗体☞3.4利用bitmap改变对话框的背景。