自己设计自定义界面组件的注意事项

原创 2015年11月19日 15:05:46

自己写组件本质是画图,所以需要了解画图的各方面主要的内容,消息队列和GDI接口在window下需要熟悉,跟画相关的的消息主要有WM_PAINT,WM_NCPAINT,WM_ERASEBKGND三个,其他就是跟RGN和RECT相关的接口和GDI接口,首先先说,BeginPaint和GetUpdateRect这两个接口,都可以获得窗口目前的更新区域范围(RECT),GetUpdateRect可以随时调用查询,但是一般应该在BeginPaint之前使用,按照MSDN的说明,BeginPaint接口调用后在PAINTSTRUCT参数中会返回窗口当前需要的更新区域,区域的内容和GetUpdateRect得到的内容是完全一样的,但是BeginPaint调用会同时清除窗口所有的无效区域(invalide rect,即:无效区域就是需要更新区域的别名),所以在调用了BeginPaint接口后,立即调用GetUpdateRect接口,将返回一个空更新区域,即:没有需要更新的区域了。但是一般大家会习惯在调用通过先调用GetUpdateRect接口,获得更新区域(无效区域),然后再调用BeginPaint,进行绘画。所以调用了BeginPaint后,就没有必要调用GetUpdateRect接口了,因为已经没有更新区域了(已经被BeginPaint清空),所以也可以直接使用BeginPaint接口来获得更新区域,MSDN上说明了,BeginPaint接口和GetUpdateRect接口获得的更新区域是完全相同的,即两个接口获取更新区域是等同的,只是BeginPaint具有更多其他功能。

更新的操作相关的接口主要有InvalidateRect,InvalidateRgn,ValidateRect,ValidateRgn,RedrawWindow,UpdateWindow,注意:(InvalidateRect,InvalidateRgn)和(ValidateRect,ValidateRgn)是相反的操作,是增加和移除的关系,即:(InvalidateRect,InvalidateRgn)是增加无效区域,(ValidateRect,ValidateRgn)是移除无效区域,又名增加有效区域;RedrawWindow功能最强大几乎包含了其他更新接口的功能也复杂了;UpdateWindow主要是向窗口发送WM_PAINT消息,当窗口有更新消息的时候会发送立即WM_PAINT消息(调用窗口过程),窗口没有更新区域时则什么都不做,具体功能可以参考MSDN。其他GDI接口就是画图用的了,不会有异议。最后需要注意的是WM_PAINT消息的发送,这个消息主要由系统自动发送,当系统消息队列里没有任务消息时,并且窗口有无效区域(更新区域)时,系统将自动发送WM_PAINT消息,如果无效区域(更新区域)一直存在,那么WM_PAINT消息系统会一直发送,直到无效区域(更新区域)为空,提示:前面说了BeginPaint接口和ValidateRect接口都可以清空无效区域(更新区域)。忘了说BeginPaint接口必须和EndPaint接口配对,画图结束后需要使用EndPaint接口。

熟悉windows API也是设计界面组件需要用到的东西,比如SetWindowLongPtr等等,跟窗口有关的接口,需要积累和多思考学习,慢慢就熟悉了,多设计代码也是成长的过程,但个人觉得多思考为什么这样设计更多重要,能在熟悉点COM的东西,写个OCX COM组件就更好了。

自定义控件使用注意点

许多时候使用xib或是storyboard来创建一个东西很是方便,但就因为这样创建了与代码之间的连接度就不那么容易发现了,结果调试起来就比较容易出现一些奇葩的问题。在此自己作为一项笔记整理一些东西: ...
  • linfengwenyou
  • linfengwenyou
  • 2016年02月06日 11:24
  • 492

用户界面设计之基本组件

一、文本框TextView与编辑框EditView 1.文本框组件,用于在屏幕上显示文本 其支持的XML属性主要有 1)android:autoLlik  用于指定是否将指定格式的文本转换为可用...
  • Z_Gavin
  • Z_Gavin
  • 2016年08月18日 23:02
  • 341

Ionic-wechat项目边开发边学(三):自定义样式,指令,服务

上一篇文章主要介绍了一个ionic项目的标准目录结构,header标签的使用,以及页面之间的切换。这篇文章实现的功能有: 消息数据的获取, 消息列表的展示, 消息标为已读/未读, 主要涉及的到的知识点...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2016年09月23日 09:38
  • 763

H5 App设计者需要注意的21条禁忌

我们通常在做H5 APP设计的过程中,遇到很多看似很小,且很容易被忽略的问题,正是这些小问题,一次次的撩拨用户的耐心,让用户对你的APP心生怨念。现在WeX5君呕血为大家整理出H5 APP设计的21条...
  • ppqiaoping
  • ppqiaoping
  • 2016年01月07日 14:34
  • 1878

Android五大布局及自定义布局

概念Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。Android的五大布局分别是LinearL...
  • qq_28147169
  • qq_28147169
  • 2016年06月15日 22:19
  • 159

利用Vue v-model实现一个自定义的表单组件

上一篇文章  vue v-model实现原理和组件设计 ,我们讲到了,v-model的基本实现原理,这次我们来利用 v-model来实现一个简单的 表单组件 功能描述: 通过点击按钮,可以增减购物数量...
  • yangbingbinga
  • yangbingbinga
  • 2017年03月13日 12:03
  • 6040

自定义view分类和注意事项

自定义view一直是我们开发中的难题,也是创新点,在很多初学者都对它感到很头疼,我也是如此,这里写出来与大家分享,希望我们都能成功解决这块蛋糕。 一、自定义view的分类:         1、继...
  • qq_28273051
  • qq_28273051
  • 2017年01月05日 14:17
  • 183

UI界面——自定义组件

开发过程经常需要我们控件。除了使用系统控件之外,我们也需要自定义控件实现特定的效果。 通常的自定义控件的步骤为: 自定义控件类继承View类重写onMeasure方法。从写onDraw方法重写onT...
  • dd864140130
  • dd864140130
  • 2014年12月04日 02:38
  • 711

Java 文件上传和下载组件的设计与实现...【Pnoter】

通用 Java 文件上传和下载组件的设计与实现...【Pnoter】 件上传和下载是 Web 应用中的一个常见功能,相信各位或多或少都曾写过这方面相关的代码。但本座看过不少人在实现上传或下载功能时总是...
  • Pnoter
  • Pnoter
  • 2015年02月15日 16:26
  • 1622

第三篇 基本UI组件

在初步学习了OC和了解了Xcode的界面之后,我们要开始做一些具体的事情了。 Xcode为我们提供了很多现成的UI组件,让我们很轻松地就可以做出一个不太难看的界面,这里我门以一个简单的加法计算器为例...
  • fww330666557
  • fww330666557
  • 2016年01月22日 12:25
  • 893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己设计自定义界面组件的注意事项
举报原因:
原因补充:

(最多只允许输入30个字)