MFC中如何让一个控件装载几个控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中如何让一个控件装载几个控件相关的知识,希望对你有一定的参考价值。

一个Edit box控件,里面包含3个按钮控件和2个combo box 控件

重载控件,然后自绘(重写DrawItem函数)。追问

一个Edit box控件,里面包含3个按钮控件和2个combo box 控件

追答

一般不在Edit box中放其他的控件的,直接将按钮和ComboBox控件放在对话框中就可以了。

参考技术A page1.Create(IDD_DIALOG_PAG, GetDlgItem(IDC_FUDLG_TAB));

控件创建时,有指定他的父窗口指针

请教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如何动态添加控件

mfc 窗口大小变化时,如何让窗口内部控件也一起随比例改变位置?

MSVS 2008 如何MFC添加控件?

MFC中TAB控件的编辑

如何把几个MFC控件组合在一起

MFC中如何让静态控件响应鼠标移动的消息?