16,472
社区成员
发帖
与我相关
我的任务
分享
class CDrawBitmap
{
private:
HBITMAP bitmap;
int cx;
int cy;
public:
CDrawBitmap() {}
bool LoadPicture(TCHAR * PicturePath)
{
bitmap=(HBITMAP)LoadImage(NULL, //应用程序实例
PicturePath, //路径
IMAGE_BITMAP,
0, //如果不置0,则此参数指定bitmap的宽(位图被拉伸)
0, //如果不置0,则此参数指定bitmap的高(位图被拉伸)
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
BITMAP bmp;
GetObject(bitmap, sizeof(BITMAP), (LPSTR)&bmp);
cx=bmp.bmWidth;
cy=bmp.bmHeight;
return bitmap!=NULL;
}
bool LoadResource(WORD ResourceID)
{
bitmap=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE (ResourceID) );
BITMAP bmp;
GetObject(bitmap, sizeof(BITMAP), (LPSTR)&bmp);
cx=bmp.bmWidth;
cy=bmp.bmHeight;
return bitmap!=NULL;
}
~CDrawBitmap()
{
::DeleteObject(bitmap); //释放位图所占Memory,
}
void Draw(HWND hWnd=NULL,int x=0,int y=0,int width=100,int height=100,int MenX=0,int MenY=0)
{
HDC hScrDC=GetDC(hWnd); //创建屏幕DC
HDC hMemDC=CreateCompatibleDC(hScrDC); //创建内存DC
::SelectObject(hMemDC,bitmap); //把位图选进内存DC
BitBlt(hScrDC,x,y,width,height,hMemDC,MenX,MenY,SRCCOPY); //内存DC映射到屏幕DC
::DeleteDC(hMemDC) ; //删除内存DC
::ReleaseDC(hWnd,hScrDC) ; //释放屏幕DC
}
/*
void DrawStretch(HWND hWnd=NULL,int x=0,int y=0,int width=100,int height=100)
{
HDC hScrDC=GetDC(hWnd); //创建屏幕DC
HDC hMemDC=CreateCompatibleDC(hScrDC); //创建内存DC
::SelectObject(hMemDC,bitmap); //把位图选进内存DC
SetStretchBltMode(hScrDC,COLORONCOLOR);
StretchBlt(hScrDC,x,y,width,height,hMemDC,0,0,cx,cy,SRCCOPY); //内存DC映射到屏幕DC
::DeleteDC(hMemDC) ; //删除内存DC
::ReleaseDC(hWnd,hScrDC) ; //释放屏幕DC
}
*/
};
void CDemoDlg::OnButton1()
{
CDrawBitmap bitmap;
bitmap.LoadPicture("D:\\My Documents\\My Pictures\\风景图片\\4244123431.bmp");
//draw 的第2-5参数确定画在窗体上的图块的位置大小,最后2个参数确定图块是从图片的哪个位置取出来的。
bitmap.Draw(m_hWnd,0,0,50,50,0,0);
bitmap.Draw(m_hWnd,50,50,50,50,50,50);
}
愿顺利!阿弥陀佛!