读书人

VC 动态创建Checkbox 位置 有关问题

发布时间: 2012-12-17 09:31:40 作者: rapoo

VC 动态创建Checkbox 位置 问题?
本帖最后由 VisualEleven 于 2012-12-05 15:41:16 编辑 如题, 现在我有多个Checkbox,需分两排显示。

for (int i = 1; i < ChkCount; i++)
{
CButton* MyChk;
MyChk = new CButton();
CWnd *pWnd = new CWnd;
pWnd = GetDlgItem(IDC_InstallGp);
if (i % 2 != 0)
{
MyChk->Create("22222", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, CRect(10,i * 20,100,i * 30), pWnd, i);
}
else
{
MyChk->Create("22222", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, CRect(340,(i - 1) * 20,1200,(i + 1) * 30), pWnd, i);
}
}

这是部分代码, 有错误,达不到我要的效果,应该如何处理?
[最优解释]
你自己的CheckBox的RECT区域计算的不对??
[其他解释]
楼主代码有2个重要问题

1.CButton* MyChk,你这么玩以后MyChk的指针以后没办法获取
以后就没办法控制你Create的CButton了

2.CWnd *pWnd = new CWnd;没意义啊
IDC_InstallGp; 这个资源到底是啥?看不明白
pWnd改成this指针吧,这个参数指定父窗口是谁。你new出个CWnd 完全没意义


3.最后,楼主错误要把编译错误提示给贴出来
[其他解释]
WS_CHILD
[其他解释]
要深水了。1111
[其他解释]
引用:
楼主代码有2个重要问题

1.CButton* MyChk,你这么玩以后MyChk的指针以后没办法获取
以后就没办法控制你Create的CButton了

2.CWnd *pWnd = new CWnd;没意义啊
IDC_InstallGp; 这个资源到底是啥?看不明白
pWnd改成this指针吧,这个参数指定父窗口是谁。你new出个CWnd 完全没意义
……
非常感谢你好提醒,入手VC不久,所以很多地方不是很明白。望指点。IDC_InstallGp 是一个ListBOx 我是想让我创建的控件以它作为父窗体。 还有,我应该如何创建方便后面控制我创建的控件。谢谢。
[其他解释]
现在程序编译没有错误,只是创建后达不到我要的效果。
[其他解释]
嗯, 就是这个区域计算有问题。
[其他解释]
引用:
嗯, 就是这个区域计算有问题。

你想怎么摆放你的checkbox ?
[其他解释]
引用:
引用:嗯, 就是这个区域计算有问题。
你想怎么摆放你的checkbox ?
我现在从一个XML文件取出共计33项,所以需创建33个Checkbox来显示它们,我要把这些Checkbox以ListBox作为父窗体,分两排均匀显示就可以了。并且我希望创建后的Checkbox我可以随意控制它,比如它的选中状态等。
[其他解释]
引用:
引用:
引用:嗯, 就是这个区域计算有问题。
你想怎么摆放你的checkbox ?我现在从一个XML文件取出共计33项,所以需创建33个Checkbox来显示它们,我要把这些Checkbox以ListBox作为父窗体,分两排均匀显示就可以了。并且我希望创建后的Checkbox我可以随意控制它,比如它的选中状态……

这个位置应该很容易计算吧,举个例子

#define MAX_COUNT(33) // CheckBox的总个数
#define MAX_ROW(2) // 一排最大放2个CheckBox
#define IDC_CHECKBOX(0x11) // 控件的ID号

CButton* pButton = NULL;
CString strText(_T(""));

CONST UINT MAX_CHECKBOX_WIDTH = 120; // 定义CheckBox的宽度
CONST UINT MAX_CHECKBOX_HEIGHT = 20; // 定义CheckBox的高度

CONST UINT MAX_CHECKBOX_X_GAP = 20; // 定义CheckBox之间的水平间隔距离


CONST UINT MAX_CHECKBOX_Y_GAP = 20; // 定义CheckBox之间的垂直间隔距离
CRect rect;
rect.SetRectEmpty();
for(int i = 0; i != MAX_COUNT; ++i)
{
if(0 == (i % 2))
{
rect.left = 10;
rect.top = rect.bottom + MAX_CHECKBOX_Y_GAP;
}
else
{
rect.left = rect.right + MAX_CHECKBOX_X_GAP;
}
rect.right = rect.left + MAX_CHECKBOX_WIDTH;
rect.bottom = rect.top + MAX_CHECKBOX_HEIGHT;
strText.Format(_T("CheckBox - %d"), i+1);
pButton = new CButton;
ASSERT(NULL != pButton);
VERIFY(pButton->Create(strText, WS_TABSTOP
[其他解释]
WS_VISIBLE

读书人网 >VC/MFC

热点推荐