void CButtonST::SetIcon(int nIconInId, int nIconOutId)
{
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId),
RT_GROUP_ICON);
// Set icon when the mouse is IN the button
m_hIconIn = (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
// Set icon when the mouse is OUT the button
m_hIconOut = (nIconOutId == NULL) ? m_hIconIn : (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
RedrawWindow();第二段程序也出现泄漏
void CGeneralDlg::DrawColor(bool isOn, int IDBtn)
{
HINSTANCE hInstance;
HBITMAP hBitmap;
hInstance = ::AfxGetInstanceHandle();
hBitmap = ::LoadBitmap(hInstance,isOn?"ONU":"OND");
((CButton *)GetDlgItem(IDBtn))->SetBitmap(hBitmap);
}
}
{
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId),
RT_GROUP_ICON);
// Set icon when the mouse is IN the button
m_hIconIn = (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
// Set icon when the mouse is OUT the button
m_hIconOut = (nIconOutId == NULL) ? m_hIconIn : (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
RedrawWindow();第二段程序也出现泄漏
void CGeneralDlg::DrawColor(bool isOn, int IDBtn)
{
HINSTANCE hInstance;
HBITMAP hBitmap;
hInstance = ::AfxGetInstanceHandle();
hBitmap = ::LoadBitmap(hInstance,isOn?"ONU":"OND");
((CButton *)GetDlgItem(IDBtn))->SetBitmap(hBitmap);
}
}
解决方案 »
- vc按钮问题
- 新手答疑~~~COM注册
- 如何改变COM组件与uuid之间的对应关系?
- 串口监视线程
- 那位前辈帮帮我.......
- 创建进程
- 我怎么现在了连VC++装都装不上??(一个匪夷所思的问题)
- HINSTANCE ShellExecute(....) 的返回值怎么变成 int类型的,很急,或给出修改意见
- mfc中使用OpenGl编写动画在xp系统下的bug
- 再问一个巨简单的问题:CRecordSet怎么填加记录?
- 基于对话框程序的问题(高手请进啊!!)
- WIN32的控制台下,.exe文件在运行过程中会printf很多信息,我在VC++调用EXE,怎样让这些信息输入到一个文本文件中,而不是显示屏上?
Bitmap DeleteObject
Cursor DestroyCursor
Icon DestroyIcon
{
HINSTANCE hInstance;
HBITMAP hBitmap;
hInstance = ::AfxGetInstanceHandle();
hBitmap = ::LoadBitmap(hInstance,isOn?"ONU":"OND");
((CButton *)GetDlgItem(IDBtn))->SetBitmap(hBitmap);
DeleteObject(hBitmap);
}
不在CGeneralDlg类里面加入两个CBitmap类,初始化的时候就加载两个图片:OnInitDialog:
{
m_bmpOn.LoadBitmap("ONU");
m_bmpOff.LoadBitmap("OND");}
void CGeneralDlg::DrawColor(bool isOn, int IDBtn)
{
((CButton *)GetDlgItem(IDBtn))->SetBitmap(isOn?(HBITMAP)m_bmpOn:(HBITMAP)m_bmpOff);
}
我已经加了DeleteObject(hBitmap),但是程序不现实位图了
你的第二段代码为什么,
不在CGeneralDlg类里面加入两个CBitmap类,初始化的时候就加载两个图片:OnInitDialog:
{
m_bmpOn.LoadBitmap("ONU");
m_bmpOff.LoadBitmap("OND");}
void CGeneralDlg::DrawColor(bool isOn, int IDBtn)
{
((CButton *)GetDlgItem(IDBtn))->SetBitmap(isOn?(HBITMAP)m_bmpOn:(HBITMAP)m_bmpOff);
}
====同意,做成成员变量。反正就是两个位图罢了。
HBITMAP hBitmapOld = ((CButton *)GetDlgItem(IDBtn))->SetBitmap(hBitmap);
if (hBitmapOld)
::DeleteObject(hBitmapOld);