windows下gdi编程注意事项 - 编程思维

在Windows PC上编程,GDI是一个很重要的技术点。很多程序在运行一段时间后出现异常,导致程序崩溃,除了众所周知的内存泄露以外,GDI资源泄露也是一个很直接的原因。下面是我列出的一些注意事项。 Create出来的GDI对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放。 这里的Create指的是以它为开头的GDI函数,比如,CreateD

imagelist半透明,alpha通道bug处理。_timandy-编程思维

由于ImageList的先天障碍,对alpha通道支持不好。虽然到xp有所改善,但瑕疵依然存在。 通过reflactor发现ImageList通过windows api来进行读写的。写入数据时会对原始图像进行处理,等到读取时已经获取不到原始图像。鉴于此,只能另起炉灶重新编写一个ImageList,也就是缩略图集合类。 思路: 1,应该有缩略图大小属性,由于添加图像后生成缩略图,并与原始图像断绝关

(原创)[c#] gdi+ 之鼠标交互:原理、示例、一步步深入、性能优化_leslie_xin-编程思维

一、前言 “GDI+”与“鼠标交互”,乍一听好像不可能,也无从下手,但是实现原理比想象中要简单很多。 基于“GDI+”的“交互”,应用场景也很多,比如:流程图、数据图表、思维导图等等。 本篇文章就通过多个示例来讲解一下 GDI+ 与鼠标交互的原理,以及如何去实现。 每一个示例实现后,都会对示例进行优化,主要是解决一些在实际应用中比较常见的问题,比如:闪烁、资源占用高等等。 而在最后,会基于实际的

[c#] stringformat详解之文本方向、对齐_leslie_xin-编程思维

在使用GDI方式处理文本时,往往会用到StringFormat。里面的某些点有点反直觉,不够直观,所以本篇就通过图文的方式去讲解一下。 本篇内容仅涉及到文本方向、对齐的相关内容。 如有错误、不妥之处,欢迎大家指正。 一、相关属性 与文本方向、对齐相关的属性,主要与三个属性有关: Alignment、LineAlignment、FormatFlags。 Alignment与LineAlignmen

三角函数与缓入缓出动画及c#实现(图文讲解)_leslie_xin-编程思维

日常经常能看到缓入缓出的动画效果,如: 1,带缓入缓出效果的滚动条: 2,带缓入缓出效果的呼吸灯: 像上面这种效果,就是用到了三角函数相关的知识,下面将从头开始一步步去讲解如何实现这种效果。     一、基础知识 (一)三角函数 常用的三角函数有正弦函数(sin)、余弦函数(cos)、正切函数(tan)。在动画效果中常用的是正弦函数和余弦函数,由于两者可以互相转化,所以本文将以正弦函数来

[c#] (原创)一步一步教你自定义控件——01,trackbar_leslie_xin-编程思维

一、前言 技术没有先进落后之分,只有合不合适。 WinForm有着非常多的优点,在使用WinForm久了之后,难免会觉得WinForm自带的某些控件外观上有些许朴素、或者功能上有些不如意,自然而然便想去美化这些控件,或者给控件添加一些额外功能,而这便是自定义控件的意义所在。 自定义控件的难度并不大,但是却处在一个比较尴尬的位置: 1,一般的教材不会讲——因为还是有难度的,而且一般用不上; 2,而

[c#] (原创)一步一步教你自定义控件——02,scrollbar(滚动条)_leslie_xin-编程思维

一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:滚动条(ScollBar)。 我们可以在网上看到很多自定义的滚动条控件,它们大都是使用UserControl去做,即至少使用一个Panel或其它控件作滑块,使用UserControl本身或另一个控件作为背景条,而有的复杂的还会加上顶端和底端的按钮。这样作的好处有很多,最主要的是支持承载更加复杂的视觉和动作效果,比如使用一系列图

c# .net开发图形图像程序时提示"gdi+ 中发生一般性错误"_rainbow70626-编程思维

今天突然收到一封信,说我那个极度复杂的Marshal的问题被解决了(http://www.cnblogs.com/hotcan/archive/2005/01/12/91007.html)。顿时感觉好久没有在这个blog上写东西了。想当年刚毕业没事情干的时候,还是写得很不亦乐乎的。所以决定炒炒冷饭,写一篇技术文章,以说明我还没有忘记这里。  1.GDI+的前世今生 GDI+全称图形设备接口,Gr

[转]超全面的.net gdi+图形图像编程教程_rainbow70626-编程思维

本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ GDI+绘图基础 编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口)。 从程序设计的角度看,GDI包括两部分:GDI对象和GDI函数。GDI对象定义了GDI函数使用的工具和环境变量;而GDI函数使用GDI

pixelformat 枚举_天马3798-编程思维

  成员名称说明 Alpha 像素数据包含没有进行过自左乘的 alpha 值。 Canonical 默认像素格式,每像素 32 位。 此格式指定 24 位颜色深度和一个 8 位 alpha 通道。 DontCare 没有指定像素格式。 Extended 保留。 Format16bppArgb1555 像素格式为每像素 16 位。 该颜色信息指定 32,768 种色调,其中

缓动公式整理(附:c#实现及wpf原版对比)_leslie_xin-编程思维

前言 缓动在动画效果中应用非常广泛,在合适的时候使用一些缓动效果会使得效果更加符合人的直观感受,简单来说,会显得更加自然。 WPF提供了11种缓动效果,涵盖了大部分的使用场景。不过如果需要在非WPF下使用这些缓动效果,就需要知道对应的曲线公式了。因为公式是通用的,所以可以很轻松的使用其他语言实现。 由于本人数学水平有限,所以本文注重的应用而不是原理。在本文中,将会使用C#去实现,并附上与WPF原

[c#] (原创)一步一步教你自定义控件——03,switchbutton(开关按钮)_leslie_xin-编程思维

一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:开关按钮(SwitchButton)。 开关按钮非常简单,实现方式也多种多样,比如常见的:使用两张不同的按钮图片,代表开和关,然后在点击时切换这两张图片。 而本篇和前两篇一脉相承,都是继承Control,使用GDI+去实现。因为都是相同的原理,所以如果看过前两篇的讲解,自己就可以实现出来。 虽说简单,但仍有可雕琢之处,在基本的

[c#] (原创)一步一步教你自定义控件——04,progressbar(进度条)_leslie_xin-编程思维

一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:进度条(ProgressBar)。 进度条的实现方式多种多样,主流的方式有:使用多张图片去实现、使用1个或2个Panel放到UserControl上去实现、重载系统进度条去实现等等。 本次所实现的进度条仍是使用GDI+去实现。当然,如果只是实现最基本的扁平化的进度条,那完全不需要再写本篇文章,因为直接小改下第一篇的LTrack

(原创)[C#] 一步一步自定义拖拽(Drag&Drop)时的鼠标效果:(一)基本原理及基本实现-编程思维

一、前言 拖拽(Drag&Drop),属于是极其常用的基础功能。 无论是在系统上、应用上、还是在网页上,拖拽随处可见。同时拖拽时的鼠标效果也很漂亮,像这样: 这样: 还有这样: 等等等等。 这些拖拽时的鼠标效果,直观又美观。 然后,在我们写程序时,程序确实是支持了拖拽,但是效果却是这样的: 很是朴实无华。 而在某些时候,我们的程序也需要比较个性化的拖拽效果。 所以,我们就通过这一

[C#] (原创)一步一步教你自定义控件——06,MaskLayer(遮罩层)-编程思维

一、前言 技术没有先进与落后,只有合适与不合适。 本篇的自定义控件是:遮罩层(MaskLayer)。 遮罩层对软件的美观与易用性上的提高是很大的,在日常使用过程中也会经常看到各种遮罩层,虽然WinForm本身没有原生的遮罩层控件,但实现起来并不麻烦。 遮罩层的实现方式一般有两种:一种是基于自定义控件,一种是基于Form窗体。两种方式并无优劣之分。 本篇采用的方式是自定义控件,同之前一样,继承Co

(原创)IconFont(矢量图标字体)在Winform中的应用-编程思维

一、前言 很多时候,使用矢量图形可以带来非常美观的界面效果,比如SVG的使用。但是Winform原生是不支持显示SVG图像的,所以退而求其次,可以使用IconFont来实现相似的矢量效果。 先来个图解解馋: 知识点:资源文件中字体的使用方法、IconFont使用方法、IconFont应用场景示例、IconFont显示效果优化、IconFont使用经验等。 相信看完的你,一定会有所收获! 本文地

(原创)高DPI适配经验系列:(三)字体与字号、缩放锚点-编程思维

一、前言 程序最基本的元素,就是文本,也就是字体。如果程序未进行高DPI的适配,最直观的感受便是字体的模糊。所以本篇便来说一下高DPI适配中的字体问题。 高DPI的适配,简单来说便是便是根据不同的DPI对尺寸和位置进行调整,那么就需要一个锚点,所有的尺寸和位置的变化都以此锚点为基准进行调整。 相信看完的你,一定会有所收获! 本文地址:https://www.cnblogs.com/lesliex

(原创)高DPI适配经验系列:(四)高DPI适配示例-编程思维

一、前言 光说不练假把式。 原理说再多,也不如一个例子直观明了。所以本篇文章就来通过一个例子演示一下高DPI适配的流程。 相信看完的你,一定会有所收获! 本文地址:https://www.cnblogs.com/lesliexin/p/14801749.html 二、对比 我们先来看一组对比,分别是未进行高DPI适配与已进行高DPI适配的程序运行截图。 (一),DPI=96(屏幕分辨率:1080