首页 > 其他分享 >无涯教程-MFC - GDI

无涯教程-MFC - GDI

时间:2023-12-11 14:31:32浏览次数:28  
标签:CMFCGDIDemoView MFC CDC int OnDraw 无涯 GDI pDC pDoc

Windows提供了在设备上下文中使用的各种绘图工具,它提供了用于绘制线条的笔,用于填充内部的画笔以及用于绘制文本的字体,MFC提供了等效于Windows中绘图工具的图形对象类。

Drawing 绘制

设备上下文是Windows数据结构,其中包含有关设备(例如显示器或打印机)的图形属性的信息。所有绘图调用都是通过设备上下文对象进行的,该对象封装了用于绘制线条,形状和文本的Windows API。

设备上下文允许Windows中与设备无关的图形。设备上下文可用于绘制到屏幕,打印机或图元文件。

Lines 线

步骤1 - 让无涯教程看一个简单的示例,创建一个具有 MFCGDIDemo 名称的基于MFC的新单文档项目。

Lines

步骤2 - 创建项目后,进入Solution Explorer并双击Source Files文件夹下的 MFCGDIDemoView.cpp 文件。

步骤3 - 如下图所示,在 CMFCGDIDemoView::OnDraw()方法中画线。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   pDC->MoveTo(95, 125);
   pDC->LineTo(230, 125);
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

步骤4 - 运行此应用程序。您将看到以下输出。

Lines

步骤5 - CDC::MoveTo()方法用于设置行的起始位置。

    使用LineTo()时,程序从MoveTo()点开始到LineTo()末尾。

    在LineTo()之后,当您不调用MoveTo()并再次调用具有其他点值的LineTo()时,程序将从前一个LineTo()到新的LineTo()点绘制一条线。

步骤6 - 要绘制不同的线条,可以使用此属性,如以下代码所示。

void CMFCGDIDemoView::OnDraw(CDC* pDC) { 
   pDC->MoveTo(95, 125);
   pDC->LineTo(230, 125);
   pDC->LineTo(230, 225);
   pDC->LineTo(95, 325);
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here 
}

步骤7 - 运行此应用程序。您将看到以下输出。

Lines

Polylines 折线

折线是一系列连接的线,这些行存储在POINT或CPoint值的数组中,要绘制折线,请使用CDC::Polyline()方法,要绘制折线,至少需要两个点,如果定义两个以上的点,则第一个点之后的每条线将从上一个点画到下一个点,直到所有点都包括在内。

步骤1 - 让无涯教程看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   CPoint Pt[7];
   Pt[0] = CPoint(20, 150);
   Pt[1] = CPoint(180, 150);
   Pt[2] = CPoint(180, 20);
   pDC-Polyline(Pt, 3);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

步骤2 - 运行此应用程序时,将看到以下输出。

折线

Rectangles 矩形

矩形是由四个构成四个直角的边组成的几何图形,像直线一样,要绘制矩形,您必须定义矩形的起点和终点,要绘制矩形,可以使用CDC::Rectangle()方法。

步骤1 - 让无涯教程看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   pDC->Rectangle(15, 15, 250, 160);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

步骤2 - 运行此应用程序时,将看到以下输出。

长方形

Squares 正方形

正方形是由四个侧面组成的几何图形,四个侧面组成四个直角,但每个侧面的长度必须相等。

让无涯教程看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   pDC->Rectangle(15, 15, 250, 250);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

运行此应用程序时,将看到以下输出。

方格

Pies 椭圆

pie 是椭圆的一部分,由两条线界定,该两条线从椭圆的中心延伸到一侧。要绘制馅饼,可以使用CDC::Pie()方法,如下所示-

BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

  • (x1,y1)点确定矩形的左上角,代表饼形的椭圆适合该矩形。 (x2,y2)点是矩形的右下角。

Pies
  • (x3,y3)点指定饼图在默认的逆时针方向上的起始角。

  • (x4,y4)点种类是饼图的终点。

让无涯教程看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   pDC->Pie(40, 20, 226, 144, 155, 32, 202, 115);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

