自己封装的CDrawBitmap类(用于画bmp图片)

 

自己封装的CDrawBitmap类(用于画bmp图片)


 

 

 

 

/****************************************************************************
CDrawBitmap封装了一些画图片的函数。

调用如下:
 CDrawBitmap g_bmp1("D://My Documents//My Pictures//风景图片//4244123431.bmp");
 g_bmp1.Draw(m_hWnd);
   
 CDrawBitmap g_bmp2("D://My Documents//My Pictures//风景图片//plane.bmp");
 g_bmp2.DrawTransparent(m_hWnd);

 CDrawBitmap g_bmp3("D://My Documents//My Pictures//风景图片//jzg2.bmp");
 g_bmp3.DrawTransparent(m_hWnd);

****************************************************************************/

//使用TransparentBlt需要添加 #pragma comment(lib,"msimg32.lib")
#pragma comment(lib,"msimg32.lib")

class CDrawBitmap
{
private:
 HBITMAP m_bitmap;
 int m_bitmap_cx;
 int m_bitmap_cy;
public: 
 CDrawBitmap() {}
 CDrawBitmap(TCHAR * PicturePath) { LoadPicture(PicturePath); }
 CDrawBitmap(WORD ResourceID)  { LoadResource(ResourceID); }

 ~CDrawBitmap() { ::DeleteObject(m_bitmap);} 

 bool LoadPicture(TCHAR * PicturePath)
 {
  m_bitmap=(HBITMAP)LoadImage(NULL,  //应用程序实例   
   PicturePath,     //路径
   IMAGE_BITMAP,    
   0,        //如果不置0,则此参数指定m_bitmap的宽(位图被拉伸)  
   0,        //如果不置0,则此参数指定m_bitmap的高(位图被拉伸)  
   LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
  
  if (!m_bitmap)
   return false;

  BITMAP bmp;  
        GetObject(m_bitmap,sizeof(BITMAP),(LPSTR)&bmp); 
  m_bitmap_cx=bmp.bmWidth;
  m_bitmap_cy=bmp.bmHeight;

  return true;
 }

 bool LoadResource(WORD ResourceID)
 {
  m_bitmap=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE (ResourceID) ); 

  if (!m_bitmap)
   return false;

  BITMAP bmp;  
        GetObject(m_bitmap,sizeof(BITMAP),(LPSTR)&bmp); 
  m_bitmap_cx=bmp.bmWidth;
  m_bitmap_cy=bmp.bmHeight;

  return true;
 }

 void Draw(HWND hWnd=NULL,int x=0,int y=0,int width=100,int height=100)
 {
  HDC hScrDC=GetDC(hWnd);        //创建屏幕DC
  Draw(hScrDC,x,y,width,height);
  ::ReleaseDC(hWnd,hScrDC) ;       //释放屏幕DC
 }

 void Draw(HDC hScrDC,int x=0,int y=0,int width=100,int height=100)
 {
  HDC hMemDC=CreateCompatibleDC(hScrDC);    //创建内存DC
  ::SelectObject(hMemDC,m_bitmap);      //把位图选进内存DC
  BitBlt(hScrDC,x,y,width,height,hMemDC,0,0,SRCCOPY); //内存DC映射到屏幕DC
  ::DeleteDC(hMemDC) ;        //删除内存DC
 }


 void DrawTransparent(HWND hWnd=NULL,int x=0,int y=0)
 {
  HDC hScrDC=GetDC(hWnd);        //创建屏幕DC
  DrawTransparent(hScrDC,x,y);
  ::ReleaseDC(hWnd,hScrDC) ;       //释放屏幕DC
 }

 //不进行拉伸处理,如需要,请自行修改代码TransparentBlt中的参数
 //使用TransparentBlt需要添加 #pragma comment(lib,"msimg32.lib")
 void DrawTransparent(HDC hScrDC,int x=0,int y=0,UINT crTransparent=RGB(255,255,255))
 {
  HDC hMemDC=CreateCompatibleDC(hScrDC);    //创建内存DC
  ::SelectObject(hMemDC,m_bitmap);      //把位图选进内存DC
  ::TransparentBlt(hScrDC,x,y,m_bitmap_cx,m_bitmap_cy,hMemDC,0,0,m_bitmap_cx,m_bitmap_cy,crTransparent);
  ::DeleteDC(hMemDC) ;        //删除内存DC
 }


 void DrawStretch(HWND hWnd=NULL,int x=0,int y=0,int width=100,int height=100)
 {
  HDC hScrDC=GetDC(hWnd);        //创建屏幕DC
  DrawStretch(hScrDC,x,y,width,height);
  ::ReleaseDC(hWnd,hScrDC) ;       //释放屏幕DC
 }

 void DrawStretch(HDC hScrDC=NULL,int x=0,int y=0,int width=100,int height=100)
 {
  HDC hMemDC=CreateCompatibleDC(hScrDC);    //创建内存DC
  ::SelectObject(hMemDC,m_bitmap);      //把位图选进内存DC
  SetStretchBltMode(hScrDC,COLORONCOLOR);  //一定要先调用这个
  StretchBlt(hScrDC,x,y,width,height,hMemDC,0,0,m_bitmap_cx,m_bitmap_cy,SRCCOPY); //内存DC映射到屏幕DC
  ::DeleteDC(hMemDC) ;        //删除内存DC
 }
};

 


void CDemoDlg::OnButton1()
{
 CDrawBitmap g_bmp1("D://My Documents//My Pictures//风景图片//4244123431.bmp");
 g_bmp1.Draw(m_hWnd);
}


void CDemoDlg::OnButton2()
{
 CDrawBitmap g_bmp2("D://My Documents//My Pictures//风景图片//plane.bmp");
 g_bmp2.DrawTransparent(m_hWnd);

}


void CDemoDlg::OnButton3()
{
 CDrawBitmap g_bmp3("D://My Documents//My Pictures//风景图片//jzg2.bmp");
 g_bmp3.DrawTransparent(m_hWnd);
 
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值