Posted on 2008-06-27 13:32
若我 阅读(1429)
评论(0) 编辑 收藏 引用
显示位图,你应该使用GDI+里面的Bitmap类或者Image类,这两个类都提供了方法从硬盘上的一个文件打开文件,创建相应的内存中的位图对象的工作。然后你可以使用Graphics类的DrawImage方法来绘制该位图。
下面的代码初始化GDI+,显示一个打开文件对话框并且创建Bitmap对象,显示位图:
GdiplusStartupInput input;
ULONG_PTR gdiPlusToken;
if(GdiplusStartup(&gdiPlusToken,&input,NULL)!=Ok)
{
return -1;
}
char fileName[200];
OPENFILENAME openStruct;
memset(&openStruct,0,sizeof(OPENFILENAME));
openStruct.lStructSize=sizeof(OPENFILENAME);
openStruct.Flags=OFN_EXPLORER;
openStruct.lpstrFilter="Jpeg files(*.jpg)\0*.jpg\0\0";
openStruct.lpstrFile=fileName;
openStruct.nMaxFile=200;
if(GetOpenFileName(&openStruct))
{
imageFileName=fileName;
}
HDC hdc=GetDC(hPicWnd);
if(hdc==NULL)
{
MessageBox(NULL,"","",MB_OK);
}
Graphics *g=new Graphics(hdc);
WCHAR tmpFileName[100];
size_t numOfChars;
if(/*mbstowcs_s(&numOfChars,tmpFileName,100,fileName,199)*/MultiByteToWideChar(CP_ACP,MB_COMPOSITE,imageFileName.c_str(),200,tmpFileName,100)/*==-1*/)
{
MessageBox(NULL,"Error occured in string convertion!","Error!",MB_OK);
return wParam;
}
HWND hPicWnd;
RECT rc;
GetWindowRect(hPicWnd,&rc);
RectF drawRect(rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top);
Bitmap *bmp=new Bitmap(tmpFileName);
bmpMain=bmp;
g->DrawImage(bmp,drawRect);
delete g;
ReleaseDC(hwnd,hdc);
GdiplusShutdown(gdiPlusToken);