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

先前,在“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);

}

参考文件:

http://blog.csdn.net/feisy/article/details/2122518

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MFC中显示读取的参数图像可以通过以下步骤实现: 1. 首先,你需要在MFC应用程序的资源文件夹中添加一个静态图片控件。你可以在资源视图中选择对应的对话框,然后右键点击添加控件,在控件列表中选择“Picture Control”并添加到对话框中。 2. 接下来,在你的对话框类中,找到OnInitDialog函数并添加以下代码: ``` CStatic* pImageControl = (CStatic*)GetDlgItem(IDC_STATIC_IMAGE); // 将IDC_STATIC_IMAGE替换为你在资源文件中添加的图片控件的ID CImage image; image.Load(_T("path_to_your_image")); // 替换为你的图像路径 pImageControl->SetBitmap(image.Detach()); // 将图像显示到控件中 ``` 3. 最后,你需要在你要显示图像的地方调用UpdateData()函数来更新对话框中的控件。你可以在你的程序中的任何地方调用它,例如在按钮点击事件中或者在图像读取成功后。 ``` UpdateData(FALSE); // 显示最新的图像 ``` 这样,在MFC应用程序中,你就可以显示读取的参数图像了。请确保替换代码中的路径和控件ID为你自己的实际值,并且图像文件格式与Load函数支持的一致。 ### 回答2: 首先,在MFC应用程序中,我们可以使用CImage类来加载和显示图像。下面是一个简单的步骤,用于在VC中显示读取的参数图像: 1. 首先,确保已将图像文件添加到项目中,并将其包含在您的源代码文件中,以便可以访问图像的路径。 2. 在您的对话框类中,声明一个CImage成员变量,例如: CImage m_Image; 3. 在OnInitDialog()方法中,加载图像文件到CImage对象中,例如: m_Image.Load(_T("图像文件路径")); 4. 然后,获取图像的宽度和高度,并将其用作绘图区域的大小,例如: int nWidth = m_Image.GetWidth(); int nHeight = m_Image.GetHeight(); CRect rect; GetDlgItem(IDC_STATIC_PICTURE)->GetClientRect(rect); // 假设您在对话框上有一个静态文本控件ID为IDC_STATIC_PICTURE rect.right = rect.left + nWidth; rect.bottom = rect.top + nHeight; 5. 创建一个DC并选择绘图区域,然后在绘图区域上绘制图像,例如: CDC* pDC = GetDlgItem(IDC_STATIC_PICTURE)->GetDC(); m_Image.Draw(pDC->m_hDC, rect); 6. 最后,释放DC并刷新静态文本控件,使图像显示在对话框上,例如: GetDlgItem(IDC_STATIC_PICTURE)->ReleaseDC(pDC); GetDlgItem(IDC_STATIC_PICTURE)->Invalidate(); 这样,您就可以在VCMFC应用程序中显示读取的参数图像了。请注意替换实际的图像文件路径和静态文本控件ID以适应您的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值