这段时间通过使用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); //获取相应的标号对应的文本值