像qq一样变换图标
//成员
BOOL m_bStatus;//图标状态
UINT m_nTimer;//定时器
HICON m_hStart1;//图标2
HICON m_hStart2;//图表3
HICON m_hRobot;//图标1
NOTIFYICONDATA m_tnid;
//相关函数
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建一个视图以占用框架的工作区
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("未能创建视图窗口\n");
return -1;
}
//生成图标
m_hRobot=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ROBOT));
m_hStart1=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_START1));
m_hStart2=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_START2));
TaskBarAddIcon(this->m_hWnd,IDI_ROBOT,m_hRobot,_T("高歌机器人"),m_tnid);
return 0;
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(m_bStatus)
{
TaskBarModifyIcon(m_hWnd,IDI_START1,m_hStart1,_T("高歌机器人"),m_tnid);
m_bStatus=0;
}
else
{
TaskBarModifyIcon(m_hWnd,IDI_START2,m_hStart2,_T("高歌机器人"),m_tnid);
m_bStatus=1;
}
CFrameWnd::OnTimer(nIDEvent);
}
//添加部标
BOOL CMainFrame::TaskBarAddIcon(HWND hwnd, UINT uID,HICON hicon, LPSTR lpszTip,NOTIFYICONDATA tnid)
{
BOOL ret;
tnid.cbSize = sizeof(NOTIFYICONDATA);//该结构所占的字节数
tnid.hWnd = hwnd;
tnid.uID = uID;//图标ID
tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;//指明其余的几个成员(hIcon、uCallBackMessage和szTip)的值是否有效
tnid.uCallbackMessage = UWM_NOTIFYICON;//为一个自定义的消息,当用户在该图标上作用一些鼠标动作时,将向hWnd成员中指定的窗口发出该消息
tnid.hIcon = hicon;//LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(uIcon));
strcpy(tnid.szTip,lpszTip);
ret=Shell_NotifyIcon(NIM_ADD, &tnid);
return ret;
}
//修改图标
BOOL CMainFrame::TaskBarModifyIcon(HWND hwnd,UINT uID,HICON hicon,LPSTR lpszTip,NOTIFYICONDATA tnid)
{
BOOL ret;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
tnid.uFlags = NIF_ICON| NIF_TIP | NIF_MESSAGE;
tnid.uCallbackMessage = UWM_NOTIFYICON;
tnid.hIcon = hicon;
strcpy(tnid.szTip,lpszTip);
ret=Shell_NotifyIcon(NIM_MODIFY, &tnid);
return ret;
}
为什么我定时器中不能修改图标
ret=Shell_NotifyIcon(NIM_MODIFY, &tnid);//ret总等于0