【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)
2020-12-13 05:37
标签:tray icon 所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序。代表它运行的图标称作托盘图标。我们可以通过使用小图标来控制应用程序的状态。 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 示例代码: 1.初始化函数OnInitDialog()中,初始化icon图标,添加icon到托盘中,设置定时期去更新托盘中的icon图标。
2.初始化icon图标函数,添加icon图标到托盘函数和更新icon图标函数
3.定时器相应函数
【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息),搜素材,soscw.com 【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息) 标签:tray icon 原文地址:http://blog.csdn.net/chen_jint/article/details/38268795(一)NOTIFYICONDATA Structure
(二)函数:BOOLShell_NotifyIcon(DWORD dwMessage,
PNOTIFYICONDATA lpdata);
(三)模拟QQ消息示例
// CTrayProgramDlg 消息处理程序
BOOL CTrayProgramDlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
//初始化icon信息
InitIcon();
//应用程序添加到托盘
AddToTray();
//设置并启动定时器
SetTimer(1, 500, NULL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
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);
}
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);
}
文章标题:【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)
文章链接:http://soscw.com/essay/31363.html