C# GDI在控件上绘图
本文以以在chart控件上和窗体上画矩形为例子
不多解释了,代码很简单。
还有一些童鞋要别的源码,给我发邮箱吧
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration; namespace WFApp2
{
public partial class data : Form
{
public data()
{
InitializeComponent();
//窗体
g = this.CreateGraphics();
//chart控件
g2 = this.chart1.CreateGraphics();
} public Point firstPoint = new Point(, ); //鼠标第一点
public Point secondPoint = new Point(, ); //鼠标第二点
public bool begin = false; //是否开始画矩形
/// <summary>
/// 在from上画矩形
/// </summary>
Graphics g; /// <summary>
/// 在chart1控件上画矩形
/// </summary>
Graphics g2; /// <summary>
/// 在窗体上按下鼠标事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void data_MouseDown(object sender, MouseEventArgs e)
{
begin = true;
firstPoint = new Point(e.X, e.Y);
} /// <summary>
/// 在窗体上鼠标移动开始绘图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void data_MouseMove(object sender, MouseEventArgs e)
{
if (begin)
{
//清除窗体绘图面,相当于刷新了一次窗体界面然后重新绘制
g.Clear(this.BackColor);
//获取新的右下角坐标
secondPoint = new Point(e.X, e.Y);
//获取两个数中的大者或小者
int minX = Math.Min(firstPoint.X, secondPoint.X);
int minY = Math.Min(firstPoint.Y, secondPoint.Y);
int maxX = Math.Max(firstPoint.X, secondPoint.X);
int maxY = Math.Max(firstPoint.Y, secondPoint.Y); //画框
g.DrawRectangle(new Pen(Color.Red), minX, minY, maxX - minX, maxY - minY);
//ControlPaint.DrawReversibleFrame(new Rectangle(minX, minY, maxX - minX, maxY - minY),this.BackColor,FrameStyle.Dashed); }
} /// <summary>
/// 鼠标松开停止绘图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void data_MouseUp(object sender, MouseEventArgs e)
{
begin = false;
} /// <summary>
/// 在chart控件上移动鼠标绘图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
if (begin)
{
//重新在chart上面绘图,此处不能用clear方法,clear会清除整个绘图界面chart控件会被清除
this.Refresh();
//获取新的右下角坐标
secondPoint = new Point(e.X, e.Y);
int minX = Math.Min(firstPoint.X, secondPoint.X);
int minY = Math.Min(firstPoint.Y, secondPoint.Y);
int maxX = Math.Max(firstPoint.X, secondPoint.X);
int maxY = Math.Max(firstPoint.Y, secondPoint.Y); //画矩形
g2.DrawRectangle(new Pen(Color.Red), minX, minY, maxX - minX, maxY - minY); }
} /// <summary>
/// 鼠标松开停止绘图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
begin = false;
} /// <summary>
/// 在chart控件上按下鼠标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
begin = true;
firstPoint = new Point(e.X, e.Y);
} }
}
C# GDI在控件上绘图的更多相关文章
- 如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置
用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局. 但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置. 在处理子窗口鼠标事件时变的很麻烦.主 ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
今天关闭一个窗体,报出这样的一个错误"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke.",这个不用多想,肯定是那个地方没有释放掉.既然碰到这个问题, ...
- [MFC] MFC 打开HTML资源(用ID版,也可加载到自己的web控件上)
@ ^ @:如果是加载到web控件上,就把注释掉的解除注释(改为web控件点后面的函数),把下一句注释 BOOL Button::LoadFromResource(UINT nRes){//打开网页加 ...
- Cocos2dx 把 glview 渲染到 Qt 控件上(Mac 环境)
本文原链接:http://www.cnblogs.com/zouzf/p/4423256.html 环境:Mac 10.9.2 Xcode5.1.1 Qt5.3 cocos2dx-2.2.4 ...
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法
以下是错误报告: 标题: SQL Server 安装程序失败. ------------------------------ SQL Server 安装程序遇到以下错误: 在创建窗口句柄之 ...
- 05_android入门_GET方式实现登陆(在控件上显示服务端返回的内容)
当点击登陆之后,怎么把server端返回的数据,写到指定的控件上尼?,在android怎么实现尼?以下我们通过详细的代码进行分析和实现,希望能对你,在学习android知识上有所帮助. 以下通过代码说 ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
本文转载:http://blog.csdn.net/playing9c/article/details/7471918 http://blog.csdn.net/beelinkerlidejun/ar ...
- VC/MFC 当鼠标移到控件上时显示提示信息
VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...
- 在GridControl控件上绑定图片的几种操作方式
我们知道,基于DevExpress的开发Winform的项目界面的时候,GridControl控件是经常用来绑定数据的,一般以常规的字符内容为主,有时候也会有图片的显示需要,那么如果显示图片,我们应该 ...
随机推荐
- Eclipse的SVN插件安装
两种方法: 首先下载安装到eclipse的svn插件包,包里会有“plugins”和“features”两个文件夹,安装时要用到. 1.然后找到eclipse目录下的同名文件夹“plugins”和“f ...
- Java中的路径问题
Java中的路径问题 代码说明,如下: package com.merlin.test; import java.io.InputStream; public class Test { public ...
- Java 断点调试总结
为了准备调试,你需要在代码中设置一个断点先,以便让调试器暂停执行允许你调试,否则,程序会从头执行到尾,你就没有机会调试了. 1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头 ...
- effective c++:inline函数,文件间编译依存关系
inline函数 inline函数可以不受函数调用所带来的额外开销,编译器也会优化这些不含函数调用的代码,但是我们不能滥用Inline函数,如果程序中的每个函数都替换为inline函数那么生成的目标文 ...
- Spring Batch的事务-Part 1:基础
原文 https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-basics/ This is th ...
- Spark on Yarn遇到的几个问题
1 概述 Spark的on Yarn模式,其资源分配是交给Yarn的ResourceManager来进行管理的,但是目前的Spark版本,Application日志的查看,只能通过Yarn的yarn ...
- [转]Numpy中矩阵对象(matrix)
numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...
- URAL-1989 Subpalindromes 多项式Hash+树状数组
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1989 题意:给出一个字符串,m个操作:1,修改其中一个字符串,2,询问 [a, b] 是 ...
- datagrid url json
<div class="easyui-accordion" style="width:500px;height:300px;"> <div t ...
- UVALive 7455 Linear Ecosystem (高斯消元)
Linear Ecosystem 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/B Description http://7xj ...