这几天原本是打算从最基本的开始学习C++,但是由于工作需要,我并没有太多时间从头开始学习,所以只能从安排给我的工作内容中一边完成工作一边学习。
这两天用到了ListControl列表视图控件和SliderControl滑块视图控件以及ButtonControl按钮控件。先记下ListControl列表视图控件和SliderControl的简单用法吧。
ListControl有4种样式风格:Icon、Small Icon、List和Report。4种风格各自的特点:
?????? Icon大图标:列表项的图标通常为32×32像素,在图标的下面显示标签。
?????? Small Icon小图标:列表项的图标通常为16×16像素,在图标的右面显示标签。
?????? List列表:与小图标风格类似,图标和文字的对齐方式不同。
?????? Report报表:ListControl可以包含一个列表头来描述各列的含义。每行显示一个列表项,通常可以包含多个列表子项。最左边的列表子项的标签左边可以添加一个图标,右边的所有子项则只能显示文字。
ListControl和SliderControl应用实例:
? ?1. 创建一个基于对话框的MFC工程,名称设置为“MeueSelect”。
? ?2.在自动生成的对话框IDD_MEUESELECT_DIALOG中放入一个ListControl,view属性设置为Report,放入一个SliderControl.
? ?3. 右键给控件添加变量属性,分别命名为m_List和m_Slider。
? ?4.在对话框初始化时,虚拟几科成绩放进列表中,在BOOL CMeueSelectDlg::OnInitDialog()函数中写入代码:
int nRow;//选中行
BOOL CMeueSelectDlg::OnInitDialog(){CDialogEx::OnInitDialog();// TODO: 在此添加额外的初始化nRow=-1;CRect rect;//获取编程语言列表视图控件的位置和大小m_List.GetClientRect(rect);//为列表视图控件添加选中行风格m_List.SetExtendedStyle(m_CarList.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_List.SetItemState(0, 0,LVIS_SELECTED|LVIS_FOCUSED); //为列表控件视图添加6列m_List.InsertColumn(0,_T("科目"),LVCFMT_CENTER,rect.Width()/6,0);m_List.InsertColumn(1,_T("第一次模拟测试"),LVCFMT_CENTER,rect.Width()/3,1);m_List.InsertColumn(2,_T("第二次,模拟测试"),LVCFMT_CENTER,rect.Width()/3,2);m_List.InsertColumn(3,_T("第三次模拟测试"),LVCFMT_CENTER,rect.Width()/3,3);//在列表视图控件中插入列表项,并设置列表子项文本m_List.InsertItem(0, _T("物理")); m_List.SetItemText(0, 1, _T("99")); m_List.SetItemText(0, 2, _T("95")); m_List.SetItemText(0, 3, _T("99")); m_List.InsertItem(1, _T("高数")); m_List.SetItemText(1, 1, _T("82")); m_List.SetItemText(1, 2, _T("92")); m_List.SetItemText(1, 3, _T("96")); m_List.InsertItem(2, _T("C++")); m_List.SetItemText(2, 1, _T("93")); m_List.SetItemText(2, 2, _T("96")); m_List.SetItemText(2, 3, _T("96")); //滑块设置m_Slider.SetRange(0,100);//设置范围m_Slider.SetTicFreq(10);//每2个单位画一个刻度m_Slider.SetPos(0);//滑块初始值return TRUE; // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE}
? ?5.接下来实现选中列表中的一行,SliderControl和ListControl关联,滑动滑块,期末成绩一栏的成绩发生相应变化。
在对话框IDD_MEUESELECT_DIALOG中,给分别给SliderControl和ListControl右键添加事件处理程序。
? ?6.代码操作:
void CMeueSelectDlg::OnClickCarListLine(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast
// TODO: 在此添加控件通知处理程序代码
//得到具体的某一项:
//首先得到点击的位置
POSITION pos=m_CarList.GetFirstSelectedItemPosition();
if(pos==NULL)
{
MessageBox(_T("请至少选择一项"),_T("tip"),MB_ICONEXCLAMATION);
return;
}
//得到行号,通过POSITION转化
nRow=(int)m_List.GetNextSelectedItem(pos);
//得到列中的内容(0表示第一列,同理1,2,3...表示第二,三,四...列)
CString str=m_List.GetItemText(nRow,3);
m_Slider.SetPos(_ttoi(str));//刻度值变化
*pResult = 0;
}
//当调节滑块位置的时候能得到相应的数据
void CMeueSelectDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast
// TODO: 在此添加控件通知处理程序代码
CString sliderV;
sliderV.Format(_T("%d"),m_Slider.GetPos());
m_List.SetItemText(nRow,3,sliderV);
*pResult = 0;
}
运行效果:
编辑控件+按钮的应用
1.创建一个对话框,在对话框上能够输入并显示字符串,比如“Nothing Is Impossible”。 2.在对话框中添加一个按钮,点击按钮,显示按词倒序以后的字符串,比如“Impossible Is Nothing”。 点击按钮显示字符串代码:
CString Character;
GetDlgItem(IDC_EDIT)->GetWindowText(Character);//获取编辑框中的字符串
GetDlgItem(IDC_EDIT)->SetWindowText(Character);
点击按钮使编辑控件中的字符串倒序的代码:
CString Character,word1,word2;
GetDlgItem(IDC_EDIT)->GetWindowText(Character);//获取编辑框中的字符串
//const char* word=(const char *)Character;
word1.Empty();
word2.Empty();
for(int i=0;i { if(Character.GetAt(i)!=' ') { word1=word1+Character.GetAt(i); } else { word2=word1+" "+word2; word1.Empty(); } } word2=word1+" "+word2; GetDlgItem(IDC_EDIT)->SetWindowText(word2); 具体实例见: https://www.sychzs.cn/download/weixin_43812135/15054335?spm=1001.2014.3001.5503 列表框控件+按钮 1.列表框的单选多选设置,这里给出多选设置:在列表框控件的属性中将Selection选项改成Extended。 2.列表框内容是否排序设置: 在列表框控件的属性中将Sort项改为Fals,表示不排序。 列表框控件成员函数学习: 1、 int GetCount( ) const; 返回列表框中列表项的数目。 2、int GetSel(int nIndex) const; 返回nIndex指定列表项的状态。 3、int SetSel(int nIndex,BOOL bSelect = TRUE);此函数只用于多选列表框,使用它可以选择或取消选择指定的列表项。nIndex为-1则相当于指定了所有列表项。bSelect为TRUE时选择指定列表项,否则取消选择指定列表项。 4、int AddString(LPCTSTR lpszItem); 此函数用来向列表框中添加字符串。 5、int InsertString(int nIndex, LPCTSTR lpszItem); 该函数用来在列表框中的指定位置插入字符串。与AddString函数不同的是,InsertString函数不会导致LBS_SORT风格的列表框重新排序。参数nIndex 给出了插入位置(索引),如果值为-1,则字符串将被添加到列表的末尾。 6.void ResetContent(); 该函数用于清除所有列表项。 www.sychzs.cn GetText(int nIndex,LPTSTR lpszBuffer) const; void GetText(int nIndex,CString& rString) const; 这两个成员函数用于获取指定列表项的字符串。 www.sychzs.cn GetTextLen(int nIndex) const; 该函数返回指定列表项的字符串的字节长度。 www.sychzs.cn GetCurSel() const; 该函数仅适用于单选列表框,用来返回当前被选择项的索引 www.sychzs.cn SetCurSel(int nSelect); 该函数仅适用于单选列表框,用来选择指定的列表项。 www.sychzs.cn GetSelCount() const; 该函数仅用于多重选择列表框,它返回选择项的数目 www.sychzs.cn FindString(int nStartAfter,LPCTSTR lpszItem) const; 该函数用于对列表项进行与大小写无关的搜索。 www.sychzs.cn SelectString(int nStartAfter,LPCTSTR lpszItem); 该函数仅适用于单选列表框,用来选择与指定字符串相匹配的列表项。 列表框+按钮实例见: https://www.sychzs.cn/download/weixin_43812135/15054335?spm=1001.2014.3001.5503 Slider 控件+编辑控件 在对话框上显示一个Slider控件和一个Edit控件,初始化程序时设置Slider控件的范围为0-256,步长为1。当鼠标拖动Slider控件时,Edit控件显示Slider控件当前的值。 1.初始化Slider Control控件 m_slider->SetRange(,); //设置滑块控件的范围 m_slider->SetPos(); //设置滑块的位置 2.获取滑块位置 strText1.Format(_T("%d"), pSlide1->GetPos()); 3.显示到编辑控件中或静态文本中 strText1.Format(_T("%d"), pSlide1->GetPos()); 4.使在编辑控件中的显示能够实时更新 首先添加OnHScroll事件(鼠标移动到class类里,属性中选择Messages下的OnHScroll) CSliderCtrl* pSlide = (CSliderCtrl*) pScrollBar; CString strText; strText.Format("%d",pSlide->GetPos()); //实时更新滑块上的数值 SetDlgItemText(IDC_EDIT1,strText); 当横向数据过长时候,显示滚动条,没有过长,则不显示 using System; using System.Collections.Generic; namespace PublicClasses { class ClassAndChildren { public ClassAndChildren(Type parent) { Type = parent; SubClasses = new List } public Type Type { set; get; } public List } } ? public partial class MainPage : PhoneApplicationPage { Brush accentBrush; public MainPage() { InitializeComponent(); accentBrush = this.Resources["PhoneAccentBrush"] as Brush; // Get all assemblies List assemblies.Add(Assembly.Load("System.Windows")); assemblies.Add(Assembly.Load("www.sychzs.cn")); assemblies.Add(Assembly.Load("Microsoft.Phone.Controls")); assemblies.Add(Assembly.Load("Microsoft.Phone.Controls.Maps")); // Set root object (use DependencyObject for shorter list) Type typeRoot = typeof(object); // Assemble total list of public classes List classes.Add(typeRoot); foreach (Assembly assembly in assemblies) foreach (Type type in assembly.GetTypes()) if (type.IsPublic && type.IsSubclassOf(typeRoot)) classes.Add(type); // Sort those classes classes.Sort(TypeCompare); // Now put all those sorted classes into a tree structure ClassAndChildren rootClass = new ClassAndChildren(typeRoot); AddToTree(rootClass, classes); // Display the tree Display(rootClass, 0); } int TypeCompare(Type t1, Type t2) { return String.Compare(www.sychzs.cn, www.sychzs.cn); } // Recursive method void AddToTree(ClassAndChildren parentClass, List { foreach (Type type in classes) { if (type.BaseType == parentClass.Type) { ClassAndChildren subClass = new ClassAndChildren(type); parentClass.SubClasses.Add(subClass); AddToTree(subClass, classes); } } } // Recursive method void Display(ClassAndChildren parentClass, int indent) { string str1 = String.Format("{0}{1}{2}{3}", new string(' ', indent * 4), www.sychzs.cn, parentClass.Type.IsAbstract ? " (abstract)" : "", parentClass.Type.IsSealed ? " (sealed)" : ""); string str2 = " " + parentClass.Type.Namespace; TextBlock txtblk = new TextBlock(); txtblk.Inlines.Add(str1); txtblk.Inlines.Add(new Run { Text = str2, Foreground = accentBrush }); stackPanel.Children.Add(txtblk); foreach (ClassAndChildren child in parentClass.SubClasses) Display(child, indent + 1); } } ? 转载于:https://www.sychzs.cn/otomii/archive/2011/04/29/2032481.html
0条大神的评论