上一节是有关目录主视图控制List Control的上部分,简易详细介绍了目录主视图控制,其通告信息的解决和相关构造体的界定。这节再次解读下边一部分,包含目录主视图控制的建立、CListCtrl类的关键组员涵数和CListCtrl类运用案例。
目录主视图控制的建立
MFC一样为目录主视图控制的实际操作出示了CListCtrl类。
假如大家不愿在会话框模版中立即拖进List Control来应用目录主视图控制,只是期待动态性建立它,则要采用CListCtrl类的组员涵数Create涵数,原形以下:
virtual BOOL Create(
DWORD dwStyle,
const RECT rect,
CWnd* pParentWnd,
UINT nID
);
主要参数rect为目录主视图控制的部位和规格,pParentWnd为偏向父对话框的指针,nID特定目录主视图控制的ID,最繁杂的一个主要参数一样還是dwStyle,它用以设置目录主视图控制的设计风格,能够是下列设计风格的组成:
设计风格 含意
LVS_ALIGNLEFT 显示信息文件格式是大图图片标或小标志时,标识放到标志的左侧
LVS_ALIGNTOP 显示信息文件格式是大图图片标或小标志时,题目放到标志的上面
LVS_AUTOARRANGE 显示信息文件格式是大图图片标或小标志时,全自动排序控制中的目录项
LVS_EDITLABELS 客户能够改动标识文字
LVS_ICON 特定大图图片标显示信息文件格式
LVS_LIST 特定目录显示信息文件格式
LVS_NOCOLUMNHEADER 在表格文件格式中无法显示列的表头
LVS_NOLABELWRAP 显示信息文件格式是大图图片标时,使标识文字单行显示信息。默认设置是几行显示信息
LVS_NOSCROLL 目录主视图控制无翻转条,此设计风格不可以与LVS_LIST或LVS_REPORT组成应用
LVS_NOSORTHEADER 表格文件格式的目录主视图控制的表头不可以做为排列按键应用
LVS_OWNERDRAWFIXED 由控制的有着者承担绘图表项
LVS_REPORT 特定表格显示信息文件格式
LVS_SHAREIMAGELISTS 使目录主视图共享资源图象编码序列
LVS_SHOWSELALWAYS 即便控制丧失键入聚焦点,仍显示信息出项的挑选情况
LVS_SINGLESEL 特定只有有一个目录项被选定。默认设置时能够多种挑选
LVS_SMALLICON 特定小标志显示信息文件格式
LVS_SORTASCENDING 按升序排序目录项
LVS_SORTDESCENDING 按降序排序目录项
与前边的控制一样,除开之上设计风格一般大家也要为目录主视图控制设定WS_CHILD和WS_VISIBLE设计风格。针对立即在会话框模版中建立的目录主视图控制,其特性页中的特性与所述设计风格是相匹配的,比如,特性Alignment默认设置为Left,也就等额的于特定了LVS_ALIGNLEFT设计风格。
CListCtrl类的关键组员涵数
CListCtrl类有许多组员涵数,鸡啄米这儿就为大伙儿详细介绍好多个常见的关键组员涵数。
UINT GetSelectedCount( ) const;
该涵数回到目录主视图控制中被挑选目录项的总数。
POSITION GetFirstSelectedItemPosition( ) const;
获得目录主视图控制中第一个被挑选项的部位。回到的POSITION值能够用于迭代更新来获得别的挑选项,能够作为主要参数传到下边的GetNextSelectedItem涵数来得到挑选项的数据库索引。假如沒有被挑选项则回到NULL。
int GetNextSelectedItem(POSITION pos) const;
该涵数获得由pos特定的目录项的数据库索引,随后将pos设定为下一个部位的POSITION值。主要参数pos而为前启用GetNextSelectedItem或GetFirstSelectedItemPosition获得的POSITION值的引入。回到值便是pos特定目录项的数据库索引。
int GetItemCount( ) const;
获得目录主视图控制中目录项的总数。
int InsertColumn(int nCol,const LVCOLUMN* pColumn );
int InsertColumn(int nCol,LPCTSTR lpszColumnHeading,int nFormat = LVCFMT_LEFT,int nWidth = -1,int nSubItem = -1 );
这2个涵数用以在表格式目录主视图控制中插进列。第一个涵数中,nCol主要参数为插进列的数据库索引,pColumn主要参数偏向LVCOLUMN构造,在其中包括了插进列的特性。第二个涵数中,nCol主要参数也是插进列的数据库索引,lpszColumnHeading主要参数为列题目标识符串,nFormat主要参数为列汉语本的两端对齐方法,能够是LVCFMT_LEFT、LVCFMT_RIGHT或LVCFMT_CENTER,nWidth主要参数为列宽,nSubItem为插进列相匹配目录子项目的数据库索引。2个涵数在取得成功时都回到新列的数据库索引,不成功都回到-1。
BOOL DeleteColumn(int nCol);
该涵数用以删掉目录主视图控制中的某列。主要参数nCol为删掉列的数据库索引。删掉取得成功则回到TRUE,不成功回到FALSE。
int InsertItem(int nItem,LPCTSTR lpszItem);
向目录主视图控制中插进新的目录项。主要参数nItem为要插进项的数据库索引,主要参数lpszItem为要插进项的标识标识符串。假如插进取得成功则回到新目录项的数据库索引,不然回到-1。
BOOL DeleteItem(int nItem);
从目录主视图控制中删掉某一目录项。主要参数nItem特定了要删掉的目录项的数据库索引。删掉取得成功则回到TRUE,不然回到FALSE。
CString GetItemText(int nItem,int nSubItem) const;
获得特定目录项或目录子项目的显示信息文字。主要参数nItem特定了目录项的数据库索引,主要参数nSubItem特定了目录子项目的数据库索引。
BOOL SetItemText(int nItem,int nSubItem,LPCTSTR lpszText);
设定特定目录项或目录子项目的显示信息文字。主要参数nItem和nSubItem同GetItemText。主要参数lpszText为要设定的显示信息文字标识符串。假如设定取得成功则回到TRUE,不然回到FALSE。
DWORD_PTR GetItemData(int nItem) const;
该涵数用以获得特定目录项的额外32十位数据。主要参数nItem为目录项的数据库索引。回到值便是由nItem特定目录项的额外32十位数据。
BOOL SetItemData(int nItem,DWORD_PTR dwData);
该涵数用以为特定目录项设定额外32位是数据信息。主要参数nItem为目录项的数据库索引,主要参数dwData为目录项的额外32十位数据。
CListCtrl类运用案例
最终鸡啄米還是给大伙儿写一个简易的案例,表明CListCtrl类的好多个组员涵数及通告信息等的应用方式。由于在开发设计中最经常用的要属表格设计风格的List Control了,因此鸡啄米给大伙儿写的是一个表格List Control的事例。
此案例完成的作用:在单选目录主视图控制中显示信息一个简易的程序编写語言排名榜,随后再用电脑鼠标单击挑选某目录项时,将选定目录项的文字显示信息到编写框中。下边是实际完成流程:
1. 建立一个根据会话框的MFC工程项目,名字设定为 Example29 。
2. 在全自动转化成的会话框模版IDD_EXAMPLE29_DIALOG中,删掉 TODO: Place dialog controls here. 静态数据文字控制、 OK 按键和 Cancel 按键。加上一个List Control控制,ID设定为IDC_PROGRAM_LANG_LIST,View特性设成Report,即是表格设计风格,Single Selection特性设成True。再加上一个静态数据文字控制和一个编写框,静态数据文字控制的Caption特性设成 挑选的語言: ,编写框的ID设成IDC_LANG_SEL_EDIT,Read Only特性设成True。这时的会话框模版以下图:
3. 为目录主视图控制IDC_PROGRAM_LANG_LIST加上CListCtrl种类的控制自变量m_programLangList。
4. 在会话框原始化时,大家将程序编写語言排名榜添加到目录主视图控制中,那麼必须改动CExample29Dlg::OnInitDialog()涵数为:
C++编码 BOOL CExample29Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add About... menu item to system menu. // IDM_ABOUTBOX must be in the mand range. ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu- AppendMenu(MF_SEPARATOR); pSysMenu- AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here CRect rect; // 获得程序编写語言目录主视图控制的部位和尺寸 m_programLangList.GetClientRect( rect); // 为目录主视图控制加上全行选定和栅格数据设计风格 m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 为目录主视图控制加上三列 m_programLangList.InsertColumn(0, _T( 語言 ), LVCFMT_CENTER, rect.Width()/3, 0); m_programLangList.InsertColumn(1, _T( 2012.02排行 ), LVCFMT_CENTER, rect.Width()/3, 1); m_programLangList.InsertColumn(2, _T( 2011.02排行 ), LVCFMT_CENTER, rect.Width()/3, 2); // 在目录主视图控制中插进目录项,并设定目录子项目文字 m_programLangList.InsertItem(0, _T( Java )); m_programLangList.SetItemText(0, 1, _T( 1 )); m_programLangList.SetItemText(0, 2, _T( 1 )); m_programLangList.InsertItem(1, _T( C )); m_programLangList.SetItemText(1, 1, _T( 2 )); m_programLangList.SetItemText(1, 2, _T( 2 )); m_programLangList.InsertItem(2, _T( C# )); m_programLangList.SetItemText(2, 1, _T( 3 )); m_programLangList.SetItemText(2, 2, _T( 6 )); m_programLangList.InsertItem(3, _T( C++ )); m_programLangList.SetItemText(3, 1, _T( 4 )); m_programLangList.SetItemText(3, 2, _T( 3 )); return TRUE; // return TRUE unless you set the focus to a control }5. 大家期待在选定目录项更改时,将全新的挑选项即时显示信息到编写框中,那麼可使用NM_CLICK通告信息。为目录框IDC_PROGRAM_LANG_LIST的通告信息NM_CLICK加上信息解决涵数CExample29Dlg::OnNMClickProgramLangList,并改动以下:
C++编码 void CExample29Dlg::OnNMClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast LPNMITEMACTIVATE (pNMHDR); // TODO: Add your control notification handler code here *pResult = 0; CString strLangName; // 挑选語言的名字标识符串 NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR; if (-1 != pNMListView- iItem) // 假如iItem并不是-1,便说明有目录项被挑选 { // 获得被挑选目录项第一身高项的文字 strLangName = m_programLangList.GetItemText(pNMListView- iItem, 0); // 将挑选的語言显示信息与编写框中 SetDlgItemText(IDC_LANG_SEL_EDIT, strLangName); } }6. 运作程序,弹出来結果会话框,在会话框的目录框选用电脑鼠标更改选定项时,编写框中的显示信息会相对更改。实际效果图以下:
有关目录主视图控制List Control的內容终于说完了,內容很多,但具体上这种还仅仅一一部分,在具体开发设计时会碰到各种各样难题,必须大伙儿去查看MSDN或网上找材料等来处理。最终鸡啄米依然谢谢大伙儿对本VS2010/MFC实例教程的关心。
VS2010/MFC程序编写新手入门之二十八(常见控制:目录主视图控制List Control 上) (:5)
VS2010/MFC程序编写新手入门之二十七(常见控制:照片控制Picture Control) (:38)
VS2010/MFC程序编写新手入门之二十六(常见控制:翻转条控制Scroll Bar) (:33)
VS2010/MFC程序编写新手入门之二十五(常见控制:组成框控制Combo Box) (:15)
VS2010/MFC程序编写新手入门之二十四(常见控制:目录框控制ListBox) (:17)
VS2010/MFC程序编写新手入门之二十三(常见控制:按键控制的程序编写案例) (:59)
VS2010/MFC程序编写新手入门之二十二(常见控制:按键控制Button、Radio Button和Check Box) (:18)
VS2010/MFC程序编写新手入门之二十一(常见控制:编写框Edit Control) (:31)
VS2010/MFC程序编写新手入门之二十(常见控制:静态数据文字框) (:38)
VS2010/MFC程序编写新手入门之十九(会话框:色调会话框) (:10)
网页链接(选填)
认证(*)
文章正文(*)(留言板留言最多篇幅:1000)
记牢我,下一次回应时无需再次键入本人信息内容
Copyright © 广州凡科互联网科技有限公司 版权所有 粤ICP备10235580号
全国服务电话:4000-399-000 传真:021-45545458
公司地址:广州市海珠区工业大道北67号凤凰创意园