【vs2013】如何在VS的MFC中配置使用GDI+?

摘自:http://bbs.csdn.net/topics/330171017

   http://www.cnblogs.com/it20120227/archive/2011/12/31/2370903.html

首先,VS2010中已经有GDI+SDK包的,不需要额外下载
1:在stdafx.h文件中加入下面3行代码,添加相应的头文件和库
  #pragma comment( lib, "gdiplus.lib" )
  #include "gdiplus.h"
  using namespace Gdiplus;
2:定义一个全局变量 ULONG_PTR m_gdiplusToken;
其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。
3:使用GDI+函数前,先,最好放在OnInitDialog()中
 Gdiplus::GdiplusStartupInput gdiplusStartupInput;
  Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

或者

3.在C****App的InitInstance()中加入:
//初始化GDI+
GdiplusStartupInput gsi;
GdiplusStartup(&m_gdiplusToken,&gsi,NULL);
4.重载ExitInitInstance()函数
  Gdiplus::GdiplusShutdown(m_gdiplusToken);
这就是基本的配置了

摘自:http://blog.sina.com.cn/s/blog_4f91596001008otf.html

在MFC里使用GDI+

(2008-03-12 11:31:20)

1. 在"stdafx.h"里加入以下:

#include <gdiplus.h>
using namespace
Gdiplus;
#pragma comment(lib, "gdiplus.lib")

2. 为CWinApp的派生类增加两个成员:

ULONG_PTR
m_gdiplusToken;
GdiplusStartupInput m_gdiplusStartupInput;

3. 在该派生类的InitInstance()函数中加入

GdiplusStartup(&m_gdiplusToken,
&m_gdiplusStartupInput, NULL);

4. 在该派生类的ExitInstance()函数中加入

GdiplusShutdown(m_gdiplusToken);

5. 到此,基本上已经可以用了,例如:

Graphics g(this->GetSafeHwnd(),TRUE);
Pen
myPen(Color::Red,50);
myPen.SetWidth(20);
g.DrawLine(&myPen,50, 50,
145, 365);

6. 但是,假如你用以下代码却不能编译通过:

Graphics
g(this->GetSafeHwnd(),TRUE);
Pen* myPen = new
Pen(Color::Red,50);
g.DrawLine(myPen,50, 50, 145, 365);

提示

error C2660:
“Gdiplus::GdiplusBase::operator new” : 函数不接受 3 个参数

的错误。

7. 要解决此问题,需参考微软的文章,全文如下:

PRB: Microsoft Foundation
Classes DEBUG_NEW Does Not Work with GDI+

Article ID : 317799
Last Review : February 12,
2007
Revision : 2.1

This article was previously published under Q317799

SYMPTOMS
When you build a
debug version of a Microsoft Foundation Classes (MFC) application that uses
GDI+, you may receive an error message that resembles the following:
error C2660: ‘Gdiplus::GdiplusBase::operator new‘ : function does
not take 3 parameters

CAUSE
In debug builds, MFC
defines a preprocessor macro that expands the new operator to an overloaded new
operator that takes two extra parameters. The extra parameters are the source
file name and code line number. MFC can use this information to report memory
leaks to the programmer when in debug mode. This works for MFC classes because
MFC provides overloads for new that accept the extra parameters.

However, because this expansion is done by the preprocessor, it
affects all usage of the new operator. If any non-MFC classes are used in the
project, their new operator is also expanded, even if no suitable overload of
new is available in that class. This is what happens in GDI+, and as a result,
you receive a compile-time error message.

WORKAROUND
To work around
this problem, choose one of the following methods:

" Turn off the preprocessor expansion by commenting
out the following lines of code in the source file:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

NOTE: This method has the disadvantage of
not using features in MFC that help you track memory allocations and
leaks.

" Provide GDI+ with overloads for new and delete operators by
writing some code that accepts and discards the additional parameters. You can
paste the following code, which demonstrates this approach, into a new header
file and include the new header file instead of the Gdiplus.h file.

//// Ensure that GdiPlus header files work properly with
MFC DEBUG_NEW and STL header files.

#define iterator _iterator

#ifdef _DEBUG

namespace Gdiplus
{
 namespace
DllExports
 {
  #include
<GdiplusMem.h>
 };

#ifndef _GDIPLUSBASE_H
 #define
_GDIPLUSBASE_H
 class
GdiplusBase
 {
  public:
   void
(operator delete)(void*
in_pVoid)
   {
    DllExports::GdipFree(in_pVoid);
   }

void* (operator new)(size_t
in_size)
   {
    return
DllExports::GdipAlloc(in_size);
   }

void (operator delete[])(void*
in_pVoid)
   {
    DllExports::GdipFree(in_pVoid);
   }

void* (operator new[])(size_t
in_size)
   {
    return
DllExports::GdipAlloc(in_size);
   }

void * (operator new)(size_t nSize,
LPCSTR lpszFileName, int
nLine)
   {
    return
DllExports::GdipAlloc(nSize);
   }

void operator delete(void* p, LPCSTR
lpszFileName, int
nLine)
   {
    DllExports::GdipFree(p);
   }

};
 #endif // #ifndef
_GDIPLUSBASE_H
}
#endif // #ifdef _DEBUG

