从www.vckbase.com上下载了一个给clistbox添加位图背景的程序,把它用在了我自己的一个程序中。在我的程序中我是在一个弹出对话框中添加了一个clistbox控件,然后改为CMyListBox m_lstHost;然后在OnInitDialog() 中用下面语句来填充背景位图。
这些语句是不是有资源泄漏呀?我反复的点击鼠标让对话框弹出,结果在弹出10来次后,这个列表框控件的背景就变成黑色了?请求指教!!
CMyListBox在http://www.vckbase.com/vckbase/vckbase14/上定义
OnInitDialog()函数。
m_lstHost.GetClientRect(&m_ListBoxRect);
m_lstHost.m_bmp.LoadBitmap(IDB_BKCLIENT);HBITMAP htempbmp;
m_hbListBox = (HBITMAP )m_lstHost.m_bmp.Detach();
htempbmp = GetSizeBITMAP(m_hbListBox , m_ListBoxRect.right,m_ListBoxRect.bottom);
m_lstHost.m_bmp.Attach(htempbmp); GetSizeBITMAP函数如下:
HBITMAP GetSizeBITMAP(HBITMAP hBitmap, int w, int h)
{
CDC sourceDC, destDC;
sourceDC.CreateCompatibleDC( NULL );
destDC.CreateCompatibleDC( NULL );
BITMAP bm;
::GetObject( hBitmap, sizeof( bm ), &bm );
HDC hdc = GetDC(NULL);//CClientDC(NULL);
HBITMAP hbmResult = ::CreateCompatibleBitmap(hdc, w, h);
HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hBitmap );
HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult );
destDC.BitBlt(0, 0, w, h, &sourceDC, 0, 0, SRCCOPY );
::SelectObject( sourceDC.m_hDC, hbmOldSource );
::SelectObject( destDC.m_hDC, hbmOldDest ); if(hdc) ReleaseDC(NULL, hdc);
if(sourceDC) ReleaseDC(NULL, sourceDC);
if(destDC) ReleaseDC(NULL, destDC); return hbmResult;
}
这些语句是不是有资源泄漏呀?我反复的点击鼠标让对话框弹出,结果在弹出10来次后,这个列表框控件的背景就变成黑色了?请求指教!!
CMyListBox在http://www.vckbase.com/vckbase/vckbase14/上定义
OnInitDialog()函数。
m_lstHost.GetClientRect(&m_ListBoxRect);
m_lstHost.m_bmp.LoadBitmap(IDB_BKCLIENT);HBITMAP htempbmp;
m_hbListBox = (HBITMAP )m_lstHost.m_bmp.Detach();
htempbmp = GetSizeBITMAP(m_hbListBox , m_ListBoxRect.right,m_ListBoxRect.bottom);
m_lstHost.m_bmp.Attach(htempbmp); GetSizeBITMAP函数如下:
HBITMAP GetSizeBITMAP(HBITMAP hBitmap, int w, int h)
{
CDC sourceDC, destDC;
sourceDC.CreateCompatibleDC( NULL );
destDC.CreateCompatibleDC( NULL );
BITMAP bm;
::GetObject( hBitmap, sizeof( bm ), &bm );
HDC hdc = GetDC(NULL);//CClientDC(NULL);
HBITMAP hbmResult = ::CreateCompatibleBitmap(hdc, w, h);
HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hBitmap );
HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult );
destDC.BitBlt(0, 0, w, h, &sourceDC, 0, 0, SRCCOPY );
::SelectObject( sourceDC.m_hDC, hbmOldSource );
::SelectObject( destDC.m_hDC, hbmOldDest ); if(hdc) ReleaseDC(NULL, hdc);
if(sourceDC) ReleaseDC(NULL, sourceDC);
if(destDC) ReleaseDC(NULL, destDC); return hbmResult;
}
解决方案 »
- 关于连接sql数据库的问题?
- 在VC下能否通过数组或链表来提高WinPcap的写操作速度?
- 添加开机启动后,程序加载其它组件失败!
- 使用vc++6.0进行调试时出现出现debug assertion failed 现象的原因
- 怎样禁止鼠标拖动来改变子对话框的大小
- 高分求助服务器负载均衡方面资料!
- 《文件夹守护神》译成英语
- 怎样产生一个二进制文件,并向该二进制文件中写入数据。请帮忙,急。万分感谢。
- 急急急急啊,又一个调试问题,大虾该出手拉,跳楼拉
- 用WTL,CListViewCtrl,能不能实现只要网格的横线,不要竖线,请高人指点
- 高分相谢!!急迫问题,诚恳大家的帮助。关于程序执行出现异常的问题??????万分感谢!!!
- 放在C:\Documents and Settings\Administrator.LUOZH\Local Settings\Temp目录中的文件会自动删除吗?
HBITMAP htempbmp;
m_hbListBox = (HBITMAP )m_lstHost.m_bmp.Detach();
htempbmp = GetSizeBITMAP(m_hbListBox , m_ListBoxRect.right,m_ListBoxRect.bottom);
m_lstHost.m_bmp.Attach(htempbmp); DeleteObject(m_hbListBox);//try it最好HBITMAP htempbmp;最后也释放一下:
DeleteObject(htempbmp);