运行此应用程序时,将看到以下输出。

Pies

Arcs 圆弧

圆弧是椭圆的一部分或一部分,表示圆弧是不完整的椭圆。要绘制圆弧,可以使用CDC::Arc()方法。

BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

Arcs

CDC类配备了SetArcDirection()方法。

这是语法-

int SetArcDirection(int nArcDirection)
Sr.No. Value & Orientation
1

AD_CLOCKWISE

该图是顺时针绘制的

2

AD_COUNTERCLOCKWISE

该图是逆时针绘制的

第1步-让无涯教程看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   pDC->SetArcDirection(AD_COUNTERCLOCKWISE);
   pDC->Arc(20, 20, 226, 144, 202, 115, 105, 32);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

第2步-运行此应用程序时,将看到以下输出。

Arcs

Chords 圆弧

到目前为止,无涯教程绘制的弧线被认为是开放图形,因为它们是由具有起点和终点的线组成的, Chords是圆弧,其两端通过直线连接。

和弦

要绘制Chords,可以使用CDC::Chord()方法。

BOOL Chord(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   pDC->SetArcDirection(AD_CLOCKWISE);
   pDC->Chord(20, 20, 226, 144, 202, 115, 105, 32);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

运行上述应用程序时,将看到以下输出。

和弦

在此示例中,圆弧方向设置为顺时针方向。

Color 颜色

颜色是最基本的对象之一,可以增强对象的美学外观,颜色是非空间对象,已添加到对象以修改其某些视觉外观, MFC库与Win32 API结合使用,可以提供各种操作,您可以利用这些操作来充分利用颜色的各个方面。

RGB宏的行为类似于一个函数,并允许您传递由逗号分隔的三个数值。每个值都必须介于0到255之间,如以下代码所示。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   COLORREF color = RGB(239, 15, 225);
}

看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   COLORREF color = RGB(239, 15, 225);
   pDC->SetTextColor(color);
   pDC->TextOut(100, 80, L"MFC GDI Tutorial", 16);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

运行此应用程序时,将看到以下输出。

色彩

Fonts 字体

CFont 封装Windows图形设备界面(GDI)字体,并提供用于操纵该字体的成员函数。要使用CFont对象,请构造一个CFont对象并为其添加Windows字体,然后使用该对象的成员函数来操纵该字体。

看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   CFont font;
   font.CreatePointFont(920, L"Garamond");
   CFont *pFont = pDC->SelectObject(&font);
   COLORREF color = RGB(239, 15, 225);
   pDC->SetTextColor(color);
   pDC->TextOut(100, 80, L"MFC GDI Tutorial", 16);
   pDC->SelectObject(pFont);
   font.DeleteObject();
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
   return;

   //TODO: add draw code for native data here
}

运行上述应用程序时,将看到以下输出。

Fonts

Pens 钢笔

pen 是用于在设备上下文上绘制直线和曲线的工具。在图形编程中,笔还用于绘制诸如矩形或多边形之类的几何封闭形状的边界, MFC提供了一个 CPen 类,该类封装了Windows图形设备接口(GDI)笔。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   CPen pen;
   pen.CreatePen(PS_DASHDOTDOT, 1, RGB(160, 75, 90));
   pDC->SelectObject(&pen);
   pDC->Rectangle(25, 35, 250, 125);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

运行上述应用程序时,将看到以下输出。

Pens

Brushes 画笔 

画笔是一种绘图工具,用于填充封闭的形状或线条内部。画笔的行为就像捡起一桶油漆并将其倒在某处。 MFC提供了一个CBrush类,它封装了Windows图形设备接口(GDI)画笔。

让无涯教程看一个简单的示例。

