作者:铁匠他夫人_738 | 来源:互联网 | 2023-10-11 18:27
在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;
CListm_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 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 {
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;