用GDI+划直线

Windows GDI绘图基础与轻量进阶 GDI 是 Graphics Device Interface 的缩写,称为图形设备接口,主要用来绘图,由动态链接库 GDI32.DLL 提供支持。 GDI 就是一个函数库,提供了很多绘图函数(也就是GDI32.DLL 中的导出函数),上节使用的 TextOut 就是其中之一。GDI 非常重要,不但应用程序使用它来绘图,Windows 本身也使用GDI来显示用户界面,比如菜单、滚动条、图标和 阅读详情

下面是代码,很容易看懂的,没有必要进行解释了吧。:)

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;


    
public class Line : System.Windows.Forms.UserControl
    
{
        
/// <summary> 
        
/// Required designer variable.
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Line()
        
{
            
// This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            SetStyle(ControlStyles.AllPaintingInWmPaint 
| ControlStyles.UserPaint | ControlStyles.FixedHeight | ControlStyles.FixedWidth | ControlStyles.ResizeRedraw, true);
            SetStyle(ControlStyles.Selectable, 
false);
            TabStop 
= false;
        }


        
/// <summary> 
        
/// Clean up any resources being used.
        
/// </summary>

        protected override void Dispose(bool disposing)
        
{
            
if (disposing)
            
{
                
if (components != null)
                
{
                    components.Dispose();
                }

            }

            
base.Dispose(disposing);
        }


        
Component Designer generated code

        
protected override void OnPaint(PaintEventArgs e)
        
{
            
base.OnPaint(e);

            
int x1, x2, x3, x4, y1, y2, y3, y4;
            
if (LineStyle == LineStyle.Horizontal)
            
{
                x1 
= 0;
                y1 
= 0;
                x2 
= ClientRectangle.Width;
                y2 
= 0;

                x3 
= 0;
                y3 
= 1;
                x4 
= ClientRectangle.Width;
                y4 
= 1;
            }

            
else //if (LineStyle == LineStyle.Vertical)
            {
                x1 
= 0;
                y1 
= 0;
                x2 
= 0;
                y2 
= ClientRectangle.Height;

                x3 
= 1;
                y3 
= 0;
                x4 
= 1;
                y4 
= ClientRectangle.Height;
            }


            
using (Pen p = new Pen(m_FirstColor, 1))
            
{
                p.DashStyle 
= mDashStyle;
                e.Graphics.DrawLine(p, x1, y1, x2, y2);
            }

            
using (Pen p = new Pen(m_SecondColor, 1))
            
{
                p.DashStyle 
= mDashStyle;
                e.Graphics.DrawLine(p, x3, y3, x4, y4);
            }

        }


        
private System.Drawing.Drawing2D.DashStyle mDashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
        
public System.Drawing.Drawing2D.DashStyle DashStyle
        
{
            
get { return mDashStyle; }
            
set { mDashStyle = value; Invalidate(); }
        }


        
private Color m_FirstColor = Color.FromKnownColor(KnownColor.ControlDark);
        
public Color FirstColor
        
{
            
get { return m_FirstColor; }
            
set { m_FirstColor = value; Invalidate(); }
        }


        
private Color m_SecondColor = Color.FromKnownColor(KnownColor.ControlLightLight);
        
public Color SecondColor
        
{
            
get { return m_SecondColor; }
            
set { m_SecondColor = value; Invalidate(); }
        }


        
private LineStyle m_LineStyle = LineStyle.Horizontal;
        
public LineStyle LineStyle
        
{
            
get { return m_LineStyle; }
            
set
            
{
                m_LineStyle 
= value;
                Size 
= new Size(Height, Width);
                Invalidate();
            }

        }


        
protected override void OnSizeChanged(EventArgs e)
        
{
            
base.OnSizeChanged(e);

            ChangeControlSize();
        }


        
private void ChangeControlSize()
        
{
            
if (LineStyle == LineStyle.Horizontal)
                Height 
= 2;
            
else if (LineStyle == LineStyle.Vertical)
                Width 
= 2;
        }

    }


    
