如何自绘树形控件(QQ好友列表)

如何自绘树形控件(QQ好友列表)

image     

由于Windows控件本身有许多局限性,有些界面要求如果使用标准的Windows控件没有办法实现,或者效率太低。本文主要介绍的是自定义的树形控件,这种控件多用来实现用户列表等功能,如QQ,MSN用户列表效果。

   传统的Tree control有如下局限:

Item高度相同,不能实现不等高的界面效果item绘制复杂,效率不高难以实现背景透明等效果

其中第一条不能设置Item的不同高度是TreeCtrl最大的局限。因为大多数树形列表,希望能用不同的高度来区分不同Item意义,更好的展示Item内容。如下图所示:

image

DSkinLite界面库新特性:支持扩展自绘:dsTreeControl控件和dsTabControl自绘控件

dsTreeControl控件是一款类似Tree control的树形控件,主要支持一些标准树形控件
不能完成的功能,如设置不同item的不同高度。

dsTabControl控件是一款类似Tab control的树形控件,主要是为了解决标准Tab控件的限制,满足更多需求。

自绘树形控件,在DSkinLite界面库中以导出类dsTreeControl的形式提供,我们采用类似MFC/WTL 库CTreeCtrl的方式封装,用户将更加容易和使用dsTreeControl类。部分成员函数如下:

class DSKINDLL_API dsTreeControl{public: dsTreeControl(void);virtual ~dsTreeControl(void);static dsTreeControl* CreateTreeWidget( HWND hwnd, LPCTSTR strStyle);enum { Item_Nor, Item_Over, Item_Checked } itemState; HTREEITEM GetChildItem( HTREEITEM hItem);int GetItemHeight( HTREEITEM hItem, UINT nState );void SetItemHeight( HTREEITEM hItem , int nHeight, UINT nState); DWORD GetItemData( HTREEITEM hItem);void SetItemData( HTREEITEM hItem , DWORD dwData); HTREEITEM HitTest(CPoint pt ) const; BOOL GetItemRect( HTREEITEM hItem , LPRECT lpRect);int GetItemState( HTREEITEM hItem ); BOOL ItemHasChildren(HTREEITEM hItem) const; LPCTSTR GetItemText( HTREEITEM item ); HTREEITEM GetNextSiblingItem( HTREEITEM hItem); HTREEITEM GetParentItem( HTREEITEM hItem ); HTREEITEM GetPrevSiblingItem ( HTREEITEM hItem ); HTREEITEM GetRootItem(); HTREEITEM GetSelectedItem(); BOOL DeleteAllItems(); BOOL DeleteItem( HTREEITEM hItem ); BOOL Expand(HTREEITEM hItem, UINT nCode); HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent);private: HWND m_hWnd;};

如您对此扩展控件树形有任何想法和建议,也欢迎您在我们博客留言,或者与我们Email联系。

DSkinLite除支持一般控件之外,还完整支持各种控件的内置滚动条。同时还采用可以配置listctrl,listbox,treectrl等控件的item内容的绘制,无需额外编写绘制代码。具体请参见:

    Item控件(List control, List Box, Tree Control)绘制(一)–DrawItem配置

   
      同时针对Win32控件本身的一个局限,DSkinLite中加入了一些自绘的控件,来解决使用标准Win32控件无法解决的界面需求。详细了解,WidgetTree自绘控件,WidgetTab自绘控件。

     DSkinLite 新特性– 自绘树形控件(QQ好友列表)

     DSkinLite新特性—WidgetTab

posted @ 2011-03-17 17:11  uieasy  阅读(2238)  评论(0)    收藏  举报