LoadBitmap1.Platform SDK 如果位图的ID定义为IDB_BITMAP1则 HBITMAP hBitmap=LoadBitmap(AfxGetInstanceHandle(),(LPSTR)IDB_BITMAP1); 如果位图的ID定义为'IDB_BITMAP1'则 HBITMAP hBitmap=LoadBitmap(AfxGetInstanceHandle(),'IDB_BITMAP1');
2.CBitmap::LoadBitmap() CBitmap* pBitmap=new CBitmap; pBitmap->LoadBitmap(IDB_BITMAP1); //位图资源ID定义为IDB_BITMAP1 关于CBitmap的使用 在初始化CBitmap对象时,常用Cbitmap::LoadBitmap,即如下两种: BOOL LoadBitmap( LPCTSTR lpszRecourceName ); BOOL LoadBitmap( UINT nIDResource ); MSDN中的说明为: ' 返回值调用成功时返回非零值,否则为0。 lpszResourceName指向一个包含了位图资源名字的字符串(该字符串以null结尾)。NIDResource指定位图资源中资源的ID号。说明本函数从应用的可执行文件中加载由lpszResourceName指定名字或者由nIDResource指定的ID号标志的位图资源。加载的位图被附在Cbitmap对象上。如果由lpszResourceName指定名字的对象不存在,或者没有足够的内存加载位图,函数将返回0。可以调用函数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都不是指位图文件名。不要将它们混淆。 LoadBitmap的参数不论那种类型都是针对资源而言,CBitmap是不提供直接从文件中读取位图的功能的!
|