现在的位置: 首页 > 综合 > 正文

关于DirectUI界面技术的误解

2018年04月05日 ⁄ 综合 ⁄ 共 888字 ⁄ 字号 评论关闭

好多人把DirectUI狂的很炫,甚至于要专门成为一门学术来进行研讨。其实,这样是给不是很懂控件开发的程序员们一种误解。熟悉windows开发的
人都清楚。windows是消息驱动的,任何一个窗口。对话框,框架,甚至于按钮等全部是一个窗口。只要是窗口,就会有消息循环,有消息循环,就会接收并
且可以处理大多数的windows消息。     比如,鼠标按下或者抬起会响应WM_LBUTTONDOWN WM_LBUTTONUP,
而如果要绘制内容(按钮的各种正常、按下、不可用状态),菜单的鼠标滑过、按下等等,所有的表现形式,必须在WM_PAINT 消息中,也就是
OnPaint处理函数中,进行绘制过程,c#,delphi等等语言都相同,无非就是封装的程度不同罢了。好多还不是很熟悉windows的程序开发人
员一般会提出这样或那样的问题。为什么我绘制的图像一挡窗口就消失了。读到这里您应该明白了。你不应该在OnPaint消息之外的任何地方进行绘制。否则
当然会消失。 
   这里可能又有人会问了,那我想鼠标按下开始绘制矩形,鼠标移动后又绘制终点,难道不在这个时候绘制?而要到OnPaint中绘制吗?感觉想不通。这
个地方我希望入门的兄弟姐妹们好好思考一下。我们应该建立一个数据模型。比如任何业务处理中存储一些数据,而在绘制过程中(OnPaint)函数中来根据
这些数据进行视觉表达。 
   至于DirectUI。和前面所讲的处理方式有所不同,说明白就是定义一些数据结构,来进行消息的处理与绘制过程。这些数据结构要定义好某个非窗口
控制(按钮,滚动条等等)的显示区域,然后根据鼠标和键盘以及其他的一些需求来在预定的区域绘制不同的表现形式。至于DirectUI无非是注册了一个窗
口类叫DirectUI罢了。并不是一种技术而已。我们其实接触这样的例子很多很多。全部的游戏内的窗口等都是。 
   我给大家具个例子。扑克牌的游戏大家一定都知道吧。鼠标点击某个扑克牌就会跳起火者出牌等。难道每一个扑克牌都是一个窗口???我们可以把扑克牌看
成一个特殊的控制,比如按钮。鼠标移动到指定的区域,然后绘制相应的表现罢了。

抱歉!评论已关闭.