VC控件使用小结

      这段时间通过使用MFC做车牌识别系统和媒体播放器,重新温习了一下MFC,特别是控件的使用,同时也学习了ADO技术、Socket网络编程、文件传输、OpenCV、多线程、数字图像处理、Windows Media Player、CActiveMovie控件、DricetShow多媒体等的知识,不过由于时间有限,有些东西也没有深入,但是学习编程的方法都是相通的。觉得有时还是通过项目实践学习的知识比较快,通过参考别人的代码结合MSDN这些API参考文档,加深对一门新技术的理解和消化对于初学者来时往往不失为一种快速的入门手段。废话不多说了,进入主题吧,今天把我学习到的MFC控件做一个小结吧,希望能给其他的人以帮助吧。

    一、CListBox---列表框控件

1、清除CListBox中的所有内容

两种方法:

(1)ResetContent成员函数

CListBox m_listBox;

m_listBox.ResetContent();

(2)while(m_listBox.GetCount() !=0)

   m_listBox.DeleteString(0);

2、获取当前选中行的文本值

CListBox m_listBox;

int index = m_listBox.GetCurSel();  //获取选中的标号

CString strChoosed;

m_listBox.GetText(index,strChoosed); //获取选中的标号对应的文本值

  二、CListCtrl---列表控件

1、获取当前选中行的文本值

CListCtrl m_listctrl;

int indexRow= m_listctrl.GetSelectionMark();   //获取用户当前选中的行标号 CString strChoosed =m_listctrl.GetItemText(indexRow,1);   //获取当前选中行的第2列(列标号从0开始)对应的文本值

2、删除所有列

    方法一:          while ( m_list.DeleteColumn (0))        因为你删除了第一列后,后面的列会依次向上移动。

    方法二:       int nColumns = 4;       for (int i=nColumns-1; i>=0; i--)           m_list.DeleteColumn (i);

3、ClistCtrl如何在第二次添加数据时清除标题栏? 我在使用MFC做媒体播放器时,在涉及到ADO数据库查询后将查询结果放在CListCtrl控件上。查询一次后,当第二次查询时,必须清除上次结果的所有内容,包括列标题头和显示行的内容。删除显示内容比较容易,直接使用CListCtrl类的DeleteAllItems就可以了;删除列标题就有点麻烦了。这个问题困扰了我很久,终于在一篇CSDN的帖子找到了相应的解决方案。示例如下: CListCtrl m_mediaListCtrl;  //m_mediaListCtrl是在对话框中绑定的CListCtrl变量 int i = 0, iCount = 0;  m_mediaListCtrl.DeleteAllItems(); // 首先清空CListCtrl下面的所有值

//清空列标题头 CHeaderCtrl* pHeadCtrl =  m_mediaListCtrl.GetHeaderCtrl(); //获取该CListCtrl控件变量对应的列表头指针 iCount = pHeadCtrl->GetItemCount();  //获取列表头的列数

for(i = 0; i < iCount; i++)  {     m_mediaListCtrl.DeleteColumn(0);  //清空列表头

}

 三、CTreeCtrl---树控件

1、加载图标

//创建图表列表

 CImageList m_imgPlaylist; 

CMediaPlayerApp * pApp = (CMediaPlayerApp *)AfxGetApp();  m_imgPlaylist.Create(16,16,ILC_COLOR|ILC_MASK,2,2);  //创建图标列表 图标为单个图标  m_imgPlaylist.Add(pApp->LoadIcon(IDI_ICON_FILE1));  m_imgPlaylist.Add(pApp->LoadIcon(IDI_ICON_FILE2));

//设置图像列表

 CTreeCtrl m_playlistTreeCtrl; m_playlistTreeCtrl.SetImageList(&m_imgPlaylist,TVSIL_NORMAL);

//为m_playlistTreeCtrl设置一个图像列表,使CtreeCtrl的节点显示不同的图标  m_playlistTreeCtrl.SetBkColor(RGB(150,100,120));//设置m_playlistTreeCtrl的背景色为红色

 //设置显示风格  DWORD dwStyle=GetWindowLong(m_playlistTreeCtrl.m_hWnd ,GWL_STYLE);//获得树控制原风格  dwStyle|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;//设置风格  ::SetWindowLong (m_mediaTreeCtrl .m_hWnd ,GWL_STYLE,dwStyle1);

