从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;
}
解决方案 »
- MFC 把一个char类型的数据写入到text文件里
- 程序创建了许多的线程,在关闭程序的时候一定要先结束所有线程吗?
- 文件目录前边加上\\.\是什么意思?
- 公开的xml处理的源代码或者控件有几种?
- 哪位大侠帮我解释一下_stdcall()是什么意思,为什么前面要加" -"呢?
- 高分请教
- 高分求教:vc写的控件在vb中只能调用一次的奇怪问题???
- 新手......VC在加载Access的库时可不可以使用其中的多个表?先谢了!
- 救命呀!(50分一定给)
- 如何操作控件的DDX方法
- 高分相谢!!急迫问题,诚恳大家的帮助。关于程序执行出现异常的问题??????万分感谢!!!
- 放在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);