文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>GDI+编程入门(C++)

GDI+编程入门(C++)

时间:2010-10-08  来源:可可西

【在system32中包含Gdiplus.dll文件】。

开发环境为:Windows XP(SP3)+ VS2008

 

(1)使用GdiPlus

       a.包含头文件 #include <Gdiplus.lib>

                         using namespace Gdiplus;

       b.链接导入库 #pragma comment(lib, "Gdiplus.lib")

       c.初始化      Gdiplus::GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

                        Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;

                        ULONG_PTRm_pGdiToken;

                       /* 该句代码一般放在主窗体的构造函数中。*/

       d.卸载         Gdiplus::GdiplusShutdown(m_pGdiToken);

                       /* 该句代码一般放在主窗体的析构函数中。*/

 

(2)读取png资源到image指针对象

 1 Gdiplus::Image* CSupriseDlg::ImageFromIDResource(UINT resID, LPCTSTR resType)
2 {
3 HINSTANCE hInst = AfxGetResourceHandle();
4 HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(resID),resType);
5 if (!hRsrc)
6 return NULL;
7 // load resource into memory
8 DWORD len = SizeofResource(hInst, hRsrc);
9 BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
10 if (!lpRsrc)
11 return NULL;
12 // Allocate global memory on which to create stream
13 HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
14 BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
15 memcpy(pmem,lpRsrc,len);
16 IStream* pstm;
17 CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
18 // load from stream
19 Gdiplus::Image* ima=Gdiplus::Image::FromStream(pstm, TRUE);
20 // free/release stuff
21 GlobalUnlock(m_hMem);
22 pstm->Release();
23 FreeResource(lpRsrc);
24
25 return ima;
26 }

 

// 调用该函数获取Image指针对象

1 // IDB_PNG2为资源ID  "PNG"为资源类型
2 Gdiplus::Image* ima = ImageFromIDResource(IDB_PNG2,_T("PNG"));

 

(3)使用Graphics::DrawImage(Image*,INT,INT,INT,INT)

       而不使用Graphics::DrawImage(Image*,INT,INT)

       绘制PNG图片

 

      原因是:图片的DPI可能和屏幕的DPI不一致。

                 一般png是96DPI  而屏幕设备是76DPI

 

      Graphics::DrawImage(Image*,INT,INT,INT,INT)

      参数1: 绘制的目标图片

      参数2: 图片左上角相对绘制窗体上的x坐标

      参数3: 图片左上角相对绘制窗体上的y坐标

      参数4: 图片宽度

      参数5: 图片长度

 

     Graphics::DrawImage(Image*,INT,INT)

      参数1: 绘制的目标图片

      参数2: 图片左上角相对绘制窗体上的x坐标

      参数3: 图片左上角相对绘制窗体上的y坐标

 

     如下图所示:

     使用Graphics::DrawImage(Image*,INT,INT,INT,INT) 绘制png图片【与其他图片查看软件效果一致】

     m_graphics->DrawImage(ima, 0, 0,picWidth,picHeight);

     

 

     使用Graphics::DrawImage(Image*,INT,INT) 绘制png图片【显得大一些】

     m_graphics->DrawImage(ima, 0, 0);

(4)防止闪烁

 

1 BOOL CGdiTestDlg::OnEraseBkgnd(CDC* pDC)
2 {
3 // TODO: Add your message handler code here and/or call default
4
5 //return CDialog::OnEraseBkgnd(pDC);
6 return TRUE;
7 }
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载