public enum LineStyle
    
{
        Horizontal 
= 1,
        Vertical 
= 2
    }


深入了解GDI 图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形。正如您所认为的那样,GDI是Windows非常重要的部分。不只您为Windows编写的应用系统在显示视觉信息时使用GDI,就连Windows本身也使用GDI来显示使用者接口对象,诸如菜单、滚动条、图标和鼠标光标。 GDI原理 Windows 98和Micro... 阅读详情

相关推荐

10步轻松掌握C# GDI+直线插补运动模拟:新手也能行?

为了让用户可以自定义直线的起点和终点,可以在窗体上放置几个文本框控件,分别用于输入X轴和Y轴上的坐标值。同时,还需要一个按钮来启动绘图过程。// 触发重绘} else {MessageBox.Show("请输入有效的整数坐标!");综上所述,通过上述十个步骤,你就能够成功创建一个简单的C# GDI+直线插补运动模拟啦!当然,实际应用中还有很多细节需要注意,比如确保程序具备足够的权限去访问目标进程、避免因频繁读写造成性能问题等。但无论如何,希望这篇指南能为你开启一扇通往编程世界的新大门。

java专栏 2012

C# Winform GDI+ 绘图

Graphics类是GDI+技术的一个基本类。GDI+(Graphics Device Interface)是.NET框架的重要组成部分,提供对二维图形图像和文字排版处理的支持。System.Drawing.Drawing2D: 提供了高级的二维和矢量绘图功能(比如渐变、 图案填充、- 轨迹等)System.Drawing:提供了最基本的绘图功能(比如画直线、矩形、椭圆等);System.Drawing.Printing: 提供与打印相关的服务。System.Drawing.Text: 提供排版功能。

熊思雨的博客 1万+

掌握GDI+:绘制不同斜率直线的技巧与实践

图形设备接口(GDI)是Windows操作系统中的一个组件,它负责处理程序中的图形输出。GDI+是GDI的改进版本,增加了对更高级图形的支持,比如2D图形、图像处理、文本渲染和矢量图形。本章将介绍GDI+图形库的基础知识,并探讨如何使用它来绘制图形元素。GDI+为开发者提供了强大的工具来创建复杂的图形应用程序,无论是简单的线条还是复杂的动画,都可以通过GDI+轻松实现。了解GDI+的工作原理和API可以帮助我们更好地控制图形输出,以及优化应用程序的图形性能。

weixin_42588555的博客 1145

python画笔入门教程_c#教程之画笔|python基础教程|python入门|python教程

本站最新发布 C#从入门到精通试听地址https://www.xin3721.com/eschool/CSharpxin3721/5.1 画笔Pen类对象指定绘制的图形外轮廓线宽度和颜色。Pen类有4个构造函数,分别是:l publicPen(Color color);//建立颜色为color的笔,宽度默认为1l publicPen(Color color,float width)...

weixin_39924329的博客 422

易语言实现GDI+直线与方框绘制教程

在计算机图形学领域,GDI+(Graphics Device Interface Plus)是微软推出的一套图形接口库,它提供了一系列用于创建和处理图形的类和方法。GDI+是GDI(Graphics Device Interface)的增强版,它不仅支持2D图形绘制,还增加了对图像处理和文本渲染的高级功能。GDI+图形库在Windows平台上广泛应用于软件界面设计、图像处理以及打印预览等领域。

weixin_42515842的博客 825

GDI+ 动态 绘制直线

GDI+ 动态 绘制直线

GDI+ 中基本图形绘制

GDI+ 中基本图形绘制

编程猿来如此 3102

Windows批处理脚本实战:用Ping命令打造简易网络监控工具(附完整代码)

本文介绍如何利用Windows批处理脚本和Ping命令,快速构建一个轻量级、自动化的网络监控工具。该方案无需额外安装软件,通过周期性探测目标IP连通性,并将结果(成功、失败及延迟)自动记录到带时间戳的日志文件中,适合中小团队或临时监控需求,实现低成本、高效率的网络状态监控。

