MFC 自动排列Edit控件 使对齐

最好在长宽上均匀分布... 最好在长宽上均匀分布 展开
 我来答
在下姓周
推荐于2017-06-21 · TA获得超过433个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:103万
展开全部
/*
 * 以下代码用于演示将edit控件按行优先进行排列
 * 同时每一行的控件将居中
 * 按列优先进行排序及列居中可以参考行操作进行修改
 */
const int EDIT_MARGIN = 5; /*控件X间隔*/
const int EDIT_MARGIN_Y = 5; /*控件Y间隔*/
const int EDIT_NUM = 9; /*edit控件数*/
CEdit *edit[EDIT_NUM] = { NULL}; 

for (int i = 0; i < EDIT_NUM; ++i) {
edit[i] = (CEdit*)GetDlgItem(IDC_EDIT1 + i);
}
CRect clientRect; /*显示区域大小*/
CRect editRect; /*edit控件大小*/
GetClientRect(clientRect);
edit[0]->GetWindowRect(editRect);
/*计算横排可以放的edit的个数*/
/*加上两边的间隔,总的EDIT_MARGIN数是edit数+1*/
/*所以显示区域宽度-EDIT_MARGIN后剩下的空间就是*/
/*给edit和相同数目的EDIT_MARGIN的*/
int numX = (clientRect.Width() - EDIT_MARGIN)
/ (editRect.Width() + EDIT_MARGIN);
/*限制一行控件最大值*/
if (numX > EDIT_NUM) numX = EDIT_NUM;
/*因为控件放置不一定刚好,可能会有多余空间*/
/*这里选择将控件居中放置(也可以考虑将控件放大等)*/
int leftMargin = clientRect.Width() - (editRect.Width() + EDIT_MARGIN) * numX;
leftMargin += EDIT_MARGIN; /*回收左边的间隔*/
leftMargin /= 2; /*剩余间隔左右两边平分*/
int left = leftMargin; /*控件X位置*/
int top = EDIT_MARGIN_Y; /*控件Y位置*/
for (int i = 0; i < EDIT_NUM; ++i) {
left = leftMargin + (i % numX) * (editRect.Width() + EDIT_MARGIN);
top = EDIT_MARGIN_Y + (i / numX) * (editRect.Height() + EDIT_MARGIN_Y);
edit[i]->MoveWindow(left, top, editRect.Width(), editRect.Height());
}
bhtzu
2013-10-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4190万
展开全部
MFC资源编辑器中,对话框编辑界面上,可以按住Ctrl键实现控件多选。
选中多个控件后,鼠标右键菜单,有Align Left / Align Top等选项,可以实现对齐。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
起__一个名字
2013-10-22
知道答主
回答量:7
采纳率:0%
帮助的人:5.4万
展开全部
视图->工具栏->对话框编辑器,打开对话框编辑器里面有很多按钮可以完成你要的对齐效果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式