#include <gdiplus.h>
#undef iterator

//// Ensure that Gdiplus.lib is linked.
#pragma
comment(lib, "gdiplus.lib")

时间: 2024-11-03 21:14:04

【vs2013】如何在VS的MFC中配置使用GDI+?的相关文章

如何在VS和CB中配置MySQL环境

这里,由于我的MySQL安装在D盘 MY SQL\MySQL Server 5.6该路径下,所以后面的路径均以D:\MY SQL\MySQL Server 5.6开头 在VS中配置MySQL环境 包含目录: D:\MY SQL\MySQL Server 5.6\include 库目录:D:\MY SQL\MySQL Server 5.6\lib 链接器-输入:libmysql.lib 复制bin目录下的libmysql.dll到C:\windows\syswow64 CB中配置MySQL环境:

How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On(RHEL Pacemaker中配置STONITH)

本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Node-In-The-Head的简称,并且它能够保护数据使其不会因为节点异常或者同时访问而遭到损坏. 节点无反应并不代表它没有存取数据,如果想要百分百确认数据安全的话,需要使用STONITH来隔离节点,以确保在目前的节点已经离线后其它节点才能正常存取数据. STONITH也能用于集群服务无法停下的情况.

怎样在VS2013/MFC中使用TeeChart绘图控件

TeeChart作为一款强大好用的绘图控件,通过它可以绘制出各式各样的图表,包括2D的,还有3D的,绘制的图表美观实用,这里主要讲述如何在VS2013/MFC中使用TeeChart控件,顺便说一下在VS2013中如何创建MFC项目. 工具/原料 Visual studio 2013 TeeChart.pro.v5.ActiveX 方法/步骤 1 在网上下载TeeChart控件并安装,安装自然不用多说,安装完后找到安装路径(带有TeeChart5.ocx文件),复制当前路径 2 安装完后需要对控件

vs2013如何在C++中调用Lua(二)

Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用的是目前最新版5.2.3) 2.将源码放在合适的盘(我的在D盘,路径D:/Lua-5.2.3/src) 3.打开vs2013新建一个win32控制台应用程序(Win32 console project ),我将他取名为LuaLib 4.确定后,会弹出应用程序向导的提示框,点击下一步.应用程序类型选择

在VS2013中配置QT5 win7_64

转自 在VS2013中配置QT5 win7_64 环境: win x64 + vs2013+QT5+vs_addin 下面示例正确配置QT以及VS2013 + QT Addin开发环境: 下载VS2013: http://pan.baidu.com/s/1geL6aQ3 到官网下载QT5的源码和qt vs-addin插件(在这之前你得在官网注册一个登陆账号): https://www.qt.io/download-open-source/#section-2 下载最新的QT5.8.0版本: 往下

VS2013 中配置 Qt5.3 开发环境(32位)

需要的东西: 1.VS2013 2.Qt5.3 3.Visual Studio Add-in 1.2.3 for Qt5 其中2和3项可在Qt官网下载:http://qt-project.org/downloads (第3项在download页面最下方的other downloads中找到) 要注意的是,这里使用的是 Qt 5.3.0 for Windows 32-bit (VS 2013, 626 MB) ,使用32位是为了兼容更多的机子,以下的配置也是针对32位的,相比64位可能少一点步骤

如何在SharePoint中配置和自定义Content Query Web Part

如何在SharePoint中配置和自定义Content Query Web Part 2014-01-07 11:15 718人阅读 评论(0) 收藏 举报 之前有一篇blog提到过SharePoint中的Content Query Web Part (CQWP),说的是当SharePoint开启了匿名访问模式后,Content Query Web Part读取Document Library数据失败的问题.从这篇博客开始,我将说一下Content Query Web Part这个东西能做什么,

如何在MyEclipse中配置Tomcat?

1.下载tomcat免安装版,tomcat路径不含空格 http://download.csdn.net/detail/u014112584/7549191 2.windows -preferences-Myeclipse-servers-tomcat7.x (1)选择Enable (2)Tomcat home directory: 粘贴tomcat路径 (3)窗口-首选项-myeclipse-servers-tomcat7.x下拉的 JDK add   JavaJDK路径 3.测试tomcat

如何在IAR中配置CRC参数(转)

源:如何在IAR中配置CRC参数 前言 STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间.CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时的完整性检查.在IEC60335中,也接受通过CRC校验对FLASH的完整性进行检查.在对FLASH完整性检查的应用中,需要事先计算出整个FLASH的CRC校验值(不包括最后保存CRC值的字节),放在FLASH的末尾.在程序启动或者运行的过程中重新用同样的方法计算整个FLASH的CRC校验值,然后与