void CMFCGDIDemoView::OnDraw(CDC* pDC) {
   CBrush brush(RGB(100, 150, 200));
   CBrush *pBrush = pDC->SelectObject(&brush);
   pDC->Rectangle(25, 35, 250, 125);
   pDC->SelectObject(pBrush);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

运行此应用程序时,将看到以下输出。

刷子

参考链接

https://www.learnfk.com/mfc/mfc-gdi.html

标签:CMFCGDIDemoView,MFC,CDC,int,OnDraw,无涯,GDI,pDC,pDoc
From: https://blog.51cto.com/u_14033984/8773122

相关文章

  • 无涯教程-MFC - 网络编程
    Microsoft提供了许多用于对客户端和服务器应用程序进行编程的API,正在为互联网编写许多新应用程序,并且随着技术,浏览器功能和安全选项的变化,将编写新类型的应用程序。MFC提供了一个CSocket类,用于使用WindowsSockets编写网络通信程序。这是CSocket类中方法的列表。Sr.No.Name......
  • 无涯教程-MFC - 文件系统
    在本章中,无涯教程将讨论文件系统的各个组成部分。Drives驱动驱动器是连接到计算机的物理设备,因此它可以存储信息,逻辑磁盘,逻辑卷或虚拟磁盘(简称VD或vdisk)是一种虚拟设备,可在计算机系统中的一个或多个物理磁盘驱动器上提供可用存储区域。驱动器可以是硬盘,CDROM,DVDROM,闪存(USB......
  • 无涯教程-MFC - 消息和事件
    应用程序由各种对象组成,大多数情况下,计算机上运行着多个应用程序,并且不断要求操作系统执行一些任务。Map消息由于Windows是面向消息的操作系统,因此Windows环境的大部分编程都涉及消息处理,每一个事件,例如一个键盘或鼠标点击发生时,一个消息被发送到该应用程序,然后必须处理该事件......
  • 无涯教程-MFC - 窗口控件
    Windows控件是用户可以与之交互以输入或操作数据的对象,它们通常出现在对话框或工具栏上。Sr.No.Controls&描述1StaticControl静态Static控件向用户显示信息,它可以用于显示颜色,几何形状或图片,如图标,位图或动画。2AnimationControl动画控件是一个以AVI格式显示音频剪......
  • MFC对话框显示时背景闪烁
    在显示一个对话框时,可以在WM_PAINT消息处理函数中绘制窗口的背景色。但会出现一种情况,在还未执行完OnPaint函数,对话框已经先显示出白色窗体,如下:还未绘制窗体,背景色先被显示。解决办法:1、添加WM_CTLCOLOR消息。2、在消息响应函数中添加如下代码:1HBRUSHCZGDlg::OnCtlColor......
  • 无涯教程-MFC - 控件管理
    在MFC应用程序中,以可视方式将控件添加到应用程序后,如果要在代码中引用它,则可以基于该控件或与该控件关联来声明变量。MFC库允许您为应用程序中使用的某些控件声明值或控件变量的两种类型的变量。一个变量用于存储在控件中的信息,也称为ControlVariable/Instance.另一个变量称......
  • MFC窗口闪烁问题
    本文引自:《VC窗口闪烁问题的解决》概述一般的windows复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小时候出现闪烁。闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上,而是写到了显存里,显卡......
  • 无涯教程-MFC - 对话框
    在本章中,无涯教程将介绍对话框(Dialog),Windows应用程序经常通过对话框与用户通信,CDialog类提供了用于管理对话框的界面,VisualC++对话框编辑器使设计对话框和创建其对话框模板资源变得容易。创建对话3对象是两阶段操作-构造对话框对象。创建对话框窗口。通过创建一个新的W......
  • 无涯教程-MFC - 环境设置
    MicrosoftVisualC++是用于为MicrosoftWindows操作系统创建应用程序的编程环境。要在C++应用程序中使用MFC框架,必须已安装MicrosoftVisualC++或MicrosoftVisualStudio,MicrosoftVisualStudio还包含MicrosoftVisualC++环境。Microsoft提供了VisualStudio的免费版......
  • 无涯教程-MFC - VC++项目
    VisualStudio包括几种VisualC++项目模板,这些模板有助于创建基本程序结构,菜单,工具栏,图标,并包含适合您要创建的项目类型的语句。在MFC中,您可以使用以下项目模板。Sr.No.Remark1MFCApplicationMFC应用程序是基于Microsoft基础类(MFC)库的Windows可执行应用程序,创建MF......