请教MFC中如何循环处理相同类型的控件,如编辑框之类的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教MFC中如何循环处理相同类型的控件,如编辑框之类的?相关的知识,希望对你有一定的参考价值。

在下写程序时,由于对话框上使用了很多的编辑框(配合复选框勾选),由于编辑框很多,取值计算时比较麻烦,且计算过程比较简单,想通过循环一次处理掉,但是再下的编辑框的ID号并没有按顺序取,而是按照每个控件内容取的(比如IDC_EDIT_301CC,IDC_EDIT_PCH33等等),请教有可能这些同类控件的循环使用么?好像知道有对应的控件号可以使用,请教如何获得、如何使用,谢谢!

参考技术A 编辑框并不是非得从资源编辑器中才能放到对话框上,也可以动态创建啊:
头文件中声明:
CEdit* m_Edits;

cpp文件的OnInitDialog函数中:
m_Edits=new CEdit(50);

for(int i=0;i<50;i++)

m_Edits[i].Create(……);


程序执行结束时:
for(int i=0;i<50;i++)

delete []m_Edits;


不过这种情况只适合你所有的Edit控件在对话框上的位置都是按规律排列的。如果不是,请用下面的方法:

在头文件中声明足够多元素的CEdit数组:
CEdit m_Edit[50];//假设你事先放好了50个Edit控件

然后找到对话框的DoDataExchange(CDataExchange* pDX)函数,添加如下代码:
DDX_Control(pDX,IDC_XXX, m_Edit[0]);
DDX_Control(pDX,IDC_YYY, m_Edit[1]);
……………………
IDC_XXX和IDC_YYY是各个Edit的ID
像这样手动将所有编辑框添加完就行了,以后就可以用数组的方式访问他们了本回答被提问者采纳
参考技术B 没有办法,只能在Class Wizard关联好了,在初始化后用一个指针数组去标记下来。

类似这样
CEdit m_et1;
CEdit m_et2;
CEdit m_et3;
CEdit m_et4;

CEdit *m_petEdit[4];
参考技术C 把ID记录在数组中.
再GetDlgItem得到控件窗口指针

如何增加mfc中组合框控件的高度?

【中文标题】如何增加mfc中组合框控件的高度?【英文标题】:How to increase the height of the combobox control in mfc? 【发布时间】:2015-01-26 14:11:15 【问题描述】:

我想增加组合框控件的高度。正在增加宽度。但是当我试图增加组合框高度时,它并没有增加。我很清楚我想增加控件的垂直高度。通常我创建的combobox控件如下。

如上图所示,红色边框的控件是组合框控件,我想增加高度。如果你可以看看下图的EDIT控件(注意编辑控件的大小)。类似于编辑控件的大小我必须增加组合框控件的高度。

CString str;
CSize   sz;
CDC*    pDC = m_comboCtrl.GetDC();

m_comboCtrl.GetLBText(0, str);
sz = pDC->GetTextExtent(str);

m_comboCtrl.SetItemHeight(-1,50);

增加垂直高度后,控件中的文本非常小,我们如何使文本适合控件(这类似于默认组合框控件中的普通文本)。但是控件中的文本为接下来,

任何人都可以让我知道如何使文本居中到控件中,如下图所示。上图中的文本在顶部,但我想让文本居中为标准控件中的文本。

【问题讨论】:

ComboBox_SetItemHeight 或相应的 MFC 实现 CComboBox::SetItemHeight。 index/nIndex 必须为 -1 才能设置选择字段的高度。 @IInspectable ,通过 sz.cy=50 后,组合框高度增加了。我们不能使组合中的文本完全适合控件。高度修改后组合框控件是如原始帖子所示。请参考该图像并请告诉我,即使我增加了高度,我们也可以使文本适合控件。 @IInspectable,我已经更新了我的帖子,请看一下,请告诉我您的建议。 这是一个不同的主题,我建议为此提出一个新问题。由于您找到了最初问题的答案,请考虑留下答案(请参阅Can I answer my own question?)。 @IInspectable,关于组合中文本的垂直对齐,正如您建议将其作为一个单独的问题提出的那样,我做到了请参考此链接以了解该问题link,我要求您提供看看那个问题,请告诉我您的宝贵建议。 【参考方案1】:

要增加组合框的高度,我们需要在 OnInitDialog() 中这样做,如下所示,

CString str;
CSize   sz;
CDC*    pDC = m_comboCtrl.GetDC();

m_comboCtrl.GetLBText(0, str);
sz = pDC->GetTextExtent(str);

m_comboCtrl.SetItemHeight(-1,50);//CCombobox m_comboCtrl;

SetItemHeight 中的 50 表示现在我们术语中称为高度的 y 坐标。在 OnInitDialog() 中添加上述代码 sn-p 后,组合框看起来像(参考我添加图像的原始帖子增加高度后的组合框控件(图2))。

【讨论】:

【参考方案2】:

按照http://dotnetbutchering.blogspot.com/2008/03/vc-mfc-how-to-set-combobox-dropdown.html上的说明进行操作:

在 MFC 设计器中

    单击下拉控件中的箭头:将出现一个调整大小的矩形。 调整下拉菜单的高度。

瞧。

【讨论】:

【参考方案3】:

在“属性”窗口中将 Type 属性设置为 Simple

【讨论】:

以上是关于请教MFC中如何循环处理相同类型的控件,如编辑框之类的?的主要内容,如果未能解决你的问题,请参考以下文章

在 mfc 中绘制父对话框

MFC中TAB控件的编辑

如何增加mfc中组合框控件的高度?

MFC 请教怎样设置STATIC TEXT控件的字体大小和颜色

MFC 请教怎样设置STATIC TEXT控件的字体大小和颜色

MFC做表格的控件