像qq一样变换图标

bluecrest 2002-10-31 05:06:51
//成员
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
...全文
41 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
llm308 2002-11-01
  • 打赏
  • 举报
回复
对不起,我试了一下,但没找到原因,帮你UP
用户 昵称 2002-11-01
  • 打赏
  • 举报
回复
nid.hIcon = m_dynamicicon;
前面还有一句
m_dynamicicon = AfxGetApp()->LoadIcon( IDR_GREEN );
不知道
LoadIcon(icons[index++%3]);
是否有效
用户 昵称 2002-11-01
  • 打赏
  • 举报
回复
我的代码
nid.hIcon = m_dynamicicon;
Shell_NotifyIcon( NIM_MODIFY, &nid );
你的代码
Shell_NotifyIcon(NIM_MODIFY, &myshell);
myshell.cbSize=sizeof(NOTIFYICONDATA);
myshell.hWnd=m_hWnd;
myshell.uID=100;
myshell.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
myshell.uCallbackMessage=WM_USER+100;
myshell.hIcon=AfxGetApp()->LoadIcon(icons[index++%3]);
strcpy(myshell.szTip,m_desIP);
Shell_NotifyIcon(NIM_ADD, &myshell);
不同之处,我只修改了hIcon,然后调用了一次MIM_MODIFY,你修改完成之后又改变了hIcon,而且调用了NIM_ADD,感觉这里有错误。
llm308 2002-11-01
  • 打赏
  • 举报
回复
在我的机器上试试,你等等
elvahuang 2002-11-01
  • 打赏
  • 举报
回复
up
bluecrest 2002-11-01
  • 打赏
  • 举报
回复
抬一下
bluecrest 2002-10-31
  • 打赏
  • 举报
回复
hicon变了阿

howtotell 2002-10-31
  • 打赏
  • 举报
回复
//这是我写在OnTimer里边的部分
static int icons[]={IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4};
static long index=0;


Shell_NotifyIcon(NIM_MODIFY, &myshell);
myshell.cbSize=sizeof(NOTIFYICONDATA);
myshell.hWnd=m_hWnd;
myshell.uID=100;
myshell.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
myshell.uCallbackMessage=WM_USER+100;
myshell.hIcon=AfxGetApp()->LoadIcon(icons[index++%3]);
strcpy(myshell.szTip,m_desIP);
Shell_NotifyIcon(NIM_ADD, &myshell);
用户 昵称 2002-10-31
  • 打赏
  • 举报
回复
tnid.hIcon = hicon;
hicon改变了吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