首页 > 其他 > 详细

MFC入门学习之控件(4)标签控件List Control的添加和使用

时间:2014-02-14 22:49:12      阅读:407      评论:0      收藏:0      [点我收藏+]

在MFC中,提供了List Control类,

 

首先设置如下参数:

bubuko.com,布布扣

显然如果想满足特殊的需求,必须定制适合我们需求的List Control,

此处假设我们需要在list中浏览计算机上文件,那么我们可能需要一个button,当点击button时触发浏览文件的操作。这样的操作在List Control中并不存在,那么现在开始在List Control中添加一个按键,那么需要Button类的方法,但是Button类本身不支持在某个特定的List Control中添加,那么也需要对Button类重新封装,满足在特定位置的显示和按照列表的方式进行轮询Button状态。

首先搭建List Control的框架:

CVMC_ListCtrl(CString Text = _T("Some String"));

 

CVMC_ListButton *m_pButton;

CString DefaultText;

int m_pButtonMapColumn;

 

CList<CVMC_ListButton*, CVMC_ListButton*>m_pButtonList;

 

void CreateButton(int iIndex, int iSubIndex, int iMapColumn =-1);

void UpdateButtonPos();//adjust buttons

void OnPaint();

 

int m_nButtonMapColumn;

int m_nSelectedItem;

从上述的定义可以清晰的了解到整个List Control能够为我们提供的全部功能。

既然用到了CVMC_ListButton类,那么就需要对这个类进行封装。

并且我们真正需要的是将按键添加到按键链表中,通过如下方法:

CList<CVMC_ListButton*,CVMC_ListButton*> m_pButtonList;

 

m_pButtonList.AddTail(m_pButton);

 

m_pButton->ShowWindow(SW_SHOW);

 

完成button的添加之后,需要添加消息的处理函数,方法为:

利用消息机制,手动添加消息处理函数

BEGIN_MESSAGE_MAP(CVMC_ListCtrl,CListCtrl)

//Add your own message map here

ON_BN_CLICKED(ID_BUTTON_IN_LIST_BROWSE, OnButtonBrowse)

END_MESSAGE_MAP()

 

声明处理函数的方法:

afx_msgvoid OnButtonBrowse();

 

当然在创建完成一个list control控件之后,最重要的是向里面添加显示信息,首先向list control中添加列信息,也就是标题信息。首先要将创建的控件和对象连接起来,

DDX_Control(pDX,IDC_LIST_SINGLE_DOWNLOAD, m_NandSingleFileList);

 

在初始化函数中添加如下信息:

//listcontrol

CRect rect;

m_NandSingleFileList.GetClientRect(&rect);

 

m_NandSingleFileList.SetExtendedStyle(m_NandSingleFileList.GetExtendedStyle()| LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);

 

lvc.fmt = LVCFMT_CENTER;

lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH |LVCF_SUBITEM;

 

//add column

lvc.pszText = _T("File Name");

lvc.cx = rect.Width()/8;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_NAME,&lvc);

 

lvc.pszText = _T("Path");

lvc.cx = rect.Width()/2;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_PATH,&lvc);

 

lvc.pszText = _T("Start Address");

lvc.cx = rect.Width()/4;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_STARTADDR,&lvc);

 

lvc.pszText = _T("Browse");

lvc.cx = rect.Width()/8;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_BROWSE,&lvc);

显示效果如下:

bubuko.com,布布扣

接下来就需要向list control控件中添加数据。

intnIndex = 0;

intnCountOfImageNO = 12;

 

for(nIndex; nIndex < nCountOfImageNO; nIndex++)

{

m_NandSingleFileList.InsertItem(nIndex,_T("boot.img"));

m_NandSingleFileList.SetItemText(nIndex, LIST_ITEM_FILE_PATH,_T("./boot.img"));

m_NandSingleFileList.SetItemText(nIndex,LIST_ITEM_FILE_STARTADDR, _T("0x00000000"));

//create button

m_NandSingleFileList.CreateButton(nIndex, 3,LIST_ITEM_FILE_BROWSE);

 

m_NandSingleFileList.SetCheck(nIndex, TRUE);

}

 

returnTRUE;

 

MFC入门学习之控件(4)标签控件List Control的添加和使用

原文:http://blog.csdn.net/codectq/article/details/19176595

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!