//构建树形结构

 HTREEITEM root = m_playlistTreeCtrl.InsertItem("PlayList",0,0,TVI_ROOT,TVI_LAST);  m_playlistTreeCtrl.InsertItem("最喜欢的List",0,0,root2,TVI_LAST);  m_playlistTreeCtrl.InsertItem("刘德华List",0,0,root2,TVI_LAST);  m_playlistTreeCtrl.InsertItem("梁静茹List",0,0,root2,TVI_LAST);  m_playlistTreeCtrl.InsertItem("周杰伦List",0,0,root2,TVI_LAST);

2、 //清空播放列表CTreeCtrl控件

CTreeCtrl m_mediaTreeCtrl;

 m_mediaTreeCtrl.DeleteAllItems();

四、CComboBox---组合框控件

1、获取组合框控制句柄

添加成员变量comboboxCtr;或者

CComboBox* comboboxCtr = (CComboBox*)GetDlgItem(BOX_ID);

2、点击下拉框不显示下拉列表(问题)

对话框编辑器里,把列表往下拖长一点即可。

3、设置展开下拉列表、设置输入框只读、清空列表内容

CComboBox* comboboxCtr = (CComboBox*)GetDlgItem(BOX_ID);

comboboxCtr->ShowDropDown(TRUE);

comboboxCtr->GetEditCtrl()->SetReadOnly(TRUE);

comboboxCtr->ResetContent();

4、 重置组合框,删除所有的项 

 CComboBox m_mediaCombox;  m_mediaCombox.ResetContent();

5、 获取用户当前在组合框中选择的文本值

 int ichoosedIndex;  //选择的id索引值  CString strChoosed;  ichoosedIndex = m_mediaCombox.GetCurSel();  //获取用户选择的索引标号

 m_mediaCombox.GetLBText(ichoosedIndex,strChoosed);  //获取相应的标号对应的文本值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Qt5.2中使用ping命令实现Ip扫描功能

    在实现类似于Free IP Scanner 2.1的Ip扫描器软件中,会用到ping命令。如果使用Qt编程实现,主要会用QThread、QProcess这两个...

    ccf19881030
  • Go by Example 中文:字符串函数

    标准库的 strings 包提供了很多有用的字符串相关的函数。这里是一些用来让你对这个包有个初步了解的例子。 对应的示例测试程序如下:

    ccf19881030
  • 使用Node.js的简单Websocket示例

    本文翻译自Simple Websocket Example with Nodejs

    ccf19881030
  • 「R」t 检验

    你想要检验来自两个总体的样本是否有不同的均值(显著性差异),或者检验从一个总体抽取的样本均值和理论均值有显著性差异。

    王诗翔呀
  • 三层架构之我见 —— 不同于您见过的三层架构。

           我从02年开始了编程的工作,开始接触一些简单的网站,下半年写了个小的自助建站程序(asp和asp.net),比较简陋没有使用。03年开始正式做网站...

    用户1174620
  • 印度电力公司遭遇黑客攻击,勒索 1 RS Core 或 1000 万卢比

    上周,黑客攻占了印度 Uttar Haryana Bijli Vitran Nigam(UHBVN)电力公司的计算机系统,窃取了客户的账单数据。 攻击者对电力公...

    周俊辉
  • 非985、211的大学生该怎么找到好工作?

    外企、国企、一线创企,稍微有点儿来路的企业发招聘信息,如果不写个“只录取985/211毕业生”好像就是火星来的企业。虽然10月1日起实行的《人力资源市场暂行条例...

    OpenCV学堂
  • ZooKeeper的十二连问,你顶得了嘛?

    ZooKeeper的视图数据结构,很像Unix文件系统,也是树状的,这样可以确定每个路径都是唯一的。zookeeper的节点统一叫做「znode」,它是可以通过...

    捡田螺的小男孩
  • 美国失业人数突破2200万!这个动态图我用Python画出来了

    【导语】:今天我们聊聊美国失业人数,Python技术部分可以直接看第二部分。公众号后台,回复关键字“失业人数”获取完整数据。

    CDA数据分析师
  • jellyfish:快速计算kmer分布

    jellyfish可以统计DNA序列中Kmer的分布,它运行速度快,内存消耗低,支持并行,是最常用的kmer统计软件之一。

    生信修炼手册

扫码关注云+社区

领取腾讯云代金券