




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章使用控件不仅能使应用程序界面美观,而且还可以大大减少编程的工作量。控件已经称为是可视化编程的不可缺少的部分。控件是一种特定类型的输入、输出窗口。控件是利用对话框编辑器通过交互操作来创建的,通过控件的ID与程序相连并调用。本章将重点介绍Visual C+常用控件的属性、方法和事件,包括静态文本控件、编辑框控件、按钮控件、列表框控件、组合框控件、列表视图控件、树视图控件。1静态文本控件默认情况下,所有静态文本控件的ID都为IDC_STATIC,如果需要为静态文本控件添加消息处理函数,需要重新指定一个惟一的ID值。编程时用得最多的就是静态文本控件,每一个静态控件都可以显示255个字符,如果有需要,读者也可以使用换行符“n”。1静态文本控件的主要方法:(1)Create方法Create方法用于创建文本窗口,并将创建的文本窗口关联到CStatic对象上。语法:BOOL Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );参数说明:lpszText:用于设置控件文本。dwStyle:用于设置控件风格。rect:用于确定控件的显示区域。pParentWnd:用于确定控件父窗口指针。nID:用于设置控件ID。(2)SetBitmap方法该方法用于将一个位图关联到静态文本控件中。位图自动地被绘制在控件中,并且控件会自动调整大小以适应位图。返回值为静态文本控件之前关联的位图句柄,如果控件在调用SetBitmap方法之前没有关联的位图,返回值为NULL。语法:HBITMAP SetBitmap( HBITMAP hBitmap );hBitmap:位图句柄。(3)GetBitmap方法该方法用于获取当前控件关联的位图句柄,如果控件没有关联的句柄,返回值为NULL。语法:HBITMAP GetBitmap( ) const;(4)SetIcon方法该方法用于关联一个图标到静态文本控件上,图标将自动的绘制在控件上。语法:HICON SetIcon( HICON hIcon );hIcon:是一个图标句柄。返回值:是之前的图标句柄,如果控件没有关联一个图标,返回值为NULL。(5)GetIcon方法该方法用于获取当前控件关联的图标句柄,如果控件没有关联图标,返回值为NULL。语法:HICON GetIcon( ) const;(6)SetCursor方法该方法用于设置关联控件的鼠标指针形状。返回值为控件之前关联的鼠标指针句柄,如果控件之前没有关联鼠标指针,返回值为NULL。语法:HCURSOR SetCursor( HCURSOR hCursor );hCursor:鼠标指针句柄。(7)GetCursor方法该方法用于获取控件当前关联的鼠标指针句柄。如果控件没有关联鼠标指针句柄,返回值为NULL。语法:HCURSOR GetCursor( );2静态文本控件的主要事件BN_CLICKEN事件:静态文本控件的单击事件,当鼠标单击静态文本控件时产生。 3案例【1】设置显示文本 通过静态文本控件的属性设置显示文本在对话框中选择静态文本控件,按Enter键大开控件的属性窗口,可以通过控件的Caption属性修改控件的显示文本,如图所示。 通过函数显示静态文本控件的显示文本控件都是从CWnd类中派生的,所以也可以使用CWnd类中的函数SetWindowText。通过函数显示文本,首先为静态文本控件关联一个CStatic类型的变量,然后通过该变量调用SetWindonText函数设置显示文本,代码如下。m_Static.SetWindowText(使用函数显示静态文本控件的显示文本);程序运行效果如图所示。【2】设置文本颜色要是设置静态文本控件的文本颜色,可以使用SetTextColor进行设置。设置静态文本控件中的文本颜色,首先设置静态文本控件显示的文本,然后处理对话框的WM_CTLCOLOR消息,在该消息中调用SetTextColor函数设置文本颜色,代码如下。if(nCtlColor = CTLCOLOR_STATIC)pDC-SetTextColor(RGB(255,0,0);程序运行效果如图所示。3模拟按钮控件的单击事件通过静态文本控件的BN_CLICKED消息可以模拟按钮控件的单击事件。使用静态文本控件模拟按钮控件的单击事件,设置控件的显示文本,然后选择Notify属性,在BN_CLICKED消息的处理函数中添加实现代码,弹出一个消息对话框,代码如下。void CExampleDlg:OnStatic1() MessageBox(模拟单击事件);程序运行效果如图所示。 2编辑框控件1编辑框控件的主要方法(1)Create方法:Create方法用于创建编辑框,并将编辑框关联到CEdit对象上。语法如下:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );参数说明:dwStyle:用于设置控件风格。rect:用于确定控件的显示区域。pParentWnd:用于确定控件父窗口指针。NID:用于设置控件ID。(2)CanUndo方法:该方法用于确定编辑控件是否取消操作。语法如下:BOOL CanUndo( ) const;返回值:如果最后一次操作被取消了,返回值为TRUE,否则为FALSE。(3)GetLineCount方法:该方法用于获取控件的行数。语法如下:int GetLineCount( ) const;返回值:如果编辑框没有文本被键入,返回值为1,否则为文本的行数。(4)GetModify方法:该方法用于确定控件的内容是否被修改。窗口保留一个内部标记,确定编辑框内容是否被更改。当控件首次被创建或调用SetModify方法时,该标记被创建。语法如下:BOOL GetModify( ) const;(5)SetModify方法:该方法用于设置或清除编辑框的修改标记。语法如下:void SetModify( BOOL bModified = TRUE );参数说明:bModified:确定设置修改标记还是清除修改标记。如果为TRUE,表示设置修改标记,为FALSE表示清除修改标记。2编辑框控件的主要事件EN_CHANGE:编辑框中文本更新后产生。EN_ERRSPACE:编辑框无法分配内存时产生。EN_HSCROLL:单击编辑框水平滚动条时产生。EN_KILLFOCUS:编辑框失去焦点时产生。EN_MAXTEXT:当编辑框控件不具有Auto Hscroll属性,且输入的字符超过编辑框的宽度时产生,或者当编辑框控件不具有Auto VScroll属性,且输入的字符超过编辑框的高度时产生。EN_SETFOCUS:编辑框得到焦点时产生。EN_UPDATE:在编辑框控件对文本格式化之后显示文本之前产生。EN_VSCROLL:单击编辑框垂直滚动条时产生。【1】设置密码编辑框通过编辑框的Password属性可以设置编辑框中的文本密码显示,打开控件的属性窗口,选择Password属性,如图所示。 【2】设置只读编辑框还可以设置编辑框控件只读,设置成只读编辑框以后,用户不能对控件中的内容进行编辑。打开控件的属性窗口,选择Read-only属性,如图所示。 【3】设置编辑框多行显示通过编辑框的Multiline属性可以进行多行显示,在使用代码输入字符串时,换行时需要键入“rn”,如图所示。【4】设置编辑框按回车键换行即使选择了编辑框的Multiline属性,在输入时还是会碰到无法输入多行的情况,这是因为在输入时无法进行换行,当在编辑框中按下Enter键时就关闭了对话框,这时可以选择编辑框的Want return属性,选择该属性以后,在编辑框中按下Enter键时就可以换到下一行而不关闭对话框了。 【5】使用编辑框控件录入数据用户可以使用编辑框录入数据,在程序中可以通过GetWindowText函数获得编辑框中的数据,下面的就通过GetWindowText函数获得编辑框中的数据,然后使用消息对话框进行显示,用户在编辑框中输入数据,单击“获取”按钮弹出消息框,在消息框中显示编辑框中的数据。代码如下。CString str;m_Edit.GetWindowText(str);MessageBox(str);运行结果如图所示。 3按钮控件1按钮控件的主要方法(1)GetState方法:该方法用于返回按钮的当前状态。语法如下:UINT GetState( ) const;返回值:返回按钮的状态,可选值如下:l BST_CHECKED:按钮被选中。l BST_UNCHECKED:按钮没有被选中。l BST_FOCUS:按钮获得焦点。l BST_INDETERMINATE:按钮处于灰色状态。l BST_PUSHED:按钮处于高亮状态。(2)SetState方法:该方法用于设置按钮状态。语法如下:void SetState( BOOL bHighlight );参数说明:bHighlight:标识按钮是否高亮显示。(3)GetCheck方法:该方法用于获取单选按钮或复选框的选中状态。语法如下:int GetCheck( ) const;返回值:0表示按钮没有被选中,1表示按钮被选中,2表示按钮状态不确定。(4)SetCheck方法:该方法设置单选按钮或复选框的状态。语法如下:void SetCheck( int nCheck );参数说明:nCheck:如果为0,表示按钮没有选中,为1表示按钮被选中,为2表示按钮状态不确定。 2按钮控件的主要事件BN_CLICKED:在用户单击一个按钮时产生。按钮父窗口通过WM_COMMAND消息接收该通知消息。BN_DBLCLK:在用户双击一个按钮时产生。按钮父窗口通过WM_COMMAND消息接收该通知消息。在Win32应用程序中,只有BS_OWNERDRAW风格的按钮才会触发BN_DBLCLK事件。【1】使用按钮显示图标按钮控件除了显示正常的文本以外还可以显示位图和图标等图像元素,要使用按钮显示图标,首先要向对话框中导入一个图标资源,然后打开按钮控件的属性窗口,选择Icon属性,接下来为按钮控件关联一个CButton类的变量,使用按钮显示图标时需要使用CButton类的SetIcon方法。语法:HICON SetIcon( HICON hIcon );hIcon:一个图标句柄。下面使用按钮控件显示图标,代码如下。m_Button.SetIcon(AfxGetApp()-LoadIcon(IDI_ICON1); /设置图标属性设置和运行结果如图所示。【2】使用按钮控件处理用户操作使用按钮控件处理用户的操作就是处理按钮控件的单击事件,在按钮单击事件的处理函数中实现用户操作的实现代码。为按钮控件处理单击事件有两种方法:(1)在对话框中选择按钮控件,双击该控件,在弹出的Add Member Function对话框中设置处理函数名,单击OK按钮进行添加(这里以对话框的“确定”按钮为例),如图所示。 (2)在对话框中打开类向导,在类向导的Message Maps选项卡的Object IDs列表中选择按钮的ID值,在Messages列表中选择BN_CLICKED事件,单击Add Function按钮进行添加。 4列表框控件使用列表框控件编写程序时,有时由于输入的文本信息过多,容易出息重复输入的情况,要避免这种情况发生,可以通过CListBox类的一些方法来实现。下面实例来实现避免向列表框控件中插入重复数据的功能,程序设置步骤如下:(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“避免向列表框控件中插入重复数据”。(2)向对话框中添加一个编辑框控件、一个列表框控件和一个按钮控件。(3)处理“插入”按钮的单击事件,获取编辑框中输入的数据,判断数据是否存在,如果存在则弹出提示,反正插入数据,代码如下。void CListBoxDlg:OnButtonadd() /“插入”按钮单击事件处理函数CString str;/声明字符串变量m_Text.GetWindowText(str);/获取编辑框中的数据int num = m_List.GetCount();/获得列表框中的行数for(int i=0;inum;i+)/根据列表框中的行数进行循环CString Text;/声明字符串变量m_List.GetText(i,Text);/获得指定行的数据if(Text = str)/判断编辑框中的数据和列表框中的数据是否相等MessageBox(数据已存在!);/相等时弹出消息框return;m_List.AddString(str);/不相等时则插入数据实例的运行结果如图所示。5组合框控件1.设置控件风格打开组合框控件的属性窗口,在Styles选项卡中的Type属性可以设置组合框控件的风格,组合框分为3种风格,分别为:Simple、Dropdown和Drop List,其中,Simple风格的组合框包含一个编辑框和一个总是显示的列表框,Dropdown和Drop List风格的组合框都是在用过单击下拉箭头后才弹出列表框,这两种风格的组合框区别在于,Dropdown风格组合框的编辑框可编辑,而Drop List风格组合框的编辑框是只读的。2.调整列表部分的显示大小在使用组合框控件时,如果不经过调整,控件的列表框非常的小,只能显示一项,操作起来非常的麻烦,接下来就看一下,如何调整组合框列表部分的显示大小,如图所示。3通过属性插入数据在使用组合框控件时,可以不使用代码而直接通过控件的属性窗口为控件添加数据选项,只要在控件的属性窗口中选择Data选项卡,就可以在列表框中就可以添加数据了,需要注意的是,每添加一个数据后,要按下组合键换行,然后就可以添加下一个数据了,如图所示4.调整数据显示顺序组合框控件的默认选中属性当中有Sort属性,该属性使控件中的数据将按字母顺序自动排列,但是用户有时需要数据按插入顺序排列,这就要将该属性去掉,向组合框中插入的数据顺序如图8.所示。下面的图中分别是选中和去掉Sort属性后程序的运行结果,如图所示。5.获得选择的数据 要获得列表框中的数据,首先要获得当前选择的列表项索引,可以使用GetCurSel方法实现。获得当前选择的列表项索引后,还要根据索引获得指定的索引获得数据,可以使用GetLBText方法获取列表框中的字符串。下面通过GetCurSel方法和GetLBText方法获得列表框中选择的数据,程序设置步骤如下:(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“获得列表框中选择的数据”。(2)向对话框中添加一个组合框控件,并通过属性窗口为控件赋初值。(3)为控件关联一个CComboBox类型变量,并处理组合框的CBN_SELCHANGE消息,当在组合框的列表中选择一项时,弹出消息框显示列表项的数据,代码如下。void CGetComboDlg:OnSelchangeCombo1() int pos = m_Combo.GetCurSel();CString str;m_Combo.GetLBText(pos,str);MessageBox(str);实例的运行结果如图所示。 6列表视图控件1.设置显示风格列表视图控件可在窗体中管理和显示列表项。可以根据需要为列表视图控件选择不同的显示方式,能够以图标和表格的形式显示数据。打开列表视图控件的属性窗口,在Styles选项卡中的View属性中可以设置显示风格,可选值包括:l Icon:表示图标视图。l Small Icon:表示小图标视图。l List:表示列表视图。l Report:表示报表视图。2.设计登录窗口使用列表视图控件设计登录窗口很简单,首先创建一个图像列表,并通过SetImageList方法将列表视图控件和图像列表关联到一起。然后调用InsertItem方法向列表视图控件插入数据。通过上面介绍的方法,利用列表视图控件设计登录窗口,程序设计步骤如下:(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“利用列表视图控件设计登录窗口”。(2)选择工作区窗口的RecourceView选项卡,导入7个图标资源。(3)向对话框中添加一个列表视图控件(变量名为m_Icon)、一个静态文本控件、一个编辑框控件和一个按钮控件。(4)在对话框头文件中声明一个图像列表对象CImageList m_ImageList;。(5)在对话框的OnInitDialog函数创建图像列表,向图像列表中添加图标,向列表视图中插入数据,代码如下。 m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,0);/创建列表视图窗口m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON1);/向图像列表中添加图标m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON2); /向图像列表中添加图标m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON3); /向图像列表中添加图标m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON4); /向图像列表中添加图标m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON5); /向图像列表中添加图标m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON6); /向图像列表中添加图标m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON7); /向图像列表中添加图标m_Icon.SetImageList(&m_ImageList,LVSIL_NORMAL);/将图像列表关联到列表视图控件中m_Icon.InsertItem(0,王一,0);/向列表视图中添加数据m_Icon.InsertItem(1,孙二,1); /向列表视图中添加数据m_Icon.InsertItem(2,刘三,2); /向列表视图中添加数据m_Icon.InsertItem(3,吕四,3); /向列表视图中添加数据m_Icon.InsertItem(4,庞五,4); /向列表视图中添加数据m_Icon.InsertItem(5,宋六,5); /向列表视图中添加数据m_Icon.InsertItem(6,孙七,6); /向列表视图中添加数据实例的运行结果如图8-16所示。3.将数据加载到列表在上一节中已经介绍了列表视图控件的大图标显示风格,本节以报表风格介绍列表视图控件,向列表视图控件中加载数据时,首先调用SetExtendedStyle方法设置列表视图的扩展风格。然后调用InsertColumn方法向列表视图控件添加列。在插入数据时先调用InsertItem方法插入行,接着调用SetItemText方法向列表的每一列插入数据。在使用列表视图控件时,有时候需要因为数据插入错误,所以需要删除数据。在删除数据前首先要获得要删除数据的索引,可以调用GetSelectionMark方法实现,该方法用于获取列表视图中当前选中的视图项索引。除了使用DeleteItem方法删除一个视图项以外,还可以使用DeleteAllItems方法删除所有的视图项。通过上面介绍的方法,向列表视图控件中插入数据,程序设计步骤如下:(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“将数据加载到列表视图控件中”。(2)向对话框中添加一个列表视图控件(变量名为:m_Grid)、两个静态文本控件、两个编辑框控件和两个按钮控件,并使用类向导为控件关联变量。(3)在对话框的OnInitDialog函数中设置列表视图控件的扩展风格,并设置列信息,代码如下。/设置列表视图的扩展风格m_Grid.SetExtendedStyle(LVS_EX_FLATSB/扁平风格显示滚动条|LVS_EX_FULLROWSELECT/允许整行选中|LVS_EX_HEADERDRAGDROP/允许整列拖动|LVS_EX_ONECLICKACTIVATE/单击选中项|LVS_EX_GRIDLINES);/画出网格线/设置表头m_Grid.InsertColumn(0,姓名,LVCFMT_LEFT,130,0); /设置姓名列m_Grid.InsertColumn(1,绰号,LVCFMT_LEFT,130,1); /设置绰号列(4)处理“插入”按钮的单击事件,将编辑框控件中的数据插入到列表视图控件中,代码如下。void CInsertListDlg:OnButadd() /“插入”按钮单击事件处理函数UpdateData(TRUE);/更新数据交换int count = m_Grid.GetItemCount();/获得获取列表中的项目数量m_Grid.InsertItem(count,);/插入行m_Grid.SetItemText(count,0,m_Name);/向第0列插入数据/ m_Name;为Edit控件变量名称m_Grid.SetItemText(count,1,m_Agname);/向第1列插入数据/m_Agname; 为Edit控件变量名称(5)处理列表视图控件的NM_CLICK消息,在该消息的处理函数中获得当前选中的列表项索引,并将当前项的文本显示在编辑框中,代码如下。void CInsertListDlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) int pos = m_Grid.GetSelectionMark();/获得当前选中项索引m_Name = m_Grid.GetItemText(pos,0);/获得当前选中项第0列数据m_Agname = m_Grid.GetItemText(pos,1);/获得当前选中项第1列数据UpdateData(FALSE);/更新控件显示*pResult = 0;(6)处理“删除”按钮的单击事件,将当前选中的列表项删除,代码如下。void CInsertListDlg:OnButdel() /“删除”按钮单击事件处理函数int pos = m_Grid.GetSelectionMark();/获得当前选中项索引m_Grid.DeleteItem(pos);/删除当前选中的列表项 (7)处理“清空”按钮的单击事件,将列表视图中的数据全部删除,代码如下。void CInsertListDlg:OnButclear() /“清空”按钮单击事件m_Grid.DeleteAllItems();/删除
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化创意行业发展路径评估
- 主题教育存在的问题及整改措施
- 腰椎骨折配合课件
- 2024年高升专试题预测试卷带答案详解(完整版)
- 2023年度公务员考试《常识》考前冲刺练习及参考答案详解【轻巧夺冠】
- 2024高职单招考试综合练习(各地真题)附答案详解
- 强化训练人教版9年级数学上册《概率初步》同步测评试题(含答案解析版)
- 2024-2025学年度保安员考试题库附答案详解(培优B卷)
- 2025年兰州市第二人民医院面向社会招聘编制外人员(20人)考前自测高频考点模拟试题含答案详解(新)
- 2025年中国社会科学院招聘管理人员56人笔试高频难、易错点备考题库带答案详解
- 员工绩效汇报
- 急诊科护士的突发事件应急处置
- DB4401T 68-2020 停车诱导屏技术规范
- 多源异构数据融合与知识图谱构建
- 妇产科母乳喂养质量持续改进QCC品管圈PDCA案4例
- 邯郸城市介绍民俗文化旅游景点推介图文课件
- 固定管板式换热器检修要点
- 深圳机场国际货站信息系统(CTIS)全流程综合联调方案v17
- 手术操作分类代码国家临床版3.0
- 家长会课件:高三第一学期家长会优质课件
- 基于双减背景下小学英语项目式学习创新研究 论文
评论
0/150
提交评论