当前位置:编程学堂 > vs2010滑块使用案例_VS2010MFC编程初识一【ListControl列表视图控件和SliderControl滑块控 ...

vs2010滑块使用案例_VS2010MFC编程初识一【ListControl列表视图控件和SliderControl滑块控 ...

  • 发布:2023-09-19 09:14

这几天原本是打算从最基本的开始学习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(pNMHDR);

// 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(pNMHDR);

// 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 SubClasses { set; get; }

}

}

?

public partial class MainPage : PhoneApplicationPage

{

Brush accentBrush;

public MainPage()

{

InitializeComponent();

accentBrush = this.Resources["PhoneAccentBrush"] as Brush;

// Get all assemblies

List assemblies = new 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 = new 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 classes)

{

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条大神的评论

发表评论

相关文章