5f4d3s2a1q的博客 494

gdiplus画直线

转自:https://blog.csdn.net/yao_yu_126/article/details/10279287 1. 创建MFC应用程序, CMyApp 2. 在stdafx.h文件中加入GDI+支持 //GDI+支持 #include <gdiplus.h> using namespace Gdiplus; #pragma comment (lib,"Gdiplus...

martinkeith的博客 865

DeepSeek-V4-Pro 正式版突袭上线:Agent 能力暴涨,DeepSWE 直接干翻 Claude Opus 4.8

8 月 12 日深夜,DeepSeek 悄悄在 API 文档里上架了一个新版本号——DeepSeek-V4-Pro-0813。第二天(13 日),这个版本被确认为 V4 Pro 正式版。没有发布会,没有预热,只改了版本号,就把整个 AI 圈的注意力又抢了过去。

2601_96613114的博客 839

植物叶绿体基因组分析全攻略:从共线性到密码子偏好性

本文全面解析植物叶绿体基因组分析流程,从共线性分析到密码子偏好性研究。详细介绍了叶绿体基因组结构特征、测序数据获取与质量控制、基因组组装与注释方法,以及比较基因组学和进化分析技术。特别关注IR区边界变异分析和选择压力评估,为植物系统发育研究和物种鉴定提供实用指南。

weixin_28475533的博客 222

GDI+ 动态绘制直线

绘制直线的语句其实非常简单: newgraphics.DrawLine(new Pen(Color.Black), startPoint, new PointF(e.X, e.Y)); 但是直接使用DrawLine函数,绘制的直线不能看到绘制过程,所以应该进行优化。 1. 我们在程序中使用一个pictureBox控件 2. 我们在主类中定义需要全局使用的变量

koastal的博客 5245

”COMSOL“竟然如此简单!我悟了!!

COMSOL Multiphysics具有强大的多物理场全耦合仿真分析功能、高效的计算性能,可以保证数值仿真的高度精确,已被广泛应用于各个学科领域,近年来运用COMSOL来解决电化学实际工程问题也越来越普遍。

C1012562281的博客 3448

VB6.0 【GDI+ 画直线】

‘窗口代码 Option Explicit Dim m_graphics As Long '设备场景的句柄 Dim m_Pen As Long '画笔 Private Sub Form_Load() InitGDIPlus '初始化 GdipCreateFromHDC Me.hDC, m_graphics '创建自DC图形 GdipCreatePen1 ChangeColo

yciyuan 3845

机器人动力学与控制学习笔记(一)————机器人控制概述

一、概述 1、机器人控制的目的 对自由运动机器人来说,控制的目的是要控制机器人手端的位置和姿态(以后统一简称为位姿),即所谓位置控制问题。这时希望机器人手端所达到的位置称为期望位置或期望轨迹。期望轨迹可以在机器人任务空间中给出,也可以通过逆运动学关系转化为机器人关节空间中的期望轨迹。期望轨迹通常有两种形式:一种是一个固定位置(即固定点),另一种是一条随时间连续变化的轨迹。自由运动机器人位置控制的目的,是要使机器人手端从任意起始位置出发都能到达期望轨迹。当期望轨迹是固定点时的位置控制称为定...

冰与火的青春的博客 6882

