如何在单击时动态创建多个控件
How to create multiple controls dynamically on click
我正在尝试在 运行 按钮单击时动态地在 M.F.C 对话框中创建多行控件(编辑框、复选框和删除按钮)。
并且所有添加的控件都应该在滚动中显示 window。
但不幸的是我找不到解决这个问题的方法。
有人有什么想法吗?
我可以创建一行控件。我的问题是如何在单击“添加”按钮时添加多行,以及如何通过单击同一行上的“删除”按钮来删除该行。
点击添加多次后应该是这样的:
| Edit Box: Type in a Name | |Add|
|Edit Box| |Name 1 (Edit Box)| |Edit Box| |Delete| ^
|Edit Box| |Name 2 (Edit Box)| |Edit Box| |Delete| |
|Edit Box| |Name 3 (Edit Box)| |Edit Box| |Delete| |
etc... v
这是我的一些代码:
int CSettingDlg::AddControlSet() //Create a single row of controls
{
int d = 3500;
if (m_pStrAdd.IsEmpty() == FALSE)
{
GetDlgItem(IDC_TEST1)->GetWindowRect(&rect);
ScreenToClient(&rect);
EditBox = new CEdit;
EditBox->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY, rect, this, d++);
//using the same code above to create 2 more Edit box
Delete = new CButton;
Delete->Create(_T("Del"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, d++);
return TRUE;
}
}
void CSettingDlg::OnBnClickedAddSettingdlg() //Add button Event handler
{
UpdateData();
AddControlSet();
}
当你在window环境中处理动态创建控件时,你应该知道X和Y方向draw/create 表单控件。
监控方向如下:
现在假设您正在以 CRect rect(0, 0, 100, 50);
开头的表单上创建控件
然后单行中的一个控件将放置在此位置(在您的情况下为编辑框),当您在同一行中的编辑框旁边添加删除按钮时,您应该在 X 轴获取删除按钮的新位置。因此下一个位置的矩形将类似于 CRect rect(105, 0, 205, 50);
移动到下一行时采用相同的方法,然后 Y 轴应添加少量坐标以获得下一行的新位置。例如,下一行编辑控件坐标将为CRect rect(0, 55, 100, 105);
我正在尝试在 运行 按钮单击时动态地在 M.F.C 对话框中创建多行控件(编辑框、复选框和删除按钮)。 并且所有添加的控件都应该在滚动中显示 window。 但不幸的是我找不到解决这个问题的方法。 有人有什么想法吗?
我可以创建一行控件。我的问题是如何在单击“添加”按钮时添加多行,以及如何通过单击同一行上的“删除”按钮来删除该行。
点击添加多次后应该是这样的:
| Edit Box: Type in a Name | |Add|
|Edit Box| |Name 1 (Edit Box)| |Edit Box| |Delete| ^
|Edit Box| |Name 2 (Edit Box)| |Edit Box| |Delete| |
|Edit Box| |Name 3 (Edit Box)| |Edit Box| |Delete| |
etc... v
这是我的一些代码:
int CSettingDlg::AddControlSet() //Create a single row of controls
{
int d = 3500;
if (m_pStrAdd.IsEmpty() == FALSE)
{
GetDlgItem(IDC_TEST1)->GetWindowRect(&rect);
ScreenToClient(&rect);
EditBox = new CEdit;
EditBox->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY, rect, this, d++);
//using the same code above to create 2 more Edit box
Delete = new CButton;
Delete->Create(_T("Del"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, d++);
return TRUE;
}
}
void CSettingDlg::OnBnClickedAddSettingdlg() //Add button Event handler
{
UpdateData();
AddControlSet();
}
当你在window环境中处理动态创建控件时,你应该知道X和Y方向draw/create 表单控件。
监控方向如下:
现在假设您正在以 CRect rect(0, 0, 100, 50);
然后单行中的一个控件将放置在此位置(在您的情况下为编辑框),当您在同一行中的编辑框旁边添加删除按钮时,您应该在 X 轴获取删除按钮的新位置。因此下一个位置的矩形将类似于 CRect rect(105, 0, 205, 50);
移动到下一行时采用相同的方法,然后 Y 轴应添加少量坐标以获得下一行的新位置。例如,下一行编辑控件坐标将为CRect rect(0, 55, 100, 105);