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

在MFC中,提供了List Control类,

 

首先设置如下参数:


显然如果想满足特殊的需求,必须定制适合我们需求的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);

显示效果如下:


接下来就需要向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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值