华为OD机试 - 文件存储系统的排序 - 深度优先搜索dfs(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 719

[学习笔记] Windows编程——GDI——(九)直线和曲线

学习笔记,随时更新。如有谬误,欢迎指正。说明:红色字体。

cxsydzn的博客 845

智能门禁:AI Agent的访客意图识别

随着人工智能技术的飞速发展,智能门禁系统已经成为现代安全管理的关键环节。本文深入探讨了AI Agent在访客意图识别中的应用,通过详细的分析和实例讲解,揭示了智能门禁系统的核心工作原理、算法实现及其在安全领域的重要作用。文章结构清晰,逻辑严谨,旨在为广大技术爱好者提供一次全面的技术盛宴。在当今社会,门禁系统已成为各类建筑和机构不可或缺的安全设施。随着信息安全意识的增强,传统门禁系统的局限性逐渐显现。例如,在访客管理方面,传统方法通常依赖于人工登记、身份验证等手段,不仅效率低下,而且容易出现漏洞。

AI架构师小马 711

C# GDI绘图

GDI+指的是.NET Framework 4.0中提供二维图形、图像处理等功能,是构成Windows操作系统的一个子系统,它提供了图形图像操作的应用程序编程接口(API)。使用GDI+可以用相同的方式在屏幕或打印机上显示信息,而无须考虑特定显示设备的细节。GDI+类提供程序员用以绘制的方法,这些方法随后会调用特定设备的驱动程序。GDI+将应用程序与图形硬件分隔,使程序员能够创建与设备无关的应用程序。GDI+主要用于在窗体上绘制各种图形图像,可以用于绘制各种数据图形、数学仿真等。

钢铁男儿 1379

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8817

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

抗锯齿直线绘制方法(一)

直线在数学上是一个抽象的概念,它是不占空间的,但在屏幕上绘制一条直线是以像素为空间单位的,所以绘制的直线呈现锯齿状,这样绘制的直线视觉效果不理想。Windows系统提供了Gdi+函数集,使用Gdi+函数绘制直线具有抗锯齿的效果,所绘制的直线看上去有平滑感,视觉效果比较理想。本文介绍如何不使用Gdi+函数,而在Gdi中直接绘制抗锯齿直线,使视觉效果与Gdi+函数绘制的直线相同,并确保绘图速度不差于Gdi+。

hzj58477的博客 1045

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

c# gdi+ 获取两点间直线任意位置的坐标

最近有个项目,需要用到gdi+画图,并在拖动 track bar 的时候在两点之间画一条直线,并根据 track bar 的值,在直线的对应位置显示一个移动的坐标点。 大致的解决思路如下: 1、确定两个点的连线属于坐标轴的第几象限,根据所在象限的不同根据起始点的坐标来判断移动坐标点的横纵坐标。 如图:黄色点为起始点,绿色点为终止点。 第一象限: 第二象限: 第三象限: 第四象限: 根据两个点之间的经纬度来判断属于第几象限。 private Quadrant G..

editoryang的专栏 2304

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

GDI+ 绘图方法

GDI绘直线步骤 创建GDI对象:Graphics g = this.CreateGraphics(); 创建画笔对象:Pen pen = new Pen(Brushes.Red); 创建两个点:Point p1 = new Point(20, 20); Point p1 = new Point(20, 20); 绘制直线:g.DrawLine(pen, p1, p2); GDI绘制矩形步骤...

喵毛的博客 2916

C# GDI+技术

GDI+是GDI(即Windows早期版本中附带的Graphics Device Interface)的后继者。它是一种构成Windows XP操作系统的子系统的应用程序编程接口(API)。

NetSuite 张老师 2062

C# GDI+ 画简单的图形:直线、矩形、扇形等

GDI+是一种绘图装置接口,  当拖动窗体是,窗体发生移动,window默认为从窗体移动到另一个地方,先发生擦除后再重新画一个窗体; 而我们自己动手画的图(如下面的线),不会重新画;在属性中,Paint,中,将画图的程序重新写一遍就可实现重画。 画一条线         private void button1_Click(object sender, EventArgs e)

有塔耶奥多的专栏 1万+

c#画直线

c#画直线 本文实例讲述了C#使用GDI绘制矩形的方法。分享给大家供大家参考。具体实现方法如下: 1 2 3 Pen p = new Pen(Color.Black,2); Graphics g = CreateGraphics(); g.DrawRectangle(p,200,200,100,100); 代码 ...

cxu123321的博客 8108
上一篇: 关于VS2005里面的FormClosing事件内添加对话框后重复执行的问题
下一篇: Licensing实例(一)
甴曱
博客等级 码龄24年 184粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值