求助大家,用动态数组写的类,可以动态创建N个CEDIT和Cstatic编译通过了,但是在使用的时候只能显示一个EDIT框。我调试运行了一下,发现y的值是0,找了半天没问题没找出来。我的想法是使用类创建对象的的时候,可以创建多个edit和static框,而且要竖向对齐排列
////////.h文件//////////#if !defined(AFX_EDITCLS_H__FD8A2E59_6047_4D82_B23A_0D832C096850__INCLUDED_)
#define AFX_EDITCLS_H__FD8A2E59_6047_4D82_B23A_0D832C096850__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include <afxtempl.h>class CEdITCls  
{
public:
 
 CEdITCls();
 virtual ~CEdITCls();
 int  CreateEdit(int iNum,CPoint p1,CPoint p2);
 int  CreateStatic(int iNum,CString sCaption);
 
private:
CArray<CEdit*,CEdit*> ArrayEdit;
    CEdit *p_Edit;
CArray<CStatic*,CStatic*> ArrayStatic;
CStatic *p_Static;



};////////////CPP文件/////////////#include "stdafx.h"
#include "Test.h"
#include "EditCls.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CEdITCls::CEdITCls()
{


}CEdITCls::~CEdITCls()
{

}CEdITCls::CreateEdit(int iNum,CPoint p1,CPoint p2)
{

for (int i = 1; i <=iNum ;i++)

p_Edit = new CEdit;
ArrayEdit.Add(p_Edit);

p_Edit->Create(WS_CHILD | WS_VISIBLE,CRect(p1.x,p1.y+40,p2.x,p2.y+90) ,
AfxGetMainWnd(),600+iNum);

// cls.CreateEdit(3,(30,10),(50,30));
}

return 0;
}CEdITCls::CreateStatic(int iNum,CString sCaption)
{
for (int i = 1; i <=iNum; i++)
{
p_Static = new CStatic;
ArrayStatic.Add(p_Static);

p_Static->Create(sCaption,WS_CHILD | WS_VISIBLE,CRect(i*100, i*100, i*100+50, i*100+20),
AfxGetMainWnd(),800+iNum);
}
return 0;
}
////////////对话框初始化函数///////////// cls.CreateEdit(3,(30,10),(50,30));

解决方案 »

  1.   

    楼主你那两个CPoint 的值根本没有改变过,你所有的EDIT不是就在同一位置,那就被覆盖了,所以你自己要改下CPoint 的值,个人建议你用
    CRect rc;
    GetClientRect(&rc);
    然后用这个RC来调整你的EDIT的位置
      

  2.   

    p_Edit->Create(WS_CHILD | WS_VISIBLE,CRect(p1.x,p1.y+40,p2.x,p2.y+90) ,//与i无关?
      

  3.   

    for (int i = 1; i <=iNum ;i++)
    {  
    p_Edit = new CEdit;
    ArrayEdit.Add(p_Edit);p_Edit->Create(WS_CHILD | WS_VISIBLE,CRect(p1.x,p1.y+40,p2.x,p2.y+90) ;
    AfxGetMainWnd(),600+iNum);
    你的p1,p2值没变化, 所以创建了那么多CEdit都重叠在一起了
    在红色代码后面加几行:
    p1.y+=50;
    p2.y+=50;