由于托盘图标闪烁造成CDC无法获取

oPiaoFeng12 2013-05-26 11:33:37
我写了一个聊天工具,以下代码是实现有消息来时托盘图标闪烁
只是不知道出现了什么问题 ,当头像闪烁很久后,整个程序的CDC都无法再获取,进而一些皮肤都无法绘制,然后死掉
各位兄弟,有这方面的经验么,知不知道原因呀..


CImageList m_list; // 用于存储头像信息,并且0图标为全透明的一个头像
NOTIFYICONDATA m_pnid; // 托盘


int CXX::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (__super::OnCreate(lpCreateStruct) == -1)
return -1;

m_pnid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
m_pnid.hWnd = this->m_hWnd;
m_pnid.uID = IDR_MAINFRAME;
m_pnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; // 图标有效|自定义消息有效
m_pnid.uCallbackMessage = SYS_ICO_MSG;
m_pnid.hIcon = g_pMainWnd->m_hIconDefault;
strcpy(m_pnid.szTip, m_pCurUser->m_sUserName);
Shell_NotifyIcon(NIM_ADD, &m_pnid); //在托盘区添加图标

return 0;
}


void CXX::OnTimer(UINT_PTR nIDEvent)
{
int nIndex = ...; //根据当前最新信息是谁,换成谁的头像序号
bool bShow = true;
if (!bShow)
nIndex = 0;
bShow = !bShow;
if (nIDEvent == TIMER_FLASH)
{
m_pnid.hIcon = m_list.ExtractIconA(nIndex);
Shell_NotifyIcon(NIM_MODIFY, &m_pnid);
}
}
...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oPiaoFeng12 2013-05-26
  • 打赏
  • 举报
回复
结帖吧,原因找到了:

void CXX::OnTimer(UINT_PTR nIDEvent)
{
    int nIndex = ...;    //根据当前最新信息是谁,换成谁的头像序号
    bool bShow = true;
    if (!bShow)
        nIndex = 0;
    bShow = !bShow;
    if (nIDEvent == TIMER_FLASH)
    {
	// 关键是这里
	if (m_pnid.hIcon != NULL)
		DestroyIcon(m_pnid.hIcon);
        m_pnid.hIcon = m_list.ExtractIconA(nIndex);
        Shell_NotifyIcon(NIM_MODIFY, &m_pnid);
    }
}
oPiaoFeng12 2013-05-26
  • 打赏
  • 举报
回复
up up~~~~

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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