- 博客(24)
- 资源 (4)
- 收藏
- 关注
原创 你真的知道数据在内存的存储顺序吗?
一:背景 话说昨天我居然奇迹般的去上C#课(老师是个美女,大家懂得....),感觉好久没去上她的课了,搞得自己都不好意思了,正好趁这个机会去看看她(不要多想哦,亲)。在课上,老师讲到个文件流的读写的例子,有一段代码引起了我的兴趣,以为是一个很简单的问题,但是运行的结果去让我很吃惊,我顿时有种冲动,想说一句:我靠,这啥玩意!哈哈 ,扯淡了,不多说了,下面我来还原下现场的情形:
2012-11-02 11:08:16
5056
2
原创 GDI+学习记录(17)-获取系统已安装的所有字体
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.White); g.SmoothingMode = SmoothingMode.AntiAlias;
2012-10-30 20:05:54
2145
原创 GDI+学习记录(16)-字体Font
字体,对于大部分人来说都不陌生,在文本编辑软件中(如 Word)字体是必不可少的,同样,在GDI+中,绘制字符串也是需要字体的。在介绍字体Font类的使用之前,先引入一些与其有关的类或者枚举: (1)字体系列 FontFamily: GDI+中将具有相同的样式成为字体系列,如我们常见的 “宋体”、“仿宋” 、“微软雅黑”、 “Arial”等。
2012-10-30 18:32:14
8042
原创 GDI+学习记录(15)-路径渐变画刷
同线性渐变画刷相比,路径渐变画刷的最大特点在于:线性渐变画刷的渐变方向比较单一(水平,垂直,固定角度),而路径渐变画刷的渐变方向是从路径中央到路径边缘,是一种呈发散状的渐变,所以在使用路径渐变画刷填充目标区域前,处理需要指定对象外,还要指定路径的中心点颜色以及路径边界的颜色。下面为路径渐变画刷的基本使用,构建一个中心点为红色的五角星: private void Form1_Paint
2012-10-29 13:37:02
4750
1
原创 GDI+学习记录(14)-线性渐变画刷之多色渐变
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.White); //定义渐变颜色数组 Color[] colors =
2012-10-29 13:08:05
4036
原创 GDI+学习记录(13)-线性渐变画刷 LinearGrandientBrush
线性渐变画刷的基本使用 Demo: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.White); Pen my
2012-09-21 12:17:20
2583
原创 GDI+学习记录(12)-纹理画刷TextureBrush的排列方式
在TextureBrush 类的构造函数的参数中,WrapMode 指定了画刷中基本图案的排列方式,GDI+ 的WrapMode 枚举提供了五种不同的排列方式: 具体的应用如下图所示: 使用上一章的金鱼图片进行填充,Demo: private void Form1_Paint(object sender, PaintEventArgs e)
2012-09-18 11:16:33
2714
原创 GDI+学习记录(11)- 纹理画刷 TextureBrush的基本使用
纹理画刷(TextureBrush)实际上就是将图片在目标区域进行平铺,同影线画刷(HatchBrush)类似,纹理画刷也是使用同样的基本图案在水平方向和垂直方向上进行一定顺序排列之后构成的画刷。不同的是,影线画刷使用的基本图案是由简单的点、线条构成的,其色彩也只有前景色和背景色。而纹理画刷使用的基本图案为导入的图片或导入图片的部分区域,色彩也是任意的。下为纹理画刷的基本使用Demo。Demo
2012-09-17 20:57:03
5459
原创 GDI+学习记录(10)- 影线画刷HatchBrush
影线画刷(HatchBrush)的基本使用: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.White); //构建第一种影线画刷
2012-09-17 19:47:46
6198
原创 GDI+学习记录(9)- 单色画刷 SolidBrush
单色画刷是五种画刷中最简单的一种,其由类 SolidBrush创建。创建的代码很简单,只用在创建过程中指明画刷的颜色即可。单身画刷主要用处体现在对图形区域的填充中,GDI+ 提供了以下几种填充函数,填充的时候主要把画刷对象作为参数即可,此处正好的体现出C#的完全的面向对象的思想。填充函数函数功能描述FillClosedCurve填充闭
2012-09-07 11:03:21
5100
原创 GDI+学习记录(8)- 画刷 Brush简介
画刷是用来填充区域的,在GDI+ 中,画刷分为五种: 单色画刷,也叫固体画刷(SolidBrush), 影线画刷(HatchBrush),纹理画刷(TextureBrush),线型渐变画刷(LinearGradientBrush),路径渐变画刷(PathGradientBrush)。这五种画刷全部都是由其共同的基类 Brush 类派生而来的,与画笔笔筒,画刷是用来填充区域的,所以画刷是没有宽度和长
2012-09-06 18:30:35
2331
原创 GDI+学习记录(7)- 直线连接点 LineJoin
LineJoin 枚举值及其含义 例程效果图: 例程: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.White);
2012-09-04 11:01:36
2831
原创 GDI+学习记录(6)- 画笔转换 Transform
private void button1_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); g.Clear(Color.White); Pen p = new Pen(Color.Red,6);
2012-09-02 12:41:36
2339
原创 GDI+学习记录(5)- 画笔线帽 LineCap
线帽”(LineCap),顾名思义,就是线条首尾的外观,在默认的情况下,使用画笔绘制出的直线,其起点和终点都是相同的---方形。在GDI+中,可以通过修改画笔的 StartCap 属性来设置起点的线帽,通过修改EndCap来设置终点的线帽。不同外观的线帽是有LineCap 枚举列出的,其定义如下表:成员说明AnchorMask指定用于检查线帽是否为锚头帽的掩
2012-09-02 12:37:55
6992
1
原创 GDI+学习记录(4)-画笔对齐 PenAlignment
由于画笔是有宽度的,相对于绘制线条来说,画笔宽度方向上的中心位置是由其对齐方式来决定的,在GDI+中,画笔对齐方式是有枚举 PenAlignment 来描述的,PenAlignment 定义表如下所示:成员说明Center指定 Pen 对象以理论的线条为中心。Inset指定 Pen 被定位于理论的线条内。Outset指定将 P
2012-09-02 12:03:36
2913
原创 GDI+学习记录(3)-画笔线型 DashStyle
通过使用Pen 类的属性DashStyle 可以设置或者访问画笔的线型,GDI+ 在 DashStyle 枚举中提供了5中常见的画笔线型风格,DashStyle 不同的枚举值及其含义如下表所示: DashStyle 不同的枚举值 成员 说明Solid指定实线Dash指定由划线段组成的直线
2012-09-01 11:05:18
11971
1
原创 GDI+学习记录(2)-画笔 Pen
画笔(Pen)用于描述图形的轮廓,GDI+的画笔除了有常见的色彩和宽度属性外,还添加了其他的属性,如对齐方式、线帽、变换方式等高级属性。 private void button1_Click(object sender, EventArgs e) { //创建Graphics对象 Graphics g = this.Crea
2012-09-01 10:55:22
1959
原创 GDI+学习记录(1)-Graphics
GDI+的核心 Graphics Graphics类是GDI+的核心,其能够完成大部分的绘图、文本输出、几何图形的填充、坐标的转换等操作,在功能上,其与GDI中的DC(设备环境句柄 Device Context)是一致的,可以把其理解为一张绘图所需的“图纸”,各种绘图操作都是在这张“图纸”上进行的,这里笔者把其称为“绘图平面”。 Graphics类的构造方法有如下几种
2012-09-01 10:14:18
2352
原创 GDI+学习记录---前言
GDI+学习记录---前言 每次上QQ的时候(虽然自己平时不怎么上),总觉得他的界面UI写的很漂亮,也很想学习下他的界面是如何编写的,于是就有了这篇文章(或者这个系列)。以前用Delphi Pascal 零零碎碎的学过GDI+,但是没有完整的、系统的学习,这次打算把自己在学习GDI+过程中学到的知识给记录下来,增加自己的印象,俗话说的好,好记性不如烂笔头,本人深有此感。
2012-08-31 21:05:01
2054
原创 一种你不知道的解决窗体闪烁的方法
今天在逛优快云论坛的时候,发现有人提出用 SystemParametersInfo 这个API函数 来解决窗体闪烁的问题。由于好奇笔者就查看 SystemParametersInfo 这个函数的文档,当我看到了 其中的2个参数常量的时候 终于明白这货是怎么一回事了。涉及到SystemParametersInfo 函数的2个参数常量如下: SPI_GETDRAGFULLWIND
2012-08-10 11:49:13
5488
原创 浅谈C#中的双缓冲
在编程当中,或多或少会接触到图像编程,对于图像编程来说窗口闪烁是个常见的问题,当窗口有大量的复杂的图元数据需要重绘,或者拥有自定义控件中的窗口闪烁问题更是显而易见的。出现闪烁的原因有很多种,大部分原因主要是因为触发WM_PAINT消息时窗体进行了重绘操作,此过程先是用窗体的背景色擦除窗口表面,再把窗体的图像绘制上去,但是如果这2个操作不在同一时间段完成的话,就会先看到背景色(大部分为白色)接着才看
2012-08-10 09:51:25
37150
原创 C#自定义控件简介(二)
接着上一篇文章讲,这次来说说C#自定义控件中的扩展控件(Extended Controls)的创建和使用。所谓的扩展控件就是在原有控件的基础上派生出新的控件,为了让大家更好的理解,这次就用C#中最基本的组件——Button来演示。最终的效果如下: 测试Demo下载 好了,下面来说说创建的步骤:一. 创建一个Windows窗口控件库项目,命名为MyButton;
2012-07-27 13:45:35
5107
原创 C#自定义控件简介(一)
在编程的过程中,当现有C#的控件满足不了我们的业务需求时,这就需要自己开发组件来达到我们的要求,即我们通常所说的自定义组件,在C#中,自定义组件分为三种: 1. 复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。 2. 扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,
2012-07-25 15:24:07
12556
原创 API函数 postmessage 初探
Postmessage函数 Fuction: 该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。Syntax: B00L PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); Parameters
2012-07-25 14:03:56
3261
C#自定义窗体美化
2013-01-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人