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();