关闭

QQ界面的简单模拟

1035人阅读 评论(0) 收藏 举报

QQ界面的简单模拟

                        姜春华 于中秋2007-9-25

这几天费了九牛二虎之力,终于把个QQ界面给模拟出来了,只是感觉比较粗糙了点。虽如此,自己体会倒不少。

发现,很多时候,在工程开发当中,虽然网上有很多类似的例子,但是未必那些就适合自己,有的太复杂了,不太合适学习,而有的看似简单,可是设计到一些具体的问题,在那些高手认为是理所当然的,以至于没有提及到,可对于我等初学者来说,可是相当有用的。

再就是网络上很多是关于某些技术的问题,解决的方案却是千差万别,有的给你以启发,有的自己看起来却是相当的迷惑,实在是让我摸不着头脑。因此就必须通过自己瞎子摸路般的摸索,其实,如果有个高手在身边,的的确确可以少走相当多的弯路,我觉得我自己吃了这方面的不少亏啊,哎~~~~~~~~~~~~

现在让我介绍下,我所模拟的基本思路吧。界面的整体框架就是一个对话框,主要是通过在这个主对话框中加入各种不同的控件,比如:TabCtrlListCtrlButton等。也就是说,这个界面工程的主要任务还是控件编程,关键是要能够做出漂亮的控件来,这也是我目前所面对的主要问题。由于时间有限,再加上之前很多做关于控件方面的工作,因此,我的这个界面的异常的粗糙,hoho ,好不容易搞出个有点颜色变化的炫按钮,还是别人已经编写好了的控件按钮,我只不过直接拿过来用而已,正所谓的拿来主义,呵呵,更专业一点讲那就是代码的重复利用,代码共享,hoho 希望以后不要出来个代码侵权,那就玩完了,还好我这主要还是学习之用,没有什么商业价值:)

第一步:我先在VC的资源环境器下搭好了一个基本的QQ界面框架。可以看到,在这里,我主要用到了两个控件,其中一个是Button 另一个是TabCtrl。说起来其实也很简单的说。再把各个控件的属性设置好。这些步骤可以简化很多代码的编写,我觉得对于界面编程来说,这是相当的便捷啊,感谢MS,感谢CCTVhoho

 

第二步:在ClassWizard的消息映射和成员变量的标签中设置好控件与函数代码的相关性,这也是很重要的哦。消息映射主要是响应触发控件引起的事件,成员变量主要是使代码中的变量对应界面的相应控件,以使我们可以很方便的通过成员变量来控制界面上的控件,也就是说,在代码当中,你可以把其相应的成员变量看成是界面上的控件,我们对成员变量的操作,就相当于对界面控件的操作,就是这么的简单:)

 

第三步:其实上面两步主要是为我们这一步打下基础,而这一步,也是我们这个简单的不能再简单的界面工程的最主要的部分,那就是对界面进行美化,并且使其能够响应一些基本的功能。在这里,我们最主要的是在程序代码中加入了CListCtrl这个控件,它主要是用来存放我们常看到的一些QQ头像,她就相当于一个容器,用来存放我们的各种头像,因为不能直接就在对话框中存放,其实那样的话也可以,只是后续工作将会非常的繁琐,所以说我们有个如此好用的CListCtrl控件为什么不用呢,更何况她是MS免费提供给我们的,何乐而不为呢?首先我们需要得到整个界面的区域,以及各个控件的区域,以使我们更好的设置他们在整个界面中的具体位置,主要用到函数

GetWindowRect()

ScreenToClient(),

前一个函数是得到相应ID的区域,而后一个函数主要是把我们得到的以显示屏基础的坐标变化成以这个对话框为基础的坐标。这个我们就可以根据得到的坐标和区域来搭配各个控件的具体位置了。另一函数我们要用到的是:

MoveWindow()

ShowWindow()

其主要是用来移动控件的位置和显示或隐藏相应的控件。因为我们知道在QQ界面中“我的好友”,标签,“陌生人”,标签,在点击时是会动态的移动的,其相应的ListCtrl也会相应的显示出来或者被隐藏起来,这就需要用到我们这两个函数了。

在我们这里只有两个标签:“我的好友”和“敌人”标签,因此我们相应的需要两个ListCtrl容器了。下面关键的是如何在ListCtrl容器当中添加头像图标,呵呵,前段时间我搞这个差点崩溃了,明明是按照网络上一些方法写的,可她就是不显示图标出来,后来才知道,哦~~~~~~~~~~~,原来是这样啊,这就是一些很简单的问题,高手们不屑交待,而我等菜鸟又不知道的,但是必须的,在这里我们就会浪费不少时间的啊,呵呵,归正题吧:)

主要用到三个对象:

CBitmap

CImageList

CListCtrl

Cbitmap用来装载位图,而Cimagelist用来把位图加入其已准备好的图像列表当中,CListCtrl是把图像列表中的内容拿过来加以显示出来,这三个对象的具体用法网路上有很多介绍,我这里主要讲一下其应该注意的一些问题。

1.             最好把这三个对象都申明为类成员变量,而不要申明为局部变量,因为在这个程序运行当中,我们都要用到这些对象,似乎CBitmap不用这个要求,不过为了安全起见,我还是宁愿把她们都申明为类成员变量,hoho

2.             CImageListCListCtrlCreate()需要注意一下,其中的一些参数,尤其是DWSTYLE,我觉得很头大啊,呵呵,头像的具体显示也要注意哈,LVS_SMALLICON,LVS_ICON等。最后就是把图像显示出来,使用CListCtrlSetImagelist()函数,参数设置也要注意了。

3.             当你SetImagelist()之后,你兴高采烈的以为终于可以显示头像了,可当你运行程序的时候,不知道你什么心情,反正我当时是傻眼了,怎么会这样啊,之前的步骤都是正确的啊,于是我开始怀疑这怀疑那得,实在弄不明白到底怎么回事。后来才发现我只要在SetImagelist()的后面继续CListCtrl的函数InsertItem()之后,头像就开始显示出来了,因为我不知道还要InsertItem她才显示出来,我以为只要SetImagelist()头像就会出来,唉~~~~~~~~,原来如此。这就是我这菜鸟的悲哀啊~~~:(

 

 

最后,我前面说了,我用到了别人写的控件代码,主要是一个Button控件代码,它的颜色会随着你点击而改变,我只是把我程序中CButton申明的对象,换成用CXPButton来申明,而这CXPButton就是网友所写的一个更炫的Button控件。

 

 

刚才回头看了下自己所做的这些事情,从我现在来说,感觉还是很简单的,没有多少值得高兴的代码,实在是惭愧啊,看来我还是要继续努力了。

 

参考资料:

《用Visual C++实现QQ界面的模拟》 来源网络

http://blog.csdn.net/sunnyboychina/archive/2007/09/04/1771869.aspx 等各网络资源

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26280次
    • 积分:336
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:3篇
    • 译文:2篇
    • 评论:4条
    最新评论