分享
 
 
 

树状控件的应用(选择出阵武将)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

树状控件的应用

何志丹

下面是树状控件的一些应用,由于是由于用于演示,所以结构并不合理.其效果如图所示..

步骤如下:

1,Insert -> new class,插入一个新类CMyCtrl,基类为CTreeCtrl.

2,利用类向导为CMyTree添加WM_PANIT的响应函数.

代码如下:

void CMyTree::OnPaint()

{

CPaintDC dc(this);

CWnd::DefWindowProc( WM_PAINT, (WPARAM)dc.GetSafeHdc(), 0 );

HTREEITEM hItem = this->GetFirstVisibleItem();

while(NULL != hItem)

{

UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;

if(GetItemState( hItem, selflag ) & selflag)

{

hItem = GetNextVisibleItem(hItem);

continue ;

}

CRect r;

GetItemRect(hItem,&r,true);

{//擦除旧内容

COLORREF col = dc.GetBkColor();

CBrush brush(col);

CPen pen(PS_NULL,1,col);

CBrush * pOldBrush = dc.SelectObject(&brush);

CPen * pOldPen = dc.SelectObject(&pen);

dc.Rectangle(&r);

dc.SelectObject(pOldBrush);

dc.SelectObject(pOldPen);

}

CString strText = GetItemText(hItem);

//设置颜色

dc.SetBkColor( GetSysColor( COLOR_WINDOW ) );

dc.SetTextColor(RGB(255,0,0));

//更改字体

LOGFONT logfont ;

GetFont()->GetLogFont( &logfont );

logfont.lfItalic = true;

CFont font;

font.CreateFontIndirect(&logfont);

dc.SelectObject(&font);

dc.TextOut(r.left + 2,r.top + 1,strText);

hItem = GetNextVisibleItem(hItem);

}

}

3,建立一个基于对话框的程序,增加一个树状控件,ctrl + w打开类向导,为它增加一个关联变量m_tree_ctrl.

4,对树状控件右键,选取属性,把has buttons,has lines,lines at root都选上.

5,手动把CTreeCtrl m_tree_ctrl;改成CMyTree m_tree_ctrl;不要忘记了包含头文件,

#include "MyTree.h"

6,修改对话框的OnInitDialog

BOOL CTestTreeDlg::OnInitDialog()

{

…..

HTREEITEM hRootItem = m_tree_ctrl.InsertItem("五虎上将!");

m_tree_ctrl.InsertItem("关羽",hRootItem);

m_tree_ctrl.InsertItem("张飞",hRootItem);

m_tree_ctrl.InsertItem("赵云",hRootItem);

m_tree_ctrl.InsertItem("马超",hRootItem);

m_tree_ctrl.InsertItem("黄忠",hRootItem);

}

7,Ctrl + F5.效果如图.

8,在资源管理器中增加一个位图,ID为IDB_STATE.

9, 在CMyTree中增加成员变量CImageList m_Images;

10,修改CMyTree的PreSubclassWindow的响应函数.

void CMyTree::PreSubclassWindow()

{

SetBkColor(RGB(255,255,255));

m_Images.Create (IDB_STATE, 18, 4, RGB (128, 0, 0));

SetImageList (&m_Images, TVSIL_NORMAL);

SetWindowLong(m_hWnd, GWL_STYLE, TVS_SHOWSELALWAYS|GetWindowLong(m_hWnd, GWL_STYLE));

CTreeCtrl::PreSubclassWindow();

}

11,增CMyTree类=NM_CLICK的响应函数.

void CMyTree::OnClick(NMHDR* pNMHDR, LRESULT* pResult)

{

DWORD dw = GetMessagePos();

CPoint pt(LOWORD(dw),HIWORD(dw));//鼠标的屏幕坐标

//转换为相对树控件的坐标

CPoint pt1 = pt;

CRect rect;

GetClientRect(rect);

ClientToScreen(&rect);

pt1.x -= rect.left;

pt1.y -= rect.top;

//判断在树控件中的位置

TVHITTESTINFO tHitTestInfo;

tHitTestInfo.pt = pt1;

HitTest(&tHitTestInfo);

if (TVHT_ONITEMICON == tHitTestInfo.flags)

{

int nImage,nSelectImage ;

GetItemImage(tHitTestInfo.hItem,nImage,nSelectImage);

if(0 == nImage)

SetItemImage(tHitTestInfo.hItem,3,3);

else if(3 == nImage)

SetItemImage(tHitTestInfo.hItem,0,0);

}

*pResult = 0;

}

12,把对话框标题改为”请选择出阵的武将”.

13, BOOL CTestTreeDlg::OnInitDialog()

{

…..

HTREEITEM hItem ;

hItem = m_tree_ctrl.InsertItem("关羽");

m_tree_ctrl.SetItemImage(hItem,1,1);

m_tree_ctrl.InsertItem("张飞");

m_tree_ctrl.InsertItem("赵云");

m_tree_ctrl.InsertItem("马超");

hItem = m_tree_ctrl.InsertItem("黄忠");

m_tree_ctrl.SetItemImage(hItem,2,2);

}

14,把树状控件的has line取消掉.

15,再为对话框换一个好看的图标.

16,结果如最前面.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有