GDI+

载解压GDI+开发包;

2.  正确设置include & lib 目录;

3.   stdafx.h 添加:

#ifndef ULONG_PTR

#define ULONG_PTR unsigned long*

#endif

#include <gdiplus.h>

4.  程序中添加GDI+的包含文件gdiplus.h以及附加的类库gdiplus.lib。

通常gdiplus.h包含文件添加在应用程序的stdafx.h文件中:

#pragma comment( lib, "gdiplus.lib" )

     

举个例子:

 

(1)在应用程序项目的应用类中,添加一个成员变量,如下列代码:

ULONG_PTR m_gdiplusToken;

其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。

(2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭GDI+:

int CGDITestApp::ExitInstance()

{

Gdiplus::GdiplusShutdown(m_gdiplusToken);

return CWinApp::ExitInstance();

}

(3)在应用类的InitInstance函数中添加GDI+的初始化代码:

注意:下面这些GDI+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。

CWinApp::InitInstance();

Gdiplus::GdiplusStartupInput gdiplusStartupInput;

Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

(4)在需要绘图的窗口或视图类中添加GDI+的绘制代码。

下面分别就单文档和基于对话框应用程序为例,说明使用GDI+的一般过程和方法。

1. 在单文档应用程序中使用GDI+

在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码:

void CGDITestView::OnDraw(CDC* pDC)

{

         CGDITestDoc* pDoc = GetDocument();

         ASSERT_VALID(pDoc);

         // TODO: add draw code for native data here

    using namespace Gdiplus;

         Graphics graphics(pDC->m_hDC);

         Pen newPen(Color(255,0,0),3);

         HatchBrush newBrush(HatchStyleCross,Color(255,0,255,0),Color(255,0,0,255)); //创建一个填充画刷,前景色为绿色,背景色为蓝色

         graphics.DrawRectangle(&newPen,50,50,100,60); // 在(50,50)处绘制一个长为100,高为60的矩形

         graphics.FillRectangle(&newBrush,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域

}

 

2. 在基于对话框应用程序中使用GDI+

我试了半天,编译通过了,显示不出图像来。网上是这样说的:

试过了。OK!应该是SDK的问题。2006-2-13

步骤如下:

(1) 创建一个默认的基于对话框的应用程序Ex_GDIPlusDlg。

  (2) 打开stdafx.h文件添加下列代码:

#include <gdiplus.h>

#pragma comment( lib, "gdiplus.lib" ) // 也可以静态加载到Project->Setting

(3) 在App类的头文件中,添加变量声明:(Ex_GDIPlusDlg.h文件)

ULONG_PTR m_gdiplusToken;

(4) 在App类中添加虚函数ExitInstance的重载:

int CEx_GDIPlusDlgApp::ExitInstance()

{

    Gdiplus::GdiplusShutdown(m_gdiplusToken);

    return CWinApp::ExitInstance();

}

(5) 定位到CEx_GDIPlusDlgApp::InitInstance函数处,添加下列GDI+初始化代码:

注意:这些GDI+初始化代码一定要在dlg调用DoModel()函数的前面。

    CWinApp::InitInstance();

    Gdiplus::GdiplusStartupInput gdiplusStartupInput;

    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

(6) 定位到CEx_GDIPlusDlgDlg::OnPaint函数处,添加下列GDI+代码:

void CEx_GDIPlusDlgApp::OnPaint()

{

    if (IsIconic())

    {

        … …

    }

    else

    {

       CPaintDC dc(this); // 用于绘制的设备上下文

       using namespace Gdiplus;

       Graphics graphics( dc.m_hDC );

       Pen newPen( Color( 255, 0, 0 ), 3 );

       HatchBrush newBrush( HatchStyleCross,

           Color(255, 0, 255, 0),

           Color(255, 0, 0, 255));

       graphics.DrawRectangle( &newPen, 50, 50, 100, 60);

       graphics.FillRectangle( &newBrush, 50, 50, 100, 60);

      

       CDialog::OnPaint();

    }

}

 

从上述例子可以看出,只要能获得一个窗口的设备环境指针,就可构造一个Graphics对象,从而可以在其窗口中进行绘图,我们不必在像以往那样使用Invalidate/UpdateWindow来防止Windows对对话框窗口进行重绘。

转载于:https://www.cnblogs.com/plaqin/archive/2009/05/09/1453103.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell 练习3

1、编写脚本/root/bin/createuser.sh&#xff0c;实现如下功能&#xff1a;使用一个用户名做为参数&#xff0c;如果指定参数的用户存在&#xff0c;就显示其存在&#xff0c;否则添加之&#xff1b;显示添加的用户的id号等信息2、编写脚本/root/bin/yesorno.sh&#xff0c;提示…

HTML5文件实现拖拽上传

转载链接&#xff1a;http://www.cnblogs.com/caonidayecnblogs/archive/2010/09/09/1821925.html 通过HTML的文件API &#xff0c;Firefox、Chrome等浏览器已经支持从操作系统直接拖拽文件&#xff0c;并上传到服务器。 相对于使用了十多年的HTML表单&#xff0c;这是一个革命…

两个数组结果相减_学点算法(三)——数组归并排序

今天来学习归并排序算法。分而治之归并算法的核心思想是分而治之&#xff0c;就是将大问题转化为小问题&#xff0c;在解决小问题的基础上&#xff0c;再去解决大问题。将这句话套用到排序中&#xff0c;就是将一个大的待排序区间分为小的待排序区间&#xff0c;对小的排序区间…

python实习生面试题_大数据分析实习生面试题库

原标题&#xff1a;大数据分析实习生面试题库大数据分析是一个有吸引力的领域&#xff0c;因为它不仅有利可图&#xff0c;而且您有机会从事有趣的项目&#xff0c;而且您总是在学习新事物。如果您想从头开始&#xff0c;请查看大数据分析实习生面试题库以准备面试要点。大数据…

JavaScript编程语言 基础 (1)

问题&#xff1a;什么是web前端前端&#xff1a;指界面&#xff0c;计算机&#xff08;PC&#xff09;软件桌面的界面&#xff1b; 计算机端的浏览器界面&#xff1b; 移动端的软件&#xff08;app&#xff09;界面&#xff1b; 移动端的浏览器界面。HtmlcssJavaScript 使用网页…

shell结合expect写的批量scp脚本工具

转载链接&#xff1a;http://www.jb51.net/article/34005.htm expect用于自动化地执行linux环境下的命令行交互任务&#xff0c;例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具&#xff0c;定义在scp过程中可能遇到的情况&#xff0c;然后编写相应的处理语…

ASP记数器

这两天有好几个老的ASP网站要改&#xff0c;其中有要求加记数器&#xff0c;为图简单&#xff0c;就用文本文件的形式存储记数。以前用ifream的形式嵌入&#xff0c;不能很好的控制记数器显示的风格&#xff0c;现在改进了一下&#xff0c;可以很好的与嵌入板块风格结合了。把做…

php利用openssl实现RSA非对称加密签名

转载链接&#xff1a;http://liuxufei.com/weblog/jishu/376.html 1. 先用php生成一对公钥和私钥 $res openssl_pkey_new(); openssl_pkey_export($res,$pri); $d openssl_pkey_get_details($res); $pub $d[key]; var_dump($pri,$pub); 2. 保存好自己的私钥&#xff0c;把公…

[转] DevExpress 第三方控件汉化的全部代码和使用方法

DevExpress.XtraEditors.Controls 此控件包中包含的控件最多&#xff0c;包括文本框&#xff0c;下拉列表&#xff0c;按钮&#xff0c;等等 DevExpress.XtraGrid 网格 DevExpress.XtraBars 菜单栏 和 工具栏 DevExpress.XtraNavBar 导航条 DevExpress.XtraPr…

QPM 性能监控组件总篇

QPM &#xff08;Quality Performance Monitor&#xff09; 是一个质量性能监控组件&#xff0c;可以很方便的查看当前 App 的性能和常用数据。目前主要运行在 Android 平台上&#xff0c;通过集成 QPM 组件&#xff0c;可以在 App 中通过悬浮窗可视化相关实时数据。意在帮助广…

福音!微信个人公众号可以改名了!

微信个人公众号可以改名了&#xff01;&#xff01;&#xff01;今年&#xff0c;我们学校从景德镇陶瓷学院更名为景德镇陶瓷大学&#xff0c;但苦于微信限制&#xff0c;很多微信公众号无法更名。很多组织社团就放弃了原先的关注量&#xff0c;重新申请注册账号。当前我们的订…

js list删除指定元素_删除js数组中的指定元素,有这两步就够了

js数组是js部分非常重要的知识&#xff0c;有时我们有这么个需求js数组删除指定元素&#xff0c;先定义一个函数来获取删除指定元素索引值&#xff0c;然后用js数组删除的方法&#xff0c;来删除指定元素即可&#xff0c;就两步不难&#xff0c;很简单。1、JS的数组对象定义一个…

sudo 安装 常见错误

运行环境Linux&#xff1a; 1、sudo&#xff1a;安装 apt-get install sudo 2、sudo: must be setuid root错误解决方法. ls -l /usr/bin/sudo chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo reboot 3、sudo&#xff1a;提示用户无权限之类 在 /etc/…

慕课网高并发实战(一)-并发与高并发基本概念

课程网址 并发&#xff1a; 同时拥有两个或者多个线程&#xff0c;如果程序在单核处理器上运行&#xff0c;多个线程交替得换入或者换出内存&#xff0c;这些线程是同时“存在”的&#xff0c;每个线程都处于执行过程中的某个状态&#xff0c;如果运行在多核处理器上&#xff…

2009最经典名句

一&#xff1a;我的优点是&#xff1a;我很帅&#xff1b;但是我的缺点是&#xff1a;我帅的不明显. 二&#xff1a;谈钱不伤感情&#xff0c;谈感情最他妈伤钱。 三&#xff1a;我诅咒你一辈子买方便面没有调料包。 四&#xff1a;会计说&#xff1a;“你晚点来领工资吧&#…

计算机协会丨让技能得到提升,让思维受到启迪

“ 各位2016级新生&#xff0c;新的学期马上就要开始了&#xff0c;学校的各个组织和社团你真的了解了吗&#xff1f;在眼花缭乱的社团里如何找到自己真正喜欢的呢&#xff1f;或许看完计算机协会的纳新微信你就都明白啦&#xff01;关键词&#xff1a;计算机协会景德镇陶瓷大学…

ondestroy什么时候调用_尾调用和尾递归

尾调用1. 定义尾调用是函数式编程中一个很重要的概念&#xff0c;当一个函数执行时的最后一个步骤是返回另一个函数的调用&#xff0c;这就叫做尾调用。注意这里函数的调用方式是无所谓的&#xff0c;以下方式均可&#xff1a;函数调用: func()方法调用: obj.method()call调用:…

查看/修改Linux时区和时间

转载链接&#xff1a;http://blog.csdn.net/colincjl/article/details/6133036 查看/修改Linux时区和时间 一、时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS timeconfig 方法(3) 适用于Debian dpkg-reconfigure tzdat…

dhl:使用return RedirectToAction()和 return view()

一个Action&#xff1a; Code/// <summary> /// Friend好友的地 /// </summary> /// <returns></returns> public ActionResult FriendFarm(string pid) {BLL.DTOFarm farm new AppleGrange.BLL.DTOFarm(pid); …

【更名通知】将以个人名义继续更新维护

这是我&#xff08;2013年任职计算机协会会长&#xff09;在2013年申请的公众号。由于2016年学校陶院更名为陶大&#xff0c;在当时公众号无法修改名称。后来计协的的学弟学妹申请了新的公众号"陶大计算机Association"&#xff0c;大家可以前往关注&#xff0c;所以该…