在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
// 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
相关文章推荐
- DCMTK354之VC++ 2008 MFC应用程序配置完整过程
- VC++2010环境下基于MFC框架的OpenGL的编程环境的配置
- vc2010中使用raknet的库的配置过程
- VC2010MFC下的ArcEngine开发(二)
- VS 2010 配置VC++ 目录
- SPS2007搜索配置(完整过程)
- 使用VC的MFC实现读配置文件
- VC++中的MFC程序的执行过程
- vc2005编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- Use Double Buffering to avoid flicker at GDI+(MFC, vc2008)
- 面向过程-事件驱动编程-消息机制【VC MFC】
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- 求助:在vc中gdi编程中如何实现图形放缩和平移?
- VC2010 中 MFC 的改进导致 XTP 停靠窗体无法显示的解决方法
- VC++/MFC(VC6)精品学习资料下载+Visual Studio 6.0/2008/2010下载
- vc++窗口的创建过程(MFC消息机制的经典文章)
- [VC/MFC]directX(directshow)的环境配置
- MFC入门(六) 图形设备接口GDI
- C# clr 存储过程例子(完整从:编译到配置到存储过程的安装部署到使用)
- VC++中的MFC程序的执行过程