CBitmap的使用

 

在初始化CBitmap对象时,常用Cbitmap::LoadBitmap,即如下两种:

 

BOOL LoadBitmap(LPCTSTR lpszRecourceName);

BOOL LoadBitmap(UINT nIDResource);

MSDN中的说明为:

" 返回值调用成功时返回非零值,否则为。 

  lpszResourceName指向一个包含了位图资源名字的字符串(该字符串以null结尾)。NIDResource指定位图资源中资源的ID号。说明本函数从应用的可执行文件中加载由lpszResourceName指定名字或者由nIDResource指定的ID号标志的位图资源。加载的位图被附在Cbitmap对象上。如果由lpszResourceName指定名字的对象不存在,或者没有足够的内存加载位图,函数将返回。可以调用函数CgdiObject::DeleteObject删除由LoadBitmap加载的位图,否则Cbitmap的析构函数将删除该位图对象。警告     在删除位图对象之前,要保证它没有被选到设备上下文中。在Windows3.1以及以后的版本中,增加了如下的位图:OBM_UPARROWIORM_DNARROWIOBM_RGARROWIOBM_LFARROWI ......"

刚开始用的时候,我直接把图像路径名给了 lpszRecourceName,可总是不成功.仔细检查了程序,也没发现错误.可为什么呢?...CSDN一查才发现问题出在 lpszRecourceName上. lpszRecourceName按字面意思好像是"指向资源的名称字符串",可实际呢?却不是一般理解的磁盘上的资源文件名,而是VC工程内部已导入的资源名,所以把外部文件的名称赋给它当然不成功了.问题怎么解决呢?---用API函数HBITMAP LoadImage("文件名");不过改函数返回的是指向Load图片的句柄,所以需要用到CBitmap的Attach方法:

 

//直接从外部文件加载图片

 

HBITMAP bitmap;

bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),strFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

m_backBitmap.DeleteObject();

if(!m_backBitmap.Attach(bitmap))

{

     MessageBox("导入背景图失败!","提示",MB_OK);

     return;

}

 

****************************************

void CitemView::getBitMap( CDC *pDC )

{

     CDC   MemDC;  

     HBITMAP  hBmp;

     BITMAP   bm;  

     CBitmap  Bitmap;

     CPoint point( 10, 10);

     CString cStr;

 

     //hBmp = (HBITMAP)::LoadImage(NULL,"BG.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

     hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"BG.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

     Bitmap.DeleteObject();

     Bitmap.Attach( hBmp );

     Bitmap.GetObject(sizeof(BITMAP),&bm);  

     MemDC.CreateCompatibleDC(pDC);  

     MemDC.SelectObject(&Bitmap);  

     pDC->BitBlt(point.x, point.y, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);  

     MemDC.DeleteDC();

}

 

***************************************************

请问LoadBitmap( LPCTSTR lpszResourceName )中lpszResourceName 是指哪个名字

 

BOOL LoadBitmap(LPCTSTR lpszResourceName);  

BOOL LoadBitmap(UINT nIDResource);  

nIDResource   是指资源ID  

但lpszResourceName是指什么呢  

 

比如:我创建了一个BITMAP资源IDB_BITMAP1 ;   lpszResourceName是指什么呢,是硬盘上的bitmap1.bmp吗,如果是,以下代码为什么是错的。

 

 

CBitmap   bmp;  

bmp.LoadBitmap("d:\\..\\res\\bitmpa1.bmp");  

CDC   memdc;  

BITMAP   bmstru;  

bmp.GetBitmap(&bmstru);  

memdc.CreateCompatibleDC(pDC);  

memdc.SelectObject(&bmp);  

pDC->BitBlt(0,0,bmstru.bmWidth,bmstru.bmHeight,&memdc,0,0,SRCCOPY);  

用Notepad打开*.rc文件,找到类似下面一行:  

  IDB_BITMAP   BITMAP   "res\\background.bmp"  

  改成:  

  Bitmap1   BITMAP   "res\background.bmp"  

  或者,在VC中察看位图资源的属性,将其ID栏内改为"Bitmap"(注意,一定要加引号)。  

  然后调用:  

  bmp.LoadBitmap("Bitmap1");  

  保证成功。  

  资源可以用一个整数来标示,也可以用一个字符串标示。但无论如何,这些ID都不是指位图文件名。不要将它们混淆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值