前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MFC控件GDI编程

MFC控件GDI编程

作者头像
IBinary
发布于 2019-05-25 08:21:40
发布于 2019-05-25 08:21:40
1.3K00
代码可运行
举报
文章被收录于专栏:逆向技术逆向技术
运行总次数:0
代码可运行

        MFC控件GDI编程

一丶学习内容

    1.了解常用的GDI函数绘图.

    2.使用常用的画笔画刷.

二丶常用的GDI函数绘图

上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等.

2.1 画线代码MoveTo LineTo用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);

    POINT po;
    po.x = 30;
    po.y = 30;
    dc.MoveTo(10, 10);  //移动起点到10 10 位置
    dc.LineTo(po);      //画线
    dc.LineTo(po);
}

截图:

2.2使用PolyLine画多个线

PolyLine这个函数.则是给一个数组. 这个数组里面保存着x y坐标. 然后它会遍历数组.以你给定的点来画线.

起始的两个坐标属于在哪里开始画.就是指定的起点.

比如使用它画一个矩形.

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);

    POINT po[5] = { 40,40,100,40,100,100,40,100,40,40 }; //给定坐标
    dc.Polyline(po, 5);//给数组.以及数组大小.

}

截图:

PolyLineTo 这个跟上面一样.上面的数组起始的两个成员是指明了起始位置.所以需要五个坐标.这一个直接使用MoveTo指定.数组里面直接填写坐标即可.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);

    POINT po[4] = {100,40,100,100,40,100,40,40 }; //给定坐标
    POINT ps;
    ps.x = 40;
    ps.y = 40;
    dc.MoveTo(ps);
    dc.PolylineTo(po, 4);//给数组.以及数组大小.

}

效果

2.3使用DC画圆

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);
    dc.Ellipse(CRect(10, 130, 110, 160)); //给定坐标即可.

}

截图:

2.4使用Dc画矩形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);
    dc.Rectangle(CRect(10, 130, 110, 160));

}

使用系统默认画刷.填充矩形.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);
    CBrush brush;
    CRect rect(10, 130, 110, 160);
    brush.CreateStockObject(LTGRAY_BRUSH);
    dc.Rectangle(&rect);
    dc.FillRect(&rect, &brush); //填充矩形.使用默认
}

2.5使用3D立体画一个矩形

其实3D立体就是使用两个RGB颜色来互相对应 一个代表的是上方的颜色.一个是下方的颜色

具体看代码吧.这里以矩形为例子.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);
    CBrush brush;
    CRect rect(10, 130, 110, 160);
    brush.CreateStockObject(LTGRAY_BRUSH);
    dc.Rectangle(&rect);
    dc.FillRect(&rect, &brush); //填充矩形.使用默认
    dc.Draw3dRect(&rect, RGB(255, 0, 0), RGB(128, 128, 128));
}

可以看到.上方颜色是红色.下方跟下方右边是灰色.

2.6 判断坐标是否在矩形里面.

这个可以使用我们的类 CRect 里面有一个函数叫做.PtInRect(POINT)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  POINT po;
    po.x = 10;
    po.y = 130;
    if (CRect(10, 130, 110, 160).PtInRect(po))
    {
        AfxMessageBox(TEXT("Yes"));
    }
    else
    {
        AfxMessageBox(TEXT("No"));

    }

三丶画刷以及画笔使用

在GDI中.我们有画笔.以及画刷. 比如上面我们使用了画刷来填充矩形.那么画矩形的线也是可以更改的.

CPen类. 根 CBrush类. 当然也有自己 CFront. 简单讲解一个.

我们要使用画笔.就要使用 SelectObject来使用才可以使用.

比如下方代码: PS: Brush一样.只不过设置背景都有专门的函数.可以查询MSDN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CCDCDlg::OnBnClickedButton1()
{
    CClientDC dc(this);
    CBrush brush;
    CPen pen(PS_SOLID, 1, RGB(255, 0, 0));//创建画笔.
    CPen *oldPen = dc.SelectObject(&pen);   //选择画笔.
    CRect rect(10, 130, 110, 160);
   
    dc.Rectangle(&rect);
  
    dc.SelectObject(oldPen);//还原画笔.
}

截图:

关于字体. 背景颜色. 查询MSDN即可.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图像处理程序框架—MFC相关知识点
CDC:Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 。
流川疯
2019/01/18
1.5K0
MFC绘图小实验(2)
1,以正五边形的5个顶点为基础,隔点存储构成五角星。填充模式采用WINDING。五角星边界线为5个像素宽的蓝色实线,内部使用红色填充。 CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportE
Zoctopus
2018/06/04
1.6K0
VC++6.0入门——第四讲 简单绘图
文章链接:https://cloud.tencent.com/developer/article/2465870
Arya
2024/11/18
1300
VC++6.0入门——第四讲 简单绘图
MFC绘图小实验(1)
这学期开了一门计算机图形学的课程,感觉蛮有趣的,所以想把书上的那些样例程序都实现一遍,了解基本的绘图原理和要点。 1,使用用户自定义的映射模式,设置窗口大小和视区相等的二维坐标系。视区中x轴水平向右为正,y轴垂直向上为正,原点位于屏幕客户区中心。 void CTestoneView::OnDraw(CDC* pDC) { CTestoneDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for
Zoctopus
2018/06/04
1.8K0
【Windows编程】系列第五篇:GDI图形绘制
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图。Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解。GDI可以绘制点、直线曲线、填充封闭区域、位图以及文本,其中文本部分已经在上一篇中将了,请参考【Windows编程】系列第三篇:文本字符输出。 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我们知道,HD
程序员互动联盟
2018/03/13
3.7K0
【Windows编程】系列第五篇:GDI图形绘制
MFC控件第一讲.DC编程
  DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的. DC可以简单理解为.没一个窗口程序都有一块内存用于绘制.我们只需要获取这块内存即可.
IBinary
2019/05/25
1.2K0
MFC Windows 程序设计->取消对GDI对象的选定
It's important to delete the GDI objects you create, but it's equally important to never delete a GDI object while it's selected into a device context. Code that attempts to paint with a deleted object is buggy code. The only reason it doesn't crash is that the Windows GDI is sprinkled with error-checking code to prevent such crashes from occurring.
井九
2024/10/12
1030
GDI编程
由于最近一直在搞GDI(GDI+)和图片处理的东西,怕自己忘记(其实已经忘得差不多),就仿照网上的BITMAPINFO查看器,写了个东西。 工程下载地址:点击打开链接 运行效果如图: 虽然比较(很)难
_gongluck
2018/03/08
1.3K0
GDI编程
MFC中如何画带实心箭头的直线
工作中遇到话流程图的项目,需要画带箭头的直线,经过摸索,解决;思路如下: (1) 两个点(p1,p2)确定一个直线,以直线的一个端点(假设p2)为原点,设定一个角度 (2)以P2为原点得到向量P2P1(P),向量P旋转theta角得到向量P1,向量P旋转-theta角得到向量P2 (3)伸缩向量至制定长度,平移变量到直线的末端 (4)现在已经有3个点了,画线就可 具体代码如下: void CworkflowDlg::DrawLine(CPoint p1, CPoint p2) { CClie
用户1198337
2018/01/19
2K0
【愚公系列】2023年12月 GDI+绘图专题 图形图像编程基础
本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础、C#图像处理基础以及简单的图像处理技术。
愚公搬代码
2023/12/22
1.1K0
CSharp代码示例每日一讲: 在GDI+中使用填充Fill方法
CSharp代码示例每日一讲,为刚刚学习编程的人准备,利用最简单的代码介绍CSharp编程知识! 画笔Pen被用来绘制图形、形状,画刷用来填充图形形状的内部。今天,我们将介绍图形类的填充方法。您只能填充某些图形形状;在Graphics类中只有少量的填充方法。 FillCloseCurve方法 FillCloseCurve填充曲线的内部,填充曲线的第一个参数是画刷,它可以是实心画刷solid brush, 影线画刷hatch brush, 或者渐变画刷gradient brush。第二个参数是绘制点的数组,第
程序你好
2018/07/20
1.6K0
基于VC2019开始C++之第一个MFC程序(画图)
以下内容参考https://blog.csdn.net/qq_36556893/article/details/89946636
心跳包
2021/02/07
3.9K0
Win32知识之窗口绘制.窗口第一讲
  在学习Win32的时候. 很多操作都是窗口进行操作的.那么今天就说一下窗口的本质是什么. 
IBinary
2018/09/28
1.6K0
Win32知识之窗口绘制.窗口第一讲
MFC俄罗斯方块
使用MFC设计一款俄罗斯方块。实现方块下落,方块移动,方块叠加,方块变形,消行等功能。
立羽
2023/08/24
2220
MFC俄罗斯方块
EasyX图形库学习(一)
EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。
走在努力路上的自己
2024/02/03
6780
EasyX图形库学习(一)
CListCtrl自绘「建议收藏」
第一种:使用WM_ERASEBKGND消息 + NM_CUSTOMDRAW消息配合自绘
全栈程序员站长
2022/09/09
1.4K0
CListCtrl自绘「建议收藏」
CSharp代码示例每日一讲: 在GDI+中使用画笔和画刷
CSharp代码示例每日一讲,为刚刚学习编程的人准备,利用最简单的代码介绍CSharp编程知识! 画笔和画刷是图形应用中最常用的两种对象。笔用于绘制图形对象的轮廓,如线条和曲线;刷子是用来填充图形对象的内部区域(例如,填充矩形或椭圆形)。在本文中,我们将讨论如何创建和使用各种类型的画刷和画笔。 我们首先讨论画刷、画笔的类型,它们的方法和属性,以及如何在GDI+中创建和使用它们。 GDI+提供Pen和Pens 类来表示和描述画笔。在本文中,我们将讨论如何使用Pen类及其属性创建不同种类的画笔,以及如何使用Pe
程序你好
2018/07/20
1.5K0
MFC控件编程之鼠标跟键盘消息
学习过MFC原理的应该知道.这里可以添加消息. 自己可以手动添加.我们也可以使用向导来添加.
IBinary
2019/05/25
1.6K0
任务管理器编码详解
模仿windows任务管理器制作一个任务管理器软件。设计语言不限。 二知识要求    Windows编程,MFC编程,API调用 三.开发环境 使用Microsoft Visual Studio 2013的开发环境,模拟Windows的任务管理器。首先分析进程管理器软件的相关功能;其次,综合运用以前所学的相关知识,广泛查阅资料。 四.主要功能及实现思路 4.1设计要求实现的主要功能进程管理功能,具体包括以下内容: (1) 使用系统API。 (2) 制作出相应的图形用户界面。 (3) 至少包括三个功能: 获取
用户1631856
2018/04/12
2.1K0
MFC绘图小实验(3)
1,使用默认的文本背景模式,在点(-200,20)处输出黄底红字“Computer Graphics Based on VC++”;在(50,20)处输出黄底红字“BoChuang Research Institute”;使用透明文本背景模式在(-200,-20)处输出黑色整数5和8;在(0,-20)处输出黑色双精度浮点数(5.2,8.3)。 CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM
Zoctopus
2018/06/04
5110
相关推荐
图像处理程序框架—MFC相关知识点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验