
-------2.4 GDI+
文章平均质量分 91
启舰
今天就是未来,没有人能代替你奋斗!自己造的船,终有一天它会扬帆远航!
展开
-
GDI+学习及代码总结之-----画笔
画笔一、构造函数画笔有两个构造函数,分别看下:Pen( const Color& color, REAL width);Pen( const Brush* brush, REAL width);注意:第一个构造函数:从一个颜色构造一个单色画笔,平时用的比较多 第二个构造函数要特别注意,它可以从一个画刷构造一个画笔,当画刷是纯色时,构造的也是纯色画笔原创 2013-06-05 11:10:12 · 11623 阅读 · 1 评论 -
GDI+学习及代码总结之------区域
在GDI+中,对于区域的部分基本上使用了GDI的区域构造函数与合并方法,所以我们先看看GDI中的区域是如何构造与操作的。GDI中区域构建与操作一、基本函数创建矩形区域:HRGN CreateRectRgnIndirect(CONST RECT *lprc);HRGN CreateRectRgn( int nLeftRect, // left点坐标(X原创 2013-06-17 20:28:26 · 12063 阅读 · 2 评论 -
GDI+在界面开发中遇到的问题汇总
一、利用UpdateLayeredWindow,在GDI+绘制字体时,FontStyleRegular样式的字体会变成透明,而其它的样式都可以正常显示;问题的原因是:层窗口(WS_EX_LAYERED),用UpdateLayeredWindow输出的文字(用常规方法输出的:TextOut、DrawText、DrawString...),并且设置了AC_SRC_ALPHA和ULW_ALPHA原创 2013-07-09 19:53:32 · 5766 阅读 · 1 评论 -
WIN32无边框窗体的缩放、移动与WM_NCHITTEST消息&&UpdateLayeredWindow重要心得
一、WM_NCHITTEST消息MSDN对它的解释是:The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to原创 2013-08-06 08:46:44 · 24078 阅读 · 1 评论 -
_TrackMouseEvent 与 WIN32 ToolTip
一、_TrackMouseEvent默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息的,所以要使用_TrackMouseEvent函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会 Post 这两个消息到指定窗口。1、添加头文件和库在stdafx.h中,添加所需要的头文件和库文件,代码如下:原创 2013-08-06 19:39:17 · 5818 阅读 · 2 评论 -
WIN32界面开发之三:DUI雏形开发(一)
前言:这部分涉及工程比较大,所以我打算分开为两篇来写,第一篇完成基本框架的构建,第二篇添加上EVENT和NOTIFY机制。完成目标:仿照DirectUI,完成一个基本雏形,开发一个布局控件(Dialog),和一个按钮控件(Button),通过XML来布局窗体,最后按钮响应点击、鼠标移动等事件信息,用户还可以通过NOTIFY机制来定制,用户具体行为时,界面所要做的动作。给大家看下最终界面吧,一个原创 2013-07-26 09:26:26 · 15330 阅读 · 13 评论 -
WIN32界面开发之三:DUI雏形开发(二)
前言:上篇《WIN32界面开发之三:DUI雏形开发(一)》讲解了界面加载框架的创建,但我们的这些控件并没有起到控件的作用,现在还无法响应我们的点击事件和其它事件,所以我们先给我们的框架添加上EVENT事件机制,然后我们再讲解,为什么我们还要加上NOTIFY通知机制,以及如何添加NOTIFY机制。一、添加EVENT事件机制基本思想:以通知某个按钮LButtonDown为例,我们首先在Ha原创 2013-07-29 09:27:22 · 7748 阅读 · 0 评论 -
WIN32界面开发之二:GDI+中的局部刷新技术
前言:GDI+很好用,但要将所有图像混合,必须要用到UpdateLayeredWindow,但UpdateLayeredWindow注定每次刷新都要刷新整个窗体,也就是说,哪怕我们只是改变的只是一个像素,也都要重新绘制整个窗体,就没有像GDI中那样有区域裁剪的功能,真无语了,搜遍整个网络也没找到UpdateLayeredWindow的局部刷新方案,最后想到在MFC中是可以使用GDI+的,而MFC中原创 2013-07-17 15:13:14 · 16585 阅读 · 3 评论 -
WIN32界面开发之一:初试加载背景界面
前言:在实际开发中,虽然有已经成形的界面库DUILIB,但DUILIB无法加载异形窗体,对PNG图片的支持不到位,最终我下决心,自己开发一套界面库,利用GDI+完成2D和3D功能,在这里,我将要记录下,我所做的界面开发的过程,并将它们整理成博客分享给大家,一步步来学习吧。内容概要:这篇主要实现的功能是加载一个背景界面,向大家介绍下,如何用GDI+加载背景界面的问题,然后就是如何在指定位置托原创 2013-07-15 15:02:09 · 16271 阅读 · 6 评论 -
GDI+学习及代码总结之——GDI+双缓冲等问题总结
GDI+双缓冲技术转载地址:http://cnbeta2004.blog.163.com/blog/static/602313402010119104451537/早前曾为此问题在CSDN发帖求助(GDI+ 如何使用双缓冲绘制图像),得到了一个GDI+下较可行的方法,虽然绘制效果比直接绘制要好一些,不过还不能跟GDI的双缓冲方式比肩。现在,我终于找到了一个理想的实现方式,效原创 2013-06-25 10:46:02 · 5264 阅读 · 0 评论 -
GDI+学习及代码总结之------图像的编码与解码
一、获取编、解码器信息获取编码器信息开发人员可以使用诸如GetImageEncodes来获取系统可用的编码器,用GetImageDecodes来获得系统可用的解码器;由于这两个函数都是一样的,所以我们只看GetImageEncodes函数的定义就好了;Status GetImageEncoders( UINT numEncoders, UINT size, Im原创 2013-06-24 21:20:14 · 5408 阅读 · 0 评论 -
GDI+学习及代码总结之------图像的基本处理
图像的基本操作在GDI+中,对图像的处理主要靠两个类,Image类和Bitmap类,Bitmap类是在Image类的基础上派生出来的。这里主要讲Image类的使用,Image类支持对BMP, GIF, JPEG, PNG, TIFF, 和 EMF,尤其注意,在PNG图像中,包含ALPHA通道,所以能实现不规则图像;一、图像的打开与显示图像打开我们在前言部分已经讲到,在GDI+中原创 2013-06-19 15:37:50 · 29817 阅读 · 3 评论 -
GDI+学习及代码总结之-----坐标变换、矩阵变换及色彩变换
坐标变换、矩阵变换在Graphics类中,有几个函数实现了简单的坐标变换Graphics::TranslateTransform(dx, dy, order)//平移坐标系Graphics::RotateTransform(angle, order)//旋转坐标系Graphics::ScaleTransform(sx, sy, order)//缩放坐标系这里有个order参数着原创 2013-06-18 15:21:07 · 12552 阅读 · 2 评论 -
GDI+学习及代码总结之------画线、区域填充、写字
《精通GDI编程》里的代码,在学习过程中对它加以总结,以防以后用到,所有代码都是在MFC 单文档中实现的,写在View::OnDraw(CDC */*pDC*/)中画线/边框(Pen)1、画单线-------DrawLine Pen pen(Color(255,0,0,0),3); PointF L_PTStart(0,0); PointF L_PTEnd(100,10);原创 2013-06-04 16:27:47 · 27320 阅读 · 2 评论 -
GDI+学习及代码总结之------文本与字体
字体、字体系列基本概念与构造字体系列GDI+中将具有相同字样、包括不同风格的字体称为字体系列。字体从其系列中获得名称、重量(如粗体、规则、加亮)以及风格。例如Arial字体系列包含了下列4种字体:Arial Regular(规则)、Arial Bold(黑体)、Arial Italic(斜体)、Arial Bold Italic(粗斜体);在GDI+中输出文本之前,需要构造一个原创 2013-06-14 19:12:12 · 38564 阅读 · 12 评论 -
GDI+学习及代码总结之------画刷Brush
画刷BrushGDI+中定义了五种画刷类型,他们都派生于Brush类,他们分别是:注意:画刷与画笔不同,画刷只是用来填充区域,所以,画刷无宽度、长度可言。单色画刷SolidBrush一、构造函数SolidBrush greenBrush(Color(255,0,255,0)); //在GDI+中颜色值,没有RGB()构造,只能用Color()构造二、所使用的原创 2013-06-10 16:44:00 · 19742 阅读 · 2 评论 -
GDI+学习及代码总结之------色彩与图像
色彩在GDI+中,色彩是通过Color类来描述的,不是用RGB类,用RGB构造会出错!GDI+中的色彩信息值是由一个32位的数据来表示的,它包括8位alpha值和各8位的R、G、B值,对于alpha值是用来表示透明度的,0表示完全透明,255表示不透明。从本质上讲,透明度是像素之间的一种合成运算,它的计算公式是:输出色彩=前景色*Alpha值/255 + 背景色*(255-Alpha值)/原创 2013-06-05 09:44:11 · 6772 阅读 · 1 评论 -
WIN32界面开发之四:CPaintManagerUI类构建
前言:前面我们完成了对DUI雏形的构建,但大家有没有注意到一个问题,我们对消息的处理都是在用户构建的类(CStartPage)中,还有,为了在控件中可以实时刷新,所以每个控件都必须带有一个变量m_hwnd,来保存当前窗体的句柄,而且在每次发送EVENT消息时都要赋值,相当麻烦,所以,我们将这些控件都具有的一些操作和变量,全部都集合起来,封装成一个类,这个类就是CPaintManagerUI原创 2013-07-30 20:50:04 · 10614 阅读 · 1 评论