windows下gdi编程注意事项 - 编程思维
在Windows PC上编程,GDI是一个很重要的技术点。很多程序在运行一段时间后出现异常,导致程序崩溃,除了众所周知的内存泄露以外,GDI资源泄露也是一个很直接的原因。下面是我列出的一些注意事项。 Create出来的GDI对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放。 这里的Create指的是以它为开头的GDI函数,比如,CreateD
morethink program
在Windows PC上编程,GDI是一个很重要的技术点。很多程序在运行一段时间后出现异常,导致程序崩溃,除了众所周知的内存泄露以外,GDI资源泄露也是一个很直接的原因。下面是我列出的一些注意事项。 Create出来的GDI对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放。 这里的Create指的是以它为开头的GDI函数,比如,CreateD
由于ImageList的先天障碍,对alpha通道支持不好。虽然到xp有所改善,但瑕疵依然存在。 通过reflactor发现ImageList通过windows api来进行读写的。写入数据时会对原始图像进行处理,等到读取时已经获取不到原始图像。鉴于此,只能另起炉灶重新编写一个ImageList,也就是缩略图集合类。 思路: 1,应该有缩略图大小属性,由于添加图像后生成缩略图,并与原始图像断绝关
一、前言 “GDI+”与“鼠标交互”,乍一听好像不可能,也无从下手,但是实现原理比想象中要简单很多。 基于“GDI+”的“交互”,应用场景也很多,比如:流程图、数据图表、思维导图等等。 本篇文章就通过多个示例来讲解一下 GDI+ 与鼠标交互的原理,以及如何去实现。 每一个示例实现后,都会对示例进行优化,主要是解决一些在实际应用中比较常见的问题,比如:闪烁、资源占用高等等。 而在最后,会基于实际的
在使用GDI方式处理文本时,往往会用到StringFormat。里面的某些点有点反直觉,不够直观,所以本篇就通过图文的方式去讲解一下。 本篇内容仅涉及到文本方向、对齐的相关内容。 如有错误、不妥之处,欢迎大家指正。 一、相关属性 与文本方向、对齐相关的属性,主要与三个属性有关: Alignment、LineAlignment、FormatFlags。 Alignment与LineAlignmen
日常经常能看到缓入缓出的动画效果,如: 1,带缓入缓出效果的滚动条: 2,带缓入缓出效果的呼吸灯: 像上面这种效果,就是用到了三角函数相关的知识,下面将从头开始一步步去讲解如何实现这种效果。 一、基础知识 (一)三角函数 常用的三角函数有正弦函数(sin)、余弦函数(cos)、正切函数(tan)。在动画效果中常用的是正弦函数和余弦函数,由于两者可以互相转化,所以本文将以正弦函数来
一、前言 技术没有先进落后之分,只有合不合适。 WinForm有着非常多的优点,在使用WinForm久了之后,难免会觉得WinForm自带的某些控件外观上有些许朴素、或者功能上有些不如意,自然而然便想去美化这些控件,或者给控件添加一些额外功能,而这便是自定义控件的意义所在。 自定义控件的难度并不大,但是却处在一个比较尴尬的位置: 1,一般的教材不会讲——因为还是有难度的,而且一般用不上; 2,而
一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:滚动条(ScollBar)。 我们可以在网上看到很多自定义的滚动条控件,它们大都是使用UserControl去做,即至少使用一个Panel或其它控件作滑块,使用UserControl本身或另一个控件作为背景条,而有的复杂的还会加上顶端和底端的按钮。这样作的好处有很多,最主要的是支持承载更加复杂的视觉和动作效果,比如使用一系列图
今天突然收到一封信,说我那个极度复杂的Marshal的问题被解决了(http://www.cnblogs.com/hotcan/archive/2005/01/12/91007.html)。顿时感觉好久没有在这个blog上写东西了。想当年刚毕业没事情干的时候,还是写得很不亦乐乎的。所以决定炒炒冷饭,写一篇技术文章,以说明我还没有忘记这里。 1.GDI+的前世今生 GDI+全称图形设备接口,Gr
本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ GDI+绘图基础 编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口)。 从程序设计的角度看,GDI包括两部分:GDI对象和GDI函数。GDI对象定义了GDI函数使用的工具和环境变量;而GDI函数使用GDI
成员名称说明 Alpha 像素数据包含没有进行过自左乘的 alpha 值。 Canonical 默认像素格式,每像素 32 位。 此格式指定 24 位颜色深度和一个 8 位 alpha 通道。 DontCare 没有指定像素格式。 Extended 保留。 Format16bppArgb1555 像素格式为每像素 16 位。 该颜色信息指定 32,768 种色调,其中
大家在用 .NET 做图片水印功能的时候, 很可能会遇到 “无法从带有索引像素格式的图像创建graphics对象”这个错误,对应的英文错误提示是“A Graphics object cannot be created from an image that has an indexed pixel format" 这个exception是出现在 System.Drawing.Graphics g
前言 缓动在动画效果中应用非常广泛,在合适的时候使用一些缓动效果会使得效果更加符合人的直观感受,简单来说,会显得更加自然。 WPF提供了11种缓动效果,涵盖了大部分的使用场景。不过如果需要在非WPF下使用这些缓动效果,就需要知道对应的曲线公式了。因为公式是通用的,所以可以很轻松的使用其他语言实现。 由于本人数学水平有限,所以本文注重的应用而不是原理。在本文中,将会使用C#去实现,并附上与WPF原
一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:开关按钮(SwitchButton)。 开关按钮非常简单,实现方式也多种多样,比如常见的:使用两张不同的按钮图片,代表开和关,然后在点击时切换这两张图片。 而本篇和前两篇一脉相承,都是继承Control,使用GDI+去实现。因为都是相同的原理,所以如果看过前两篇的讲解,自己就可以实现出来。 虽说简单,但仍有可雕琢之处,在基本的
一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:进度条(ProgressBar)。 进度条的实现方式多种多样,主流的方式有:使用多张图片去实现、使用1个或2个Panel放到UserControl上去实现、重载系统进度条去实现等等。 本次所实现的进度条仍是使用GDI+去实现。当然,如果只是实现最基本的扁平化的进度条,那完全不需要再写本篇文章,因为直接小改下第一篇的LTrack
一、前言 拖拽(Drag&Drop),属于是极其常用的基础功能。 无论是在系统上、应用上、还是在网页上,拖拽随处可见。同时拖拽时的鼠标效果也很漂亮,像这样: 这样: 还有这样: 等等等等。 这些拖拽时的鼠标效果,直观又美观。 然后,在我们写程序时,程序确实是支持了拖拽,但是效果却是这样的: 很是朴实无华。 而在某些时候,我们的程序也需要比较个性化的拖拽效果。 所以,我们就通过这一
一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:遮罩层(MaskLayer)。 遮罩层对软件的美观与易用性上的提高是很大的,在日常使用过程中也会经常看到各种遮罩层,虽然WinForm本身没有原生的遮罩层控件,但实现起来并不麻烦。 遮罩层的实现方式一般有两种:一种是基于自定义控件,一种是基于Form窗体。两种方式并无优劣之分。 本篇采用的方式是自定义控件,同之前一样,继承Co
一、前言 很多时候,使用矢量图形可以带来非常美观的界面效果,比如SVG的使用。但是Winform原生是不支持显示SVG图像的,所以退而求其次,可以使用IconFont来实现相似的矢量效果。 先来个图解解馋: 知识点:资源文件中字体的使用方法、IconFont使用方法、IconFont应用场景示例、IconFont显示效果优化、IconFont使用经验等。 相信看完的你,一定会有所收获! 本文地