让你的软件界面更漂亮(六)-- 仿QQ主界面之ListCtrl

http://tech.ddvip.com   2007年12月30日    社区交流

本文详细介绍让你的软件界面更漂亮(六)-- 仿QQ主界面之ListCtrl

  QQ 的ListCtrl 包含了很多信息,如在线用户和不在线用户的头象不同,有视频设备的用户还会显示标志,开通了手机短消息功能的也会显示标志,等等。这是如何实现的?找MSDN分析CListCtrl 发现,有两个函数SetItemData(int nItem,DWORD dwData),和

  DWORD GetItemData(int nItem),非常有用,这个32位 data 做几个标志还是不错的,但还是无法表达更多的东东。如果把这32位 data作为外部结构的地址是否可行呢?经实验是可行的,但在要外部处理,封装性能不好! 于是定义了一个用户信息的结构。

struct LUSERITEM
{
   CString     szUserID;
   CString     szUserName;
   CString     szIPAddress;
   CString     szServerAddress;
   CString     szNoticeMsg;
   BOOL      bOnline;
   int       nHeadImageIndex;
   //根据需要可增加信息
};
再定义一个链表,用来管理用户信息的结构,如查找,增加,删除等操作。 在头文件中添加#include <dequ>
typedef std::deque<LUSERITEM> DEQUELVITEM;

  二、打开Visual Studio C++ (6.0),新建工程。(本文的目的是实现自绘 ListCtrl 的,实现过程下面会详细介绍)

  a. 首先,生成一个新类名为CMyListCtrl. 其基类为CListCtrl. 这部分工作用ClassWizard很容易完成。

  b. 添加相关消息及处理函数,OnPaint() ;OnMouseMove();OnHScroll();OnVScroll等,这部工作用ClassWizard同样很容易完成。编译通过后,接着往下看。

  c. 在.h文件顶部定义用户信息结构struct LUSERITEM

  d. 在.h文件顶部定义一些常量标志

来源:vckbase    作者:朱一松    责编:豆豆技术应用

正在加载评论...