求助大家,用动态数组写的类,可以动态创建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));
////////.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));
解决方案 »
- IE8 与 vs2008 有冲突?
- CMFCToolBar::DrawButton//第一个参数要CDC啥意思呀?
- 使用IMAPIv2刻录启动光盘的问题?
- 怎样用程序把CStatic标签设成向上凸的3D样式?不是选择CStatic标签的Modal Frame,因为颜色太深。
- [创业] 程序员创业群。34017489
- 高手,请进!
- 如何产生一个直接继承于CObject的类?
- 紧急求救,能给个三原色图形源代码吗?
- 急!!!用fopen打开一个bmp文件后如何取得该文件中的一些重要信息?
- 求教!英文中常用符号的读法——比如花括号(左花括号“{”和右花括号“}”)?
- 急求:VC++ ADO 数据库高手 在线等!!!
- 关于MFC交互式绘图的问题!很急!!!!!!!!!!
CRect rc;
GetClientRect(&rc);
然后用这个RC来调整你的EDIT的位置
{
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;