如何实现像qq那样,在托盘区闪动图标,并响应鼠标双击? 我在弄一个客户端程序,想实现像qq那样有陌生人请求加为好友时候,在托盘区闪动图标,并响应鼠标双击事件,不知如何实现,请各位大侠指点!谢了,先! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 添加托盘图标m_tnid.cbSize = sizeof(NOTIFYICONDATA);m_tnid.hWnd = this->GetSafeHwnd();m_tnid.uID = IDR_MAINFRAME; //图标的IDm_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;m_tnid.uCallbackMessage = WM_NOTIFYICON; //自定义通告消息strcpy(m_tnid.szTip, "应用程序名称...");m_tnid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //使用程序图标Shell_NotifyIcon(NIM_ADD, &m_tnid);删除图标m_tnid.cbSize = sizeof(NOTIFYICONDATA);m_tnid.hWnd = this->GetSafeHwnd();Shell_NotifyIcon(NIM_DELETE, &m_tnid);添加消息响应ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)LRESULT CMainDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam){ UINT uMouseMsg = (UINT)lParam; switch(uMouseMsg) { case WM_LBUTTONDBCLK: //左键双击 break; case WM_LBUTTONDOWN: //左键单击 break; case WM_RBUTTONUP: //右键单击 break; default: break; } return 0;}闪动图标就是用定时器不停的换图标 托盘使用函数Shell_NotifyIcon楼上是正解 单托盘显示图标1的时候 显示出窗体 this->ShowWindow();单托盘显示图标2的时候 MessageBox(“大幅得分”);楼上只能实现托盘打开缩小和关闭窗体吧 托盘编程http://www.vckbase.com/document/viewdoc/?id=492http://www.vckbase.com/document/viewdoc/?id=495http://www.vckbase.com/document/viewdoc/?id=498闪动:无非就是用个定时器来循环设置不同的图标而已。 这样修改图标都不行void CAtaDlg::OnButton1() { nid.uID=IDI_ICON1;//加载另一个图标资源 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); Shell_NotifyIcon(NIM_MODIFY,&nid);//修改托盘图标 }void CAtaDlg::toTray(){ nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_SHOWTASK; nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip,"这是个测试程序"); Shell_NotifyIcon(NIM_ADD,&nid); // 在托盘区添加图标 } 托盘:#define WM_TRARMESSAGE 201NOTIFYICONDATA m_traydata;//成员变量m_traydata.cbSize = sizeof(NOTIFYICONDATA);m_traydata.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_traydata.hWnd = m_hWnd;char *m_str = "系统管理";strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen +1表示将空字符拷贝到目标字符串中m_traydata.uCallbackMessage = WM_TRARMESSAGE;m_traydata.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam);void XXX::OnTrayMessage(WPARAM wParam, LPARAM lParam){ if (lParam == WM_LBUTTONDBLCLK) { ShowWindow(SW_RESTORE); } else if (lParam == WM_RBUTTONDOWN) { CPoint m_point; ::GetCursorPos(&m_point); CMenu m_popmenu; m_popmenu.LoadMenu(IDR_MAINFRAME);//菜单ID CMenu* m_submenu = m_popmenu.GetSubMenu(0); m_submenu->TrackPopupMenu(TPM_LEFTBUTTON |TPM_LEFTALIGN ,m_point.x,m_point.y,this); } }响应WM_SYSCOMMANDvoid XXXX::OnSysCommand(UINT nID, LPARAM lParam) { // TODO: Add your message handler code here and/or call default if ((nID & 0xFFF0) == SC_MINIMIZE )//最小化 { ShowWindow(SW_HIDE); Shell_NotifyIcon(NIM_ADD,&m_traydata);//添加系统托盘 return; } 。。 } 单托盘显示图标1的时候 显示出窗体 this->ShowWindow(); 单托盘显示图标2的时候 MessageBox(“大幅得分”); 想实现上面功能要代码的找我 466191942 动态创建的CStatic如何使其自适应文字长度? 很古怪, combobox 默认值已设置却无法显示 请教个向active传送字符串的问题 VC 浮动工具栏位置调整的问题 急救!!!!关于鼠标右击RichTextBox控件的问题 下面的接口该怎么定义? 如何从SqlServer中导入数据到excel 中软信息安全实验室招聘英才 有关vc++ 在线等待:有分! 如何检查是那一句出现了内存泄露? VCReleast版本没办法在没装VC环境下运行
添加托盘图标
m_tnid.cbSize = sizeof(NOTIFYICONDATA);
m_tnid.hWnd = this->GetSafeHwnd();
m_tnid.uID = IDR_MAINFRAME; //图标的ID
m_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
m_tnid.uCallbackMessage = WM_NOTIFYICON; //自定义通告消息
strcpy(m_tnid.szTip, "应用程序名称...");
m_tnid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //使用程序图标
Shell_NotifyIcon(NIM_ADD, &m_tnid);删除图标
m_tnid.cbSize = sizeof(NOTIFYICONDATA);
m_tnid.hWnd = this->GetSafeHwnd();
Shell_NotifyIcon(NIM_DELETE, &m_tnid);添加消息响应
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)LRESULT CMainDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
UINT uMouseMsg = (UINT)lParam; switch(uMouseMsg)
{
case WM_LBUTTONDBCLK: //左键双击
break;
case WM_LBUTTONDOWN: //左键单击
break;
case WM_RBUTTONUP: //右键单击
break;
default:
break;
} return 0;
}闪动图标就是用定时器不停的换图标
楼上是正解
单托盘显示图标2的时候 MessageBox(“大幅得分”);楼上只能实现托盘打开缩小和关闭窗体吧
http://www.vckbase.com/document/viewdoc/?id=492
http://www.vckbase.com/document/viewdoc/?id=495
http://www.vckbase.com/document/viewdoc/?id=498
闪动:无非就是用个定时器来循环设置不同的图标而已。
void CAtaDlg::OnButton1()
{
nid.uID=IDI_ICON1;//加载另一个图标资源
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
Shell_NotifyIcon(NIM_MODIFY,&nid);//修改托盘图标 }void CAtaDlg::toTray()
{
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"这是个测试程序");
Shell_NotifyIcon(NIM_ADD,&nid); // 在托盘区添加图标
}
#define WM_TRARMESSAGE 201NOTIFYICONDATA m_traydata;//成员变量
m_traydata.cbSize = sizeof(NOTIFYICONDATA);
m_traydata.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_traydata.hWnd = m_hWnd;
char *m_str = "系统管理";
strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen +1表示将空字符拷贝到目标字符串中
m_traydata.uCallbackMessage = WM_TRARMESSAGE;
m_traydata.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam);
void XXX::OnTrayMessage(WPARAM wParam, LPARAM lParam)
{
if (lParam == WM_LBUTTONDBLCLK)
{
ShowWindow(SW_RESTORE);
}
else if (lParam == WM_RBUTTONDOWN)
{
CPoint m_point;
::GetCursorPos(&m_point);
CMenu m_popmenu;
m_popmenu.LoadMenu(IDR_MAINFRAME);//菜单ID
CMenu* m_submenu = m_popmenu.GetSubMenu(0);
m_submenu->TrackPopupMenu(TPM_LEFTBUTTON |TPM_LEFTALIGN ,m_point.x,m_point.y,this);
} }
响应WM_SYSCOMMAND
void XXXX::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: Add your message handler code here and/or call default
if ((nID & 0xFFF0) == SC_MINIMIZE )//最小化
{
ShowWindow(SW_HIDE);
Shell_NotifyIcon(NIM_ADD,&m_traydata);//添加系统托盘
return;
} 。。
}
单托盘显示图标2的时候 MessageBox(“大幅得分”);
想实现上面功能要代码的找我 466191942