请问一下以下代码有什么问题?
m_ctrl1都是CStatic(图形控件),为什么我的鼠标在界面上晃多几下,程序就跑死了? 下面是相关代码:
void InitImage()
{
HBITMAP hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_SEARCH));
m_ctrl1.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_LOCAL));
m_ctrl2.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BOOK));
m_ctrl3.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_FRIENDS));
m_ctrl4.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_DOWNLOAD));
m_ctrl5.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_UPLOAD));
m_ctrl6.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_RESULT));
m_ctrl7.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_HISTORY));
m_ctrl8.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_NEWS));
m_ctrl9.SetBitmap(hBitmap);
m_strInfo="";
UpdateData(FALSE);
}
void CDlgLeftPanel::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnMouseMove(nFlags, point); InitImage();
return;
}
m_ctrl1都是CStatic(图形控件),为什么我的鼠标在界面上晃多几下,程序就跑死了? 下面是相关代码:
void InitImage()
{
HBITMAP hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_SEARCH));
m_ctrl1.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_LOCAL));
m_ctrl2.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BOOK));
m_ctrl3.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_FRIENDS));
m_ctrl4.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_DOWNLOAD));
m_ctrl5.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_UPLOAD));
m_ctrl6.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_RESULT));
m_ctrl7.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_HISTORY));
m_ctrl8.SetBitmap(hBitmap);
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_NEWS));
m_ctrl9.SetBitmap(hBitmap);
m_strInfo="";
UpdateData(FALSE);
}
void CDlgLeftPanel::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnMouseMove(nFlags, point); InitImage();
return;
}
之后:
DeleteObject(hBitmap);
添加下一个资源前先释放
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_SEARCH));
m_ctrl1.SetBitmap(hBitmap);
::DeleteObject(hBitmap);
init只需要做一次就行了,不能实时做
-------------------
但是我的代码要实现鼠标到图片控件上面时,该控件上面图片更改,init只能在mousemove里面调用了,我现在想到的办法是如果上次mousemove在图片控件上面,我才调用initimage,这样就少调用很多次init了,不知道还有没有其他
办法?
DeleteObject(hBitmap);
要动态改变图片可以重载CStatic控件 改写DrawItem函数 捕获鼠标事件 当鼠标在控件上时显示一副图片 不在时显示另一幅
1.设置一个标志位,FALSE
2.在ONMOUSEMOVE里判断标志,如果为FALSE就INIT,
3.做个定时器SetTimer,设置标志为TRUE
4.OnTimer 时间到了之后判断鼠标是不是还在,如果在,继续定时TRUE
5.如果不在,那就把标志位撤了FALSE(可能还要再换另一批BITMAP??)
m_ctrl1.SetBitmap(hBitmap); 不释放 //::DeleteObject(hBitmap);晃多几下//InitImage();可能就不知道被执行了几次了,
这样系统资源都被用完,所以立马死了.