博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC2008中使用GDI+(转)
阅读量:4945 次
发布时间:2019-06-11

本文共 2194 字,大约阅读时间需要 7 分钟。

转自

研究了两天的GDI,发现太麻烦了。想到C#中的方便GDI+操作,于是查了一下,原来GDI+是COM的,新的SDK的一部分,VC也可以用。今天开始研究,把心得小结一下,所以这篇算是第一部分。

先把GDI+的资料说一下,既然是VS2008,当然MSDN里面是有的。地方是MSDN中的Platform SDK | Win32和COM开发 | Graphics and Multimedia | GDI+ 。然后是网上也比较多,google一下就行了。比较好的有,老外的这篇文章。

今天算是开了个头,说下怎么在VC中用GDI+,比C#当然是要麻烦一些,要多不少手脚。
以下只为VC2008为目标,VC6这个老古董就不研究它了。
1.         在“项目” | 属性 | 配置属性 | 链接器 | 输入 | 附加依赖项 | 中加上gdiplus.lib。或者在stdafx.h文件中加入编译宏
#pragma comment(lib, “gdiplus.lib”)
2.         在stdafx.h中加入一行
#include <gdiplus.h>
记得是最下面,但在#endif之前的地方。
3.         VC中使用GDI+必须要在使用之前和使用之后分别调用GdiplusStartup和GdiplusShutdown这两个函数,当然在MFC构架中在CWinApp子类中做这个比较好。MSDN中的例子是API方式的,下面给出的是MFC方式的。
在应用程序类中加入一个成员变量
ULONG_PTR m_gdiplusToken;
         这个玩意在GdiplusStartup初始化后,在要GdiplusShutdown引用到。
在InitInstance函数中加入
// Initialize GDI+
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
当然,如果直接using namespace Gdiplus后,Gdiplus::就可以不要了。
最后在ExitInstance函数中加入
Gdiplus::GdiplusShutdown(m_gdiplusToken);
配置到此,就可以正常使用GDI+来进行工作了。当然一般的工作还是在CView的OnPaint里面来进行,使用Graphics来进行操作就行了。
4.     (新增)如果在成员变量中声明一个GDI+类的指针有问题,把所有CPP中的开头关于DEBUG的宏注释掉即可。此问题     在VS2008中出现过,但在VS2005中却没有,至少我用的版本是这样的。
复制一下引文中的一段代码为最后的说明,是OnPaint函数中的代码:

using namespace Gdiplus; CPaintDC dc(this); Graphics graphics(dc.m_hDC); // Pen can also be constructed using a brush or another//pen. There is a second parameter - a width which defaults to 1.0fPen blue (Color(255, 0, 0, 255)); Pen red (Color(255, 255, 0, 0));int y = 256;for (int x = 0; x < 256; x += 5)...{         graphics.DrawLine(&blue, 0, y, x, 0);         graphics.DrawLine(&red, 256, x, y, 256);          y -= 5;}                 for (y = 0; y < 256; y++)...{         Pen pen(Color(y, 0, 255,0));         // A green pen with shifting alpha          graphics.DrawLine(&pen, 0, y, 256, y);          // The sleep is to slow it down so you can watch the effect          Sleep(20);}                 for (x = 0; x < 256; x++)...{         Pen pen(Color(x, 255, 0, 255));         // A green pen with shifting alpha          graphics.DrawLine(&pen, x, 100, x, 200);         // The sleep is to slow it down so you can watch the effect         Sleep(20); }

转载于:https://www.cnblogs.com/liqilei/archive/2010/09/24/1833763.html

你可能感兴趣的文章
单例模式详解
查看>>
电商项目(下)
查看>>
[NOIP2015] 子串
查看>>
NSSet和NSArray区别与方法总结
查看>>
Python列表 元组 字典 集合
查看>>
foreach遍历数组、数组的转置与方阵的迹
查看>>
Still unable to dial persistent://blog.csdn.net:80 after 3 attempts
查看>>
HTML超文本标记语言(九)——表单输入类型
查看>>
基于busybox制作mini2440根文件系统及使用nfs挂载
查看>>
信道容量及信道编码原理学习
查看>>
浅谈独立特征(independent features)、潜在特征(underlying features)提取、以及它们在网络安全中的应用...
查看>>
从随机过程的熵率和马尔科夫稳态过程引出的一些思考 - 人生逃不过一场马尔科夫稳态...
查看>>
《A First Course in Abstract Algebra with Applications》-chaper1-数论-关于素数
查看>>
ORA-3136
查看>>
算法笔记_145:拓扑排序的应用(Java)
查看>>
JS获取农历日期
查看>>
PHP中的HTTP协议
查看>>
CSS给文字描边实现发光文字
查看>>
Java WebService入门实例
查看>>
css样式之补充
查看>>