开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1671|回复: 2
收起左侧

[源码分享] lionking1990 对象编程:一切皆对象【扫盲贴】

[复制链接]
发表于 2011-5-14 11:53:22 | 显示全部楼层 |阅读模式   江苏省南京市
VB是面向对象的编程工具,这里引用《Thinking In Java》里面的一句话:一切皆对象。

很多人并不明白什么是面向对象,即使他也能写出想要的东西,因为VB一开始就已经是这样了。

一打开VB,就是一个窗体,这就是一个对象。在上面画一个按钮,一个文本框……都是在创建对
象,只是这个过程被VB封装了。

但是从使用中可以切实地感受到对象编程的方便性,这可以举出很多例子:

如果想设置文本颜色,应该怎么做?

在VB中,可以这么写:Me.Text1.ForeColor = vbRed

正因为是对象编程,所以文本框可以有各种属性,很简单地就能调用它。

那么看一下其他情况下应该怎么做?

应当调用这个API,传入文本框的设备场景,设置颜色。
Declare Function SetTextColor Lib "gdi32" Alias "SetTextColor" (ByVal hdc As Long,  
ByVal crColor As Long) As Long

当然,这个API太简单了,很难体现出对象的方便性。那我们再来看看一个特殊的控件<Label>
这个是一个什么东西?没有句柄,没有场景,MS系统控件应有的东西都没有,它是一个对象。

我个人认为这个只是VB中的一个类,因为它有属性,可以设置它的文本,颜色,背景,大小,对
齐方式等等,在我眼中,它只是几个API的封装。

接下来我们来讨论一下它为什么效率不高,而且刷新时还会闪?

首先,它可以换行,这样就可以知道它不是用TextOut这个API,而是用了DrawText这个API,我
本人也比较喜欢这个API。

其次,它可以设置背景色,可以知道它用了FillRect来填充背景,这是指背景不透明时候。透明
时它是调用SetBKMode来设置透明,此时就不用填充了。

另外,每个Label都可以有不同的字体,颜色等等属性,这样就造就了它的不足。

为什么呢?
正因为上面所说的,它不是真正的控件,所以它所依赖的是所在的父控件,可以是窗体,也可以
是PictureBox。它把这些文字直接绘制到父控件中,所以每次绘制之前,它都要先设置父控件的
字体,字色,背景等等,绘制完毕后还要再还原为原来的属性。所以在移动或者重绘时能明显感
觉到闪烁,如果它没这么多属性也就不会了。
顺便提一下,那个不闪的方法是让系统绘制完毕后再显示,绘制完再显示自然不闪,但是效率嘛
……

********************** 华丽的分割线 **********************

大概说了一下对象,就要说一下在VB中如何创建自己的对象 —— 类 [类模块(Class)]


一个类中最基本的应该算是
Private Sub Class_Initialize()
     '构建
End Sub

Private Sub Class_Terminate()
     '清除
End Sub

要创建属性可以自己写,也可以用类生成器或者工具->添加过程,其他的跟在窗体中写差不多了,
下次再有空再谈谈事件的触发,毕竟VB是事件驱动嘛!

使用类的方法需要两步,定义+初始化.
dim ** as 类名 '这一步只是定义了类,没有初始化的是不能用的,会显示*** with 什么未设置
之类的
set ** = new 类名 '这一步就初始化了,会触发Class_Initialize事件.

之后使用它,只要像控件一样用就行了,所以有些很复杂但是经常用到的,属于一类的就可以写在
类中,这样就是你的对象了.

********************************************************

 楼主| 发表于 2011-5-14 11:54:18 | 显示全部楼层   江苏省南京市
【lionking1990 最简单的皮肤:区分焦点和非焦点状态 】

这个贴子中有人提到,皮肤不能随窗体改变而改变,当然,都说了是最简单的
如果想自己研究,也可以参考这编:改进的VB无边框窗体,可调大小,可换皮肤……

本来是想再写一个<最简单的皮肤升级版>,也用最简单的方法来做.
这次可以调节大小,顺便把对象编程用上.
不过想了一想,有些话不能说得太明白,要不做皮肤的人会跟我拼命的...

看过这<最简单的皮肤>编文章的人就应该知道了,做一个皮肤不难,特别是窗体大小固定的时候.
所以不明白为什么网上开源的一些怎么会如此复杂,是不想让人看懂还是什么的目的

回复 支持 反对

使用道具 举报

结帖率:100% (11/11)
发表于 2011-6-7 11:51:50 | 显示全部楼层   江苏省徐州市
搞不清楚 对象有什么用 。 能出个视频教程吗 ?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表