欢迎进入广州凡科互联网科技有限公司网站
全国服务热线
4000-399-000
VS2010/MFC程序编写新手入门之二十九(常见控制:
时间: 2021-02-14 12:29 浏览次数:
手机软件开发设计 VS2010/MFC程序编写新手入门之二十九(常见控制:目录主视图控制List Control 下) 上一节是有关目录主视图控制List Control的上部分,简易详细介绍了目录主视图控制,
手机软件开发设计 VS2010/MFC程序编写新手入门之二十九(常见控制:目录主视图控制List Control 下)

  上一节是有关目录主视图控制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)


1楼. 宣传语全集 程序编写是时尚博主的优势 2012/7/5 9:26:34 回应该留言板留言 2楼. Kinect 真心实意谢谢时尚博主那么不求回报的共享和无私奉献啊,近期要用MFC做页面,看过许多材料实际效果也不是是非非常显著,之后朋友帮我发这一连接,迅速就拿下了。务必的留个言感谢时尚博主,偶会再次适用你的!感谢!鸡啄米 于 :07 回应感谢适用,也感谢你那位朋友 2012/7/5 11:11:06 回应该留言板留言 3楼. 象牙塔 纯碎经过,适用下~ 2012/7/6 11:16:47 回应该留言板留言 4楼. 轿车坐垫哪样好 掌握了,进去适用一下 2012/7/6 13:45:28 回应该留言板留言 5楼. 法国太阳蓄充电电池 适用一下 2012/7/6 14:09:57 回应该留言板留言 6楼. 牟祥blog
呵呵呵,写的很技术专业鸡啄米 于 :31 回应感谢,常来常往啊 2012/7/7 21:47:23 回应该留言板留言 7楼. 布袋 有很大的协助,希望你的事后著作!!鸡啄米 于 :15 回应也期待你可以常来,感谢 2012/9/25 19:51:55 回应该留言板留言 8楼. 小编好热情 小编讲的很条理清晰 要我一看就懂 并且很喜爱看 嘿嘿。。。看见好温馨啊 感谢哈 2012/11/9 16:52:10 回应该留言板留言 9楼. 小编善人 能够说成在网上最好用的mfc文本文档,感谢小编。鸡啄米 于 :09 回应感谢点评这般之高 2012/11/26 21:59:58 回应该留言板留言 10楼. 千池 2013/1/30 14:45:56 回应该留言板留言 11楼. hgeek 一步一步跟随小编学习培训,顶一个 2013/3/18 16:17:12 回应该留言板留言 12楼. fbwfbi 谢谢小编的共享,沟通交流精神实质,来看许多篇,专此赞一个! 2013/4/21 17:43:21 回应该留言板留言 13楼. Stefanie 2013/4/28 16:10:17 回应该留言板留言 14楼. hlwx 小编,怎样要插进的为一个表述式的测算結果,例如m_programLangList.SetItemText(0, 1, _T( 1 ))中_T( )想键入数字能量数组a[5]的值,该如何呢? 感谢小编! 2013/5/19 10:12:37 回应该留言板留言 15楼. liaoyungchun 详细介绍的內容有点儿少,再好点,而且举的事例尽可能遮盖平时开发设计中常会用的作用便可以出版书籍了,比如CListCtrl常常必须点一下表头排列,便可以在事例中完成。 2013/8/20 17:05:33 回应该留言板留言 16楼. yingzhigeta 我想问一下下时尚博主 假如我觉得选定一行后 在编写框中 显示信息一行的数据信息 应当如何弄? 2014/2/16 20:49:39 回应该留言板留言 17楼. lumanyu 小编棒极了,写成那么好的物品,要我的学习培训之途拥有方位,太喜爱您写的物品了。十分谢谢您的共享,是我个小难题想不便您给我解释一下~
// 为目录主视图控制加上三列
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);
为何最终一个主要参数各自是0,1,2 这一是目录子项目的数据库索引? 不太搞清楚啊
2014/3/20 22:36:43 回应该留言板留言 18楼. lumanyu 小编棒极了,写成那么好的物品,要我的学习培训之途拥有方位,太喜爱您写的物品了。十分谢谢您的共享,是我个小难题想不便您给我解释一下~
// 为目录主视图控制加上三列
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);
为何最终一个主要参数各自是0,1,2 这一是目录子项目的数据库索引? 不太搞清楚啊 2014/3/20 22:44:57 回应该留言板留言 19楼. xxxc 小编,有木有有关MFC 联接数据信息库的专业知识点解读啊,

例如说ado方式联接, 2014/5/27 17:27:03 回应该留言板留言 20楼. 123 小编,可否教一下排列,拜托了了 2014/6/7 16:15:02 回应该留言板留言 21楼. 赞 跟随一篇一篇学的 每一篇都干了手记 到这儿早已11页~ 2014/8/14 10:52:45 回应该留言板留言 22楼. snake 跟随小编的步伐走准没有错的!始终适用小编~~~~~~~~~ 2014/9/4 20:31:24 回应该留言板留言 23楼. ayoung 2014/10/19 10:11:12 回应该留言板留言 24楼. chenxy 获救了 一件事们这种初学者来讲,时尚博主写的专业知识点显浅易懂 也有支系专业知识点导航栏 太便捷了 十分谢谢 2014/12/1 14:44:01 回应该留言板留言 25楼. A 凑合会C++基本的程序媛小小白一只,准备按图索骥弄页面,小编的实例教程非常好很全方位,感谢小编滥情思写了那么好的MFC实例教程! 2015/5/21 21:33:37 回应该留言板留言 26楼. 玄白 谢谢时尚博主,近期一开始学MFC,这一实例教程恰好用于了解每个控制和MFC的设计风格,获益颇深。 2015/5/24 2:01:38 回应该留言板留言 27楼. my 您好,我安全性按着实例教程做的 可是出現了一个难题,debug assertion failed 2015/8/28 23:34:23 回应该留言板留言 28楼. 迷醉 痛楚做为一个新手死活找不着OnInitDialog啊,,,求助秋風 于 :05 回应在在建新项目的指导中运用程序种类挑选(根据会话框),在转化成的类选中择含有(xxxDlg)的种类在其中xxx给你新项目的名字。那样你也就寻找OnInitDialog了。
假如并不是面,是在資源主视图中加上資源获得的Dialog那麼这一涵数是要自身建立并加上到类申明中的。 2015/12/23 0:12:53 回应该留言板留言 29楼. 呱呱呱 我想问一下一下,假如要輸出到目录的物品不是明确的,那应当如何輸出,
m_programLangList.InsertItem(0, _T( Java ));
例如这一Java是存储在一个CString或是string的种类里,应当如何弄呀

2016/6/14 17:38:42 回应该留言板留言 30楼. 笨笨 并不是m_programLangList.InsertColumn(0, _T( 語言 ) , LVCFMT_CENTER , rect.Width()/3, 0);
中设定了数据库索引为0列是为垂直居中两端对齐,如何結果是左两端对齐? 2016/6/15 23:18:10 回应该留言板留言 31楼. 在非多形式建立的会话框中显示信息目录框不成功 鸡啄米在吗?
依照小编所显示,建立子会话框(非多形式的),目录主视图控制一直没法显示信息,求助。 2017/1/2 17:00:41 回应该留言板留言 32楼. RF好好地学习培训每天往上 我想问一下排行那多列的数能够不固定不动吗?该如何改?求鸡啄米高手赐教 2017/3/7 14:07:15 回应该留言板留言 33楼. 榛子 微软公司设定的第0列不可以改动,方式在网上找。 2018/6/14 16:26:24 回应该留言板留言 34楼. 青枫 我想问一下时尚博主,我假如要想改动目录的表头,便是語言、2012.02排名这一行的情况色调,该如何实际操作呀 2020/4/10 11:52:00 回应该留言板留言

网页链接(选填)

认证(*)

文章正文(*)(留言板留言最多篇幅:1000)

记牢我,下一次回应时无需再次键入本人信息内容

下一篇:没有了


Copyright © 广州凡科互联网科技有限公司 版权所有 粤ICP备10235580号
全国服务电话:4000-399-000   传真:021-45545458
公司地址:广州市海珠区工业大道北67号凤凰创意园