GDI+绘制可滚动的窗口】的更多相关文章

在winform中绘制图形,可以使用gdi+来完成. 当绘制的图形大于目前窗口大小时,就需要滚动条来帮忙显示. 设置属性:Form.AutoScrollMinSize为要显示内容的大小. private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;…
只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Fo…
C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经过不少的计算过程.利用下面的类可以实现该功能. using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; namespace RotateText { p…
通过上面的效果截图可以看到,重绘后的MenuStrip和ContextMenuStrip可以添加自己的LOGO信息,实现了类似OFFICE2007的菜单显示效果. .NET对菜单控件的绘制提供了一个抽象类ToolStripRenderer,这个类里面提供了相应的绘制函数,只要重写这些函数,就可以实现菜单的重绘.MenuStrip和ContextMenuStrip提供了一个属性Renderer,该属性就是由ToolStripRenderer定义的,MenuStrip和ContextMenuStri…
双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像.图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码: HRESULT OnDraw(ATL_DRAWINFO& di)    {        RECT& rc = *(RECT*)di.prcBounds;        // 将剪…
MFC 用gdi绘制填充多边形区域 这里的代码是实现一个三角形的绘制,并用刷子填充颜色 在OnPaint()函数里面 运用的是给定的三角形的三个点,很多个点可以绘制多边形 CBrush br(RGB(40,130,170)); CRgn rgn; CPoint arrpt[3]; arrpt[0].x = m_rcAT.right-8; arrpt[0].y = m_rcAT.top+m_rcAT.Height()*2/5; arrpt[1].x = arrpt[0].x - 12; arrpt…
2018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发.这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷得浮生半日休闲吧.先来看看效果图吧: 这是直接在Winform的基础上进行绘制的.接下来,我对时钟进行了封装,封装成一个名为CSharpQuartz的类,效果如下: 这是把时钟封装后,实现的一种效果,CSharpQuartz内部开辟了一个线程,与系统时间,保持同步,每秒刷新一次.所采用的技术也就是G…
背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 —— 不能消除锯齿 g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.CompositingQuality = Compositing…
C#GDI+ 绘制线段(实线或虚线).矩形.字符串.圆.椭圆 绘制基本线条和图形 比较简单,直接看代码. Graphics graphics = e.Graphics; //绘制实线 )) { pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; //实线 graphics.DrawLine(pen,,,,); } //画出虚线 )) { pen.DashStyle = System.Drawing.Drawing2D.DashSty…
纯代码实现GDI绘制仪表盘,效果在代码下面. public partial class HalfDashboardUc : UserControl { /// <summary> /// 仪表盘背景图片 /// </summary> private Image dashboardImage; /// <summary> /// 定义该仪表盘画布的最大值为371 /// </summary> ; /// <summary> /// 仪表盘画布的放大…
/*使用GDI绘制半透明矩形*/ void CDirectXDraw::DrawHalfOpacityRect(HDC hdc,CRect rect) { CDC dc; dc.Attach(hdc); CDC cdc; cdc.CreateCompatibleDC( &dc ); CBitmap bitmap, *pOldBitmap; bitmap.CreateCompatibleBitmap( &dc, rect.right, rect.bottom ); CRect src( re…
在默认情况下,Gdi绘画操作的使用白纸(窗口的客户区)黑字(Pen的颜色)!前面我们已经讲过如何改笔,现在来学习改变白纸(GDI的绘制区域) 正常的纸为一个矩形形状!有时候小孩不小心撕掉纸的一角,不小心被纸中间掏空了,又或者纸被剪成了艺术品,比如: 如果在这样的图片上垂直方向的中央划一根4个像素的黑色的线条讲呈现出下面的效果 黑色的线条被纸分层了若干段,因为白色的部分不是纸! Winodws提供的绘制区域也就是相当于上面提到的纸!其中可用函数的的有 hRgn = CreateRectRgn(xL…
早些年用过GDI的同学都知道,用GDI绘图API函数画斜线那个锯齿有多恶心.就像下图第一行的三条斜线: 坦白说,45度斜线在抗锯齿以前还是蛮抗锯齿的,哈哈,抗不抗都没什么差别. 那第二行很自然就看得出是抗锯齿之后的效果. 话不多说,直接给大家上代码. 创建Win32应用程序,在cpp文件的顶部加入GDI+的引用: #include <windows.h> #include <objidl.h> #define GDIPVER 0x0110 #include <gdiplus.…
首先展示一下效果图如下: C#中的GDI特别方便,很多方法我们只要简单的调用就可以实现很复杂的功能.具体实现过程如下: 首先创建一个windows窗体应用(测试使用,实际开发winform程序时在需要的窗口添加控件即可). 因为GDI工具绘制出的验证码是图片类型的,所以我们要添加一个picturebox控件. 这里我们编辑GDI的click事件,这样可以实现点击重新生成验证码. 1.验证码的位数可以自己随便设置.因为验证码是随机产生的,所以要使用到Random类.直接上代码(这里我选择的是生成4…
现有一种场景,鼠标移动时,假设鼠标坐标为 X , Y , 需实时在 坐标 (X , 0) , (0 , Y) 两处更新内容. 方案一:增加两个label ,或其它控件,鼠标移动时,实时更新 label 坐标区域 , 及内容. MouseMove 事件代码: lblX.Location = ); lblY.Location = , e.Y); lblX.Text = e.X.ToString(); lblY.Text = e.Y.ToString(); 经过检单测式,鼠标移动时,CPU 升到 10…
这个是绘制一条直线的代码 private void Form1_Load(object sender, EventArgs e)        {            //一根笔 颜色  一张纸  两点 绘制直线的对象        }        /// <summary>        /// 绘画一条直线        /// </summary> public void Straight()        {            //Graphics: 此类不能被继承…
上网查了一圈也没有找到解决问题的办法,一旦创建了一个窗口,并且在过程函数中绘制窗口,尤其是一些非子窗口的自定义类窗口,都会生成11个窗口(算上主窗口就是12个),但是使用系统通用控件就不会有这种情况的发生,且绘制的过程都写在WM_CREATE里面了,那么可以间接证明,在程序被初始化知道主窗口被显示之后,该进程一共发送了11条WM_CREATE消息.假设是这样的话,那么使用系统的控件怎么就不会发生这种现象呢?按照这种思路,当主窗口被创建之前,会初始化自定义类,且该主窗口会对应唯一的一个过程函数,那…
根据采集到的数据绘制曲线 在串口编程中会涉及到这样一个问题,就是将采集到的数据以曲线的形式展示出来,大家自然而然会想到采用方便快捷的控件进行编程.编程周期短,完成任务快,但是真实情况来看,控件会实现很多你用不到的功能,实现机制也不可见,这样在功能上会造成浪费,对性能和实现的效果上会有一些不可控,所以在这一类编程中建议自己通过设备上下文自己编写适合自己软件的曲线图. 我要实现的功能如下图: 这是一个在网上下载的例程运行的效果,我中间采用的编程思想大多来源这里,只是针我要实现的功能进行了修改.因为我…
GDI+可以再Windows窗体应用程序中以编程方式绘制图形等. 可以在VS里新建项目-Windows窗体应用程序-建一个窗体.首先引入命名空间using System.Drawing.Imaging;using System.Drawing.Drawing2D; 1.绘制矩形 可以再Form窗体的Paint事件中添加以下代码 private void Form1_Paint(object sender, PaintEventArgs e)        {            // 创建钢笔…
最近接了个小项目10K.用了2个下班时间写完,共花费了6-7个小时完成.如有同类需求的可以与本人联系,QQ:120772981 功能目标: 需要写一个仿PPT画泳道图的组件.之前写过工作流的组件,其实这个跟工作流组件基本一样,所以写这个也得心应手.PPT的效果图如下, 在C#winform里面想要及支持手动拖拽又要只支持自定义的一些功能, 很会想到拖拽控件,控件直接放图片不就的了吗?这样也可以, 但后续控件元素越来越大的时候,可能会出现控件闪屏,严重的可能性能都跟不上,再有如果用户需要放大和缩小…
最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大概介绍一下原因,GDI画矩形框就不说了,很简单的.这里面最主要的就是滚轮放大和左键移动两个事件,要计算矩形框的坐标位置.下面将代码贴出如下: 先是定义需要的变量,就四个变量. //矩形框坐标        private Rectangle DrawRect = new Rectangle(0, 0…
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Drawing; using System.Drawing.Drawing2D; public partial class _Default : System.Web.UI.Page { prot…
//绘制panel控件触发的事件 //不可在窗体加载时绘制方格        private void panel1_Paint(object sender, PaintEventArgs e)        {            int rowNum = 12;//行数            int colNum = 15;//列数: Pen pen = new Pen(Color.Black);//实例化一个“画笔”            Brush brushes = new Soli…
将下面的代码拷贝到一个单元中,创建一个包,加入这个单元后安装.使用的时候设置好背景颜色,边框颜色,图标(png格式)相对路径的文件名称.这个控件可以利用PNG图像的颜色透明特性,背景色默认透明度为50%,可以将按钮后面的内容显示出来.GDIPAPI, GDIPOBJ, GDIPUTIL三个单元可用万一的博客上寻找下载地址. unit u360StyleButton;  interface    uses    SysUtils, Classes, Controls, StdCtrls,Graph…
/// <summary>        /// 定义一个绘制文本        /// </summary>        public void Texts()        {            Graphics g = this.CreateGraphics();            g.DrawString("嘿嘿,O(∩_∩)O哈哈~",new Font("楷体",20),Brushes.Black,new Point(20…
最近遇到使用zxing生成的一维条码打印出来的条码图形很模糊根本识别不了.其实原因只有一句话: bitmap没有直接使用PrintDocument的Graphics画布进行绘制,而是中间处理了一下外部传过来一个图片,这个图片看起来很成像质量很好,但其实是一个彩色图片,一维条码是由黑白两种颜色组成的,没有灰度是两种纯色.这样打印出来的图片看起来有毛刺,直线不连续了.解决方法是减少中间环节直接把zxing生成的bitmap对象使用"PrintDocument的Graphics画布"绘制.P…
Unity游戏视窗控制台输出 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新!助力快速在 Game 视窗用 GUI 实现一个控制台的输出面板为新手节省宝贵的时间,避免采坑! Chinar 教程效果:(可打包后执行-便于调试) 1 Script -- 直接脚本挂载到空物 2 Print / Debug -- 打印输出 支持 May Be -- 搞开发,总有一天要做的事…
五星红旗是由红色背景,加5个黄色五角星组成.绘制一个五星红旗的思路,就是先定义一个五角星的自定义控件,然后通过设置五角星的大小.位置.旋转角度等属性,组合成一个五星红旗. 五角星自定义控件代码: public partial class MyStar : Control { public MyStar() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe)…
新建一个用户控件: public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); //设置控件区域 GraphicsPath path = new GraphicsPath(); path.AddPie(0, 0, this.…
//创建GDI对象 Graphics g = this.CreateGraphics();// new Graphics(); //创建画笔对象 Pen pen = new Pen(Brushes.Red); //创建两个点 Point p1 = new Point(30, 50); Point p2 = new Point(250, 250); g.DrawLine(pen, p1, p2); Graphics g = this.CreateGraphics(); g.DrawString("…