MFC使用GDI+编程设置
VC2005“项目/*属性”菜单项,打开项目的属性页窗口,先选“所有配置”,再选“配置属性/链接器/输入”项,在右边上部的“附加依赖项”栏的右边,键入GdiPlus.lib 后按“应用”钮,最后按“确定”钮关闭对话框。
在需要用到GDI+的文件头加上下面两句
#include <gdiplus.h>
using namespace Gdiplus;
在应用程序类应用程序类(CGDIPlusDemoApp) 头文件中声明一个成员变量:
ULONG_PTR m_gdiplusToken; // ULONG PTR 为int64 类型
并在该类的初始化函数CGDIPlusDemoApp::InitInstance() 中加入以下代码来对GDI+进行初始化:
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
注意:这两个语句必须加在应用程序类的InitInstance函数中的
CWinApp:: InitInstance ();
语句之前,不然以后会造成视图窗口不能自动重画、程序中不能使用字体等等一系列问题。
还要在CGDIPlusDemoApp::ExitInstance() 函数(重写)中加入以下代码来关闭GDI +:
GdiplusShutdown(m_gdiplusToken);
上面是所需步骤..
然后利用GDI+中的IPicture对象,IStream对象实现画图
HDC hdc = ::GetDC(m_hWnd);//获得窗口DC IPicture* pPic; IStream* pStm; memcpy(buffer+pos,buffer_last+10,LastDataPacket);//得到保存jpeg的buff HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE,lSzie); LPVOID pvData = NULL; pvData = GlobalLock(hGlobal); memcpy(pvData,buffer,lSzie); GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);//赋值给Istream对象 ULARGE_INTEGER pSeek; LARGE_INTEGER dlibMove ={0}; pStm->Seek(dlibMove,STREAM_SEEK_SET,&pSeek); OleLoadPicture(pStm,lSzie,TRUE,IID_IPicture,(LPVOID*)&pPic);//赋值给Ipicture对象 OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic->get_Width(&hmWidth); pPic->get_Height(&hmHeight); pPic->Render(hdc,0,0,320,200,0,hmHeight,hmWidth,-hmHeight,NULL);//画图到对应DC上 GlobalFree(hGlobal); free(buffer_last); free(buffer); } free(recvbuf); pPic->Release(); pStm->Release();