您的位置:首页 > 其它

在VC2010上MFC从配置GDI到画出图形的完整过程

2014-07-25 12:45 260 查看
先前,在“VC2010上配置GDI+(图像库)”中我完成了在win32工程中GDI+的配置。但是在尝试画图时,出现了错误,其具体代码如下:

// DrawRGB.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

//#include "afxwin.h"

int main()

{

//声明全局变量:

Gdiplus::GdiplusStartupInputm_gdiplusStartupInput;

ULONG_PTRm_pGdiToken;

//在使用GDI+之前要进行安装,否则程序不会报错,但绘图不成功。安装方法如下:

GdiplusStartupInputgdiplusStartupInput;

ULONG_PTR gdiplusToken;

GdiplusStartup(&gdiplusToken,&gdiplusStartupInput, NULL);

//usingGDI+

Graphicsmyg(this->GetDC()->m_hDC);

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

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

CRectrect;

this->GetClientRect(&rect);

myg.DrawEllipse(&pen,30,30,100,100);

//在最后使用完GDI+后,卸载gdi+,使用:

GdiplusShutdown(gdiplusToken);

}

后来发现,如果单独的使用WIN32平台进行图像的绘制工作将相当的麻烦,因为还要提供绘图的画布,才能画图。

立即转换方法,使用MFC的单文本模式创建工程, 最终成功的在窗体中画了一个圆:


其具体的配置实现方法如下:

1. 创建MFC项目:文件>新建>工程>MFC应用程序, 文件名取为“MFC_DrawRGB”. 选项目格式为当文本格式,点击完成,创建成功MFC项目

2. 点击编译,发现程序可以运行,继续下一步

3. 在stdafx.h中添加GDI+运行必须的头文件,其添加位置我选择在stdafx.h的最后,再下面是version的信息:

#include <comdef.h>

#include <gdiplus.h>

using namespace Gdiplus;

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

4. 这样在编译的时候程序就可以识别出GDI+库的文件信息而不报错,但是为保险起见,在链接器的附加依赖项上也添加gdiplus.lib信息。工程>属性>配置属性>链接器>输入>附加依赖项>编辑添加“gdiplus.lib”

5. 在申明了ULONG_PTRgdiplusToken; 以后实现GDI+的初始化。具体步骤如下:使用ctrl F找到初始化函数InitInstance(), 其中有一个叫做BOOL CMFC_DrawRGBApp::InitInstance() 的, 在那块位子实现如图的代码:



6. 点击CMFC_DrawRGBApp::InitInstance()中的CMFC_DrawRGBApp,右键,转到定义,在public下添加两个成员:

ULONG_PTR m_gdiplusToken;

GdiplusStartupInput m_gdiplusStartupInput;

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

GdiplusShutdown(m_gdiplusToken);

8. 现在可以画图了。在CMFC_DrawRGBView::OnDraw(CDC* /*pDC*/)下面画图:

void CMFC_DrawRGBView::OnDraw(CDC* /*pDC*/)

{

CMFC_DrawRGBDoc*pDoc = GetDocument();

ASSERT_VALID(pDoc);

if(!pDoc)

return;

//TODO: 在此处为本机数据添加绘制代码

//usingGDI+

Graphicsmyg(this->GetDC()->m_hDC);

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

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

CRectrect;

this->GetClientRect(&rect);

myg.DrawEllipse(&pen,30,30,100,100);

}

参考文件:

/article/9088916.html
http://blog.sina.com.cn/s/blog_4f91596001008otf.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: