关于gdi对象释放问题

我的一个 类成员变量
CBitmap m_NetSetBmp;

在初始化时:
m_LoninBmp.Attach((HBITMAP)::LoadImage(NULL,".\\res\\login.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
绘图时:
ShowBitmap(&pdc,&m_NetSetBmp,rcBmp,RGB(214,238,255));
函数体:
bool ShowBitmap(CDC *pDC,CBitmap* bmp,CRect rect,COLORREF MColor)
{
return ShowBitmap((HDC)pDC->m_hDC,(HBITMAP)bmp->m_hObject,rect,MColor);
}
bool ShowBitmap(HDC hDC,HBITMAP hbmp,CRect rect,COLORREF MColor)
{
if(GetObjectType(hbmp) != OBJ_BITMAP)
return false;
int oldMode;
BITMAP bm;
HBITMAP oldHbitmap;
HDC memhdc;
memhdc = CreateCompatibleDC(hDC);

GetObject(hbmp,sizeof(BITMAP),&bm);
oldHbitmap=(HBITMAP)::SelectObject(memhdc,hbmp);

if(MColor==-1)
{
oldMode = SetStretchBltMode(hDC,COLORONCOLOR);
StretchBlt(hDC,rect.left,rect.top,rect.Width(),rect.Height(),memhdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
SetStretchBltMode(hDC,oldMode);

}
else
{
TransparentBlt(hDC,rect.left,rect.top,rect.Width(),rect.Height(),
memhdc,0,0,bm.bmWidth,bm.bmHeight,MColor);
}
SelectObject(memhdc,oldHbitmap);
DeleteDC(memhdc);
return true;
}

有两个问题:
1:
m_NetSetBmp 用调用m_NetSetBmp.DeleteObject();吗.
2:
我的绘图有时会失败.画出奇怪图片(我截了图,不知道怎么发.);
...全文
181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我试了.相对路径几次就会有问题.改成绝对路径试了几十次.还没有出现问题.先这样吧
感谢大家的关注.我会给分.
TCHAR szPath[MAX_PATH] = { 0 };
GetModuleFileName(NULL, szPath, MAX_PATH);
TCHAR *p = _tcsrchr(szPath, _T('\'));
if (p)
{
*p = _T('\0');
_tcscat(szPath, _T("\\res\\login.bmp"));
}
纠正一下:
TCHAR *p = _tcsrchr(szPath, _T('\\'));
我使用 ::GetCurrentDirectory(MAX_PATH,szPath);
  • 打赏
  • 举报
回复
同样的方法.有三张图片,其他两张没有问题.
我会把路径改成绝对路径试试.
m_LoninBmp.Attach((HBITMAP)::LoadImage(NULL,".\\res\\login.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
m_NetSetBmp.Attach((HBITMAP)::LoadImage(NULL,".\\res\\NetSetting.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
m_GetPassWordBmp.Attach((HBITMAP)::LoadImage(NULL,".\\res\\GetPassWord.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
  • 打赏
  • 举报
回复
http://album.hi.csdn.net/views/guestalbum/461114?d=MjAwOC05LTExIDg6MzA6Mzk=[/img]
我提交的图片不能显示.请到我的像册里看
sys0000 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhouzhenyan 的回复:]
奇怪的图片是啥样子?
::LoadImage(NULL,".\\res\\login.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
这个路径有问题。
[/Quote]

你应该先取当前EXE的路径,然后再拼上相对路径。

TCHAR szPath[MAX_PATH] = { 0 };
GetModuleFileName(NULL, szPath, MAX_PATH);
TCHAR *p = _tcsrchr(szPath, _T('\'));
if (p)
{
*p = _T('\0');
_tcscat(szPath, _T("\\res\\login.bmp"));
}
  • 打赏
  • 举报
回复
我同样的语句,画了3张图片.其他两张没问题.也不是总有问题
zhouzhenyan 2008-09-10
  • 打赏
  • 举报
回复
奇怪的图片是啥样子?
::LoadImage(NULL,".\\res\\login.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
这个路径有问题。
cnzdgs 2008-09-10
  • 打赏
  • 举报
回复

那个是正常的?
看起来像是Load错图了,或者是句柄错了。
  • 打赏
  • 举报
回复
sys0000 2008-09-10
  • 打赏
  • 举报
回复
可以增加每一步API函数调用的返回值判断
  • 打赏
  • 举报
回复
m_NetSetBmp在哪里初始化的?
在OnInitdialog里
cnzdgs 2008-09-10
  • 打赏
  • 举报
回复
1、不需要。
2、先上传到个人空间,然后再在帖子回复里面点“插入图片”按钮。

另外,LoadImage不要使用相对路径,否则当前目录不同时会失败。
sys0000 2008-09-10
  • 打赏
  • 举报
回复
m_NetSetBmp在哪里初始化的?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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