一个托盘闪烁的问题:
为什么我托盘的图标不闪烁,而窗口和任务栏上的图标会闪烁?
我的部分代码(每次调用OnTimer()函数,我传入的值是1,2循环):
——————————————————————————————————
void CYDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(i)
{
case 1:
nd.uID = IDI_ICON1;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MY2);
break;
case 2:
nd.uID = IDI_ICON2;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MY1);
break;
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
nd.hIcon = m_hIcon;
Shell_NotifyIcon(NIM_MODIFY, &nd);
InvalidateRect(NULL,TRUE); CDialog::OnTimer(nIDEvent);
}
——————————————————————————————————怎么解决?在网上搜了很多,都一样的方法,但是就是解决不了!!!大家帮帮忙·~!
为什么我托盘的图标不闪烁,而窗口和任务栏上的图标会闪烁?
我的部分代码(每次调用OnTimer()函数,我传入的值是1,2循环):
——————————————————————————————————
void CYDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(i)
{
case 1:
nd.uID = IDI_ICON1;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MY2);
break;
case 2:
nd.uID = IDI_ICON2;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MY1);
break;
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
nd.hIcon = m_hIcon;
Shell_NotifyIcon(NIM_MODIFY, &nd);
InvalidateRect(NULL,TRUE); CDialog::OnTimer(nIDEvent);
}
——————————————————————————————————怎么解决?在网上搜了很多,都一样的方法,但是就是解决不了!!!大家帮帮忙·~!
nd.uFlags = NIF_ICON;
nid.hIcon = m_hIcon;
Shell_NotifyIcon(NIM_MODIFY, &nid);
2. 你i怎么改变的?从代码看,i必须不停变化才能闪烁,你可以把你代码改成如下试试
void CYDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int iIcon = 1;
iIcon=1-iIcon;
switch(iIcon)
{
case 0:
//nd.uID = IDI_ICON1; ID不需要改变
m_hIcon = AfxGetApp()-> LoadIcon(IDI_ICON_MY2);
break;
case 1:
//nd.uID = IDI_ICON2;
m_hIcon = AfxGetApp()-> LoadIcon(IDI_ICON_MY1);
break;
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
nd.hIcon = m_hIcon;
Shell_NotifyIcon(NIM_MODIFY, &nd);
CDialog::OnTimer(nIDEvent);
} 当然:定时器必须设置为大概1秒触发一次