位图资源bmp的使用,需要经过下面几个步骤
1.把位图资源载入位图对象
为了保存位图信息及对位图进行处理,MFC提供了一个位图类CBitmap,其右两个向CBitmap类对象装载位图文件信息的成员函数。
BOOL LoadBitmap(LPCTSTR lpszResoutceName);
BOOL LoadBitmap(UNIT nIDResource);
其中,参数lpszResoutceName为资源名称,而nIDResource为资源的表示.
这样,为了使用位图,则需要先定义一个位图类的对象,然后用上面的任意一个成员函数把位图装载到对象中.例如,下面的代码
CBitmap m_Bmp; // 定义位图对象
m_Bmp.LoadBitmap(IDB_BITMAP); //表示为IDB_BITMAP的位图装入对象
2.获得位图信息
为了处理位图,CBitmap类对象可以用成员函数:
int GetBitmap(BITMAP* pBitMap);来获得位图的各种信息.在调用了上述的函数之后,位图的信息保存在BITMAP结构类型的变量pBitMap中,BITMAP是windows定义的一个专门为存放位图信息的结构.
3.把位图选入内存设备环境.
为了便于在内存中对位图进行一些绘图操作,位图不是直接被选入显示设备的DC,而是要先选入内存设备DC.即先要用函数CreateCompatibleDC()创建一个合适的内存设备环境.
CDC MemDC; //定义设备环境对象
MemDC.CreateCompatibleDC(NULL); //创建内存设备环境
然后,把位图对象选入内存设备环境.
MemDC.SelectObject(&m_Bmp);
4.显示位图
为了在显示设备上显示位图,需要调用CDC类的成员函数BitBlt(),把位图从内存设备环境复制到指定的设备环境(例如,显示器)中,BitBlt()函数的原型为:
BOOl BitBlt(int x,int y , int nWidth, int nHeight,
CDC* pScrDC, int xSrc, int ySrc, DWARD dwRop)
使用位图资源的实例.
(1)用MFC AppWizard创建一个名称为*** 工程
(2)随意添加一个bmp的图像文件到工程的res文件夹中,并将图像引入到工程中,如图
(3)在文档类声明中,声明如下对象和数据成员.
// 属性
public:
CBitmap m_Bitmap;
int m_nWidth;
int m_nHeight;
(4)在文档类的构造函数中装载位图和获得位图的尺寸.
CMy006Doc::CMy006Doc()
{
// TODO: 在此添加一次性构造代码
BITMAP BM;
m_Bitmap.LoadBitmap(IDB_BITMAP1);
m_Bitmap.GetBitmap(&BM);
m_nWidth = BM.bmWidth;
m_nHeight = BM.bmHeight;
}
(5)在视图类的OnDraw函数中,显示位图
void CMy006View::OnDraw(CDC* pDC)// 注意此处,默认情况下 pDC是被注释掉的,我都被害惨了..
{
CMy006Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//=======================================================================
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(pDoc->m_Bitmap);
pDC->BitBlt(0,0,pDoc->m_nWidth,pDoc->m_nHeight,&MemDC,0,0,SRCCOPY);
//=======================================================================
// TODO: 在此处为本机数据添加绘制代码
}