设为首页 加入收藏

TOP

C语言辅导:类似QQ游戏大厅导航的树型控件
2014-11-23 21:44:27 】 浏览:6346
Tags:语言 辅导 类似 游戏 大厅 导航 控件

  实现步骤
  第一步:新建一个基于对话框的MFC工程,拖动一棵标准树型控件放于界面之上。添加一个新类CTreeCtrlBT派生自CTreeCtrl。
  第二步:为该类添加一些消息响应以及虚函数。其详细作用如下:
  void PreSubclassWindow(); //用于添加初始化控件的相关信息
  WM_SIZE //控件区域发生变化时候的处理
  WM_PAINT //绘制控件
  WM_MOUSEMOVE //主要获取鼠标所在位置的单元项
  第三步:TreeCtrlBT.h中首先声明一个结构用于保存单元项的相关信息,并把所有项的信息放入一个map。
  实现代码如下:typedef struct tagItemMsg
  {
  HTREEITEM hItem;      //项的句柄
  CBitmap  ItemBitmap;    //项的位图
  COLORREF crTransparent;  //透明颜色
  tagItemMsg()
  {
  hItem  = NULL;
  crTransparent = RGB(255,255,255);
  }
  ~tagItemMsg()
  {
  if ( ItemBitmap.GetSafeHandle() )
  {
  ItemBitmap.DeleteObject();
  }
  }
  }ITEM_MSG;
  typedef map
  ITEMMSG_MAP;
   第四步:计算控件的客户区域大小,以及滚动条滚动的偏移量。详细过程参考源代码
  Calculate函数。
   第五步:添加接口函数以及成员变量。如下:
  (注意:TransparentBlt函数,需要包含msimg32.dll)
  //设置背景位图
  BOOL SetBackgroudBitmap( UINT nID );
  BOOL SetBackgroudBitmap(LPCTSTR lpszRecourceName);
  //设置某一项位图
  void SetItemBitmap(HTREEITEM hItem, UINT nIdBitmap);
  void SetItemBitmap(HTREEITEM hItem, LPCTSTR lpszBitmap);
  //设置展开收缩的图表
  void SetExpandBitmap(UINT nIdExpand, UINT nIdCollapse, COLORREF crTransparent = RGB(255,255,255));
  //插入新的项目
  HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, UINT nIdBitmap = 0,
  OLORREF crTransparent = RGB(255,255,255));
  HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, LPCTSTR lpszBitmap,
  COLORREF crTransparent = RGB(255,255,255));
  //开启横线
  void EnableRowLine( BOOL bEnable = TRUE );
  //是否开启横线
  BOOL IsEnableRowLine();
  //开启根节点背景
  void EnableRootBk( BOOL bEnable = TRUE );
  //是否开启根节点背景
  BOOL IsEnableRootBk();
  //获取某一项信息
  ITEM_MSG* GetItemMsg(HTREEITEM hItem);
   第六步:绘制控件。需要的绘制函数如下://绘制渐变色矩形区域
  void GradientFillRect( CDC *pDC, CRect &rect, COLORREF col_from, COLORREF col_to, bool vert_grad );
  //绘制控件背景
  void DrawBackgroudBitmap(CDC* pDc);
  //绘制单元项
  void DrawItem( CDC* pDC );
  //绘制单元项下部横线
  void DrawRowLine(CPoint ptBegin, CPoint ptEnd, CDC *pDc = NULL);
  //绘制展开收缩按钮
  void DrawExpand(CRect rect, int state, CDC *pDc = NULL);
  //绘制单元项位图
  void DrawItemBitmap(CRect rect, HTREEITEM hItem, CDC *pDc = NULL);
  //绘制单元项目文本
  void DrawItemText(CRect rect, HTREEITEM hItem, bool bselected,CDC *pDc = NULL);


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二级C语言考试辅导教程第八章:枚.. 下一篇二级C语言:数组中比较经典的10个..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目