对话框中对成批控件的操作

原创 2003年09月02日 23:22:00

在使用VC/MFC编程时常碰到要对多个控件同时做同样的操作的情况,特别是你想使某些控件同时禁用或同时隐藏某些控件等。这时你一般可以有如下选择:

1.     你可以给每个控件映射控制类型的变量,然后逐个对它们进行操作,这显然会在对话框类实例化时多占用用来存放成员变量的内存;

2.     你也可以通过GetDlgItem函数得到来得到控件的窗体指针来逐个操作,而这除了占用指针内存外,遇到太多的控件时无疑会使代码量增加;

3.     你可采用指针数组来记录所有的控件,一般先要进行一个初始化动作在动话框开始显示时记录下要操作的控件,然后去对其操作。这种办法除了指针空间外,遇到不同类型的要进行太多的类型转化。

4.     当然,你要像VB那样使用控件数组的话在VC中也是可以通过映射控件的控制类型变量来实现的,但主要是它除了占用空间外还不太适合于不同类型的控件。

这里介绍的是如果使用对话框类自带的两个成员函数来实现这种操作,它们是:

l         CWnd::GetNextDlgTabItem得到“下一个”TAB项控件

l         CWnd::GetNextDlgGroupItem得到一组控件中的“下一个”

注意:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.              这里的“下一个”都是相对的,你可以通过它们的参数让它变成“上一个”;

2.              在使用前者是要注意要操作控件的TabStop”属性必须打上钩或者它要有WS_TABSTOP风格;

3.              使用后一个函数要使要操作的控件在一组,方法是在第一个控件的Group属性上打钩,后面的不打钩;

4.              当一批控件被Enable(false)(即Disable禁用后)下次就使用上述两个函数就不算在内了,所以要再次使用即恢复它们的话必须另外记下它们的指针;

5.              关于上面的两个函数的详细说明请参MSDN

下面是一个应用它们的调用例子:

       CWnd * pWndCtrl = GetDlgItem(IDC_STATIC1);

       for(i=0;i < 11 && pWndCtrl != NULL;i++)

       {

              pWndCtrl->EnableWindow(FALSE);

              pWndCtrl = GetNextDlgTabItem(pWndCtrl);

       }

上面的代码将同时禁用11个控件,将GetNextDlgTabItem换成GetNextDlgGroupItem的话就是对一组控件进行操作啦。

当然,因为这两个函数是CWnd类的成员,对于非对话框上的控件或者动态创建的控件同样有效。

VC++对成批控件进行操作

VC中对成批控件进行操作(比如说多个按钮的同时显示或隐藏)方法有多种,最简单且最笨的方法就是逐个控件进行操作,但工作量会重复且很大。 以下介绍两个批量操作控件的函数: CWnd::GetNex...
  • Tonny_007
  • Tonny_007
  • 2014年02月26日 17:13
  • 621

Qt中的窗口和对话框组件

Window and Dialog Widgets窗口和子窗口 Primary and Secondary Windows主窗口和子窗口 Main Windows and Dialogs主窗口和对话框...
  • t46414704152abc
  • t46414704152abc
  • 2016年04月20日 23:21
  • 1806

MFC子线程访问主线程对话框程序的控件对象

最近在使用 VC 开发软件时需要用到多线程同步来解决开发过程中遇到的问题。本来以为只要象控制台程序一样,在主线程创建子线程,并设置好相应的对象事件就能解决问题,但是等到真正做起来,才在实践中发现原来事...
  • xbmoxia
  • xbmoxia
  • 2013年11月27日 14:17
  • 4713

MFC对话框中的编辑控件的7种操作方式

//第一种方式          int num1,num2,num3;          char ch1[10],ch2[10],ch3[10];          GetDlgItem(I...
  • u010879420
  • u010879420
  • 2016年10月09日 17:59
  • 639

MFC学习笔记之:7种访问对话框控件的方式

7种访问对话框控件的方式,他们分别是:·GetDlgItem()->Get(Set)WindowText()·Get(Set)DlgItemText()·Get(Set)DlgItemInt()·将控...
  • a408789699
  • a408789699
  • 2011年03月31日 14:06
  • 2765

遍历对话框中的控件

在主对话框的cpp文件中 找到OnInitDialog()函数 我自己对话框的命名下额外代码处添加的的遍历代码如下 BOOL CMFCApplication2Dlg::OnInitDial...
  • wansichao
  • wansichao
  • 2015年01月07日 21:50
  • 547

为ActiveX控件添加对话框

1 在资源rc中 添加对话框 并向对话框上拖放一个按钮 对话框的属性做下修改:Border改为None,Control改为Ture,Style改为Child,System改为False,Visi...
  • mfmfmmf1
  • mfmfmmf1
  • 2015年07月05日 18:42
  • 456

Tab Control——属性页的子对话框中的CEdit控件无法输入的解决办法

问题描述CEdit控件在Tab页中没办法输入,利用TabSheet类进行解决
  • xuanyuanlei1020
  • xuanyuanlei1020
  • 2016年09月13日 10:39
  • 674

遍历对话框中所有的控件

对话框缩放之后,要重画。所以得遍历所有的控件。void CSimParDlg::OnButton1() {// TODO: Add your control notification handler ...
  • leaf6094189
  • leaf6094189
  • 2011年03月04日 16:48
  • 2226

MyEclipse对数据库的操作

1、连接数据库 首先打开MyEclipse中的window 选中show view 找到DB Browser 如果界面没有DB Br...
  • u013022861
  • u013022861
  • 2016年06月26日 11:18
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框中对成批控件的操作
举报原因:
原因补充:

(最多只允许输入30个字)