类似QQ游戏大厅导航的树型控件
2010-03-03 15:27
411 查看
注:这篇文章是早些日子我发布在VCKBASE上面的,现在拿过来.
下载地址 http://www.vckbase.com/code/winui/tree/Text_CTreeBT_Demo.rar
摘要
随着软件界面越来越花俏,windows标准常用控件难以满足实际项目的需求。在最近的项目中,需要实现一个类似QQ游戏大厅导航树型控件。参考了网络上的部分资料,自己动手制作了一个类CTreeCtrlBT。其界面如下:
实现步骤
第一步:新建一个基于对话框的MFC工程,拖动一棵标准树型控件放于界面之上。添加一个新类CTreeCtrlBT派生自CTreeCtrl。
第二步:为该类添加一些消息响应以及虚函数。其详细作用如下:
void PreSubclassWindow(); //用于添加初始化控件的相关信息
WM_SIZE //控件区域发生变化时候的处理
WM_PAINT //绘制控件
WM_MOUSEMOVE //主要获取鼠标所在位置的单元项
第三步:TreeCtrlBT.h中首先声明一个结构用于保存单元项的相关信息,并把所有项的信息放入一个map。实现代码如下:
第四步:计算控件的客户区域大小,以及滚动条滚动的偏移量。详细过程参考源代码
Calculate函数。
第五步:添加接口函数以及成员变量。如下:
(注意:TransparentBlt函数,需要包含msimg32.dll)
第六步:绘制控件。需要的绘制函数如下:
结束语
初次发表文章,表达不够详细的地方,望多多谅解,详细过程请参考源代码。在制作本控件时候,参考了类VividTree的部分代码,其地址如下:
http://www.codeproject.com/KB/tree/VividTree.aspx
如果你有对本代码有声明建议或者意见可以联系本人,非常期待交往你这个朋友。
QQ:182408087
MSN:xiaofangmsg@hotmail.com
下载地址 http://www.vckbase.com/code/winui/tree/Text_CTreeBT_Demo.rar
摘要
随着软件界面越来越花俏,windows标准常用控件难以满足实际项目的需求。在最近的项目中,需要实现一个类似QQ游戏大厅导航树型控件。参考了网络上的部分资料,自己动手制作了一个类CTreeCtrlBT。其界面如下:
实现步骤
第一步:新建一个基于对话框的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<HTREEITEM,ITEM_MSG*> 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, COLORREF 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);
结束语
初次发表文章,表达不够详细的地方,望多多谅解,详细过程请参考源代码。在制作本控件时候,参考了类VividTree的部分代码,其地址如下:
http://www.codeproject.com/KB/tree/VividTree.aspx
如果你有对本代码有声明建议或者意见可以联系本人,非常期待交往你这个朋友。
QQ:182408087
MSN:xiaofangmsg@hotmail.com
相关文章推荐
- CTreeCtrl——类似QQ游戏大厅导航的树型控件
- 高仿QQ游戏大厅-支持换肤和控件切换动画
- Visual C++开发类似QQ游戏大厅全过程
- android popwindow类似QQ中控件
- QQ游戏大厅 2008 去广告/支持多开功能破解版下载
- 过QQ游戏大厅的SX保护
- 类似QQ控件动态输入框
- android ViewPager加Fragment实 4000 现导航加左右滑动(类似QQ、微信)
- .NET Winform也能画出类似QQ、飞信这样的窗口风格和控件效果
- JS+CSS实现类似QQ好友及黑名单效果的树型菜单
- qq游戏大厅2015官方下载正式版 v3.6 免费版
- 类似QQ表情的控件 EmotionContainer(原创)
- qq游戏大厅2014 v3.4 官方正式版
- Delphi类似QQ皮肤控件,欢迎试用!
- android实现QQ游戏大厅一样的启动第三方APP
- javascript现实类似QQ相册相片间的导航
- JS+CSS类似QQ好友/黑名单的树型菜单
- 滑动导航 (类似QQ隐藏)
- qq游戏大厅中解析不安装apk的研究
- 浏览器 游戏大厅 聊天工具 每个对象新建一个控件 不同控件里的控件名字不要相同