CodeProject上的几种Layout

本文介绍了ResizableLib库和一种C++辅助类用于实现控件的动态调整与定位。ResizableLib通过AddAnchor函数指定控件在窗口变化时的位置与大小调整方式。C++辅助类允许开发者设置控件相对于窗口边界的偏移量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ResizableLib
http://www.codeproject.com/KB/dialog/resizablelib.aspx
    AddAnchor(IDC_STATIC2, TOP_LEFT);
    AddAnchor(IDC_EDIT1, TOP_LEFT, ANCHOR(40,100));
    AddAnchor(IDC_BUTTON1, BOTTOM_LEFT, ANCHOR(40,100));
    AddAnchor(IDC_BUTTON2, BOTTOM_LEFT, ANCHOR(40,100));
    AddAnchor(IDC_GROUP1, ANCHOR(40,0), BOTTOM_RIGHT);
    AddAnchor(IDC_COMBO1, ANCHOR(40,0), TOP_RIGHT);
    AddAnchor(IDC_RADIO1, ANCHOR(70,0), ANCHOR(70,0));
    AddAnchor(IDC_RADIO2, ANCHOR(70,0), ANCHOR(70,0));
    AddAnchor(IDC_RADIO3, ANCHOR(70,0), ANCHOR(70,0));
    AddAnchor(IDC_STATIC1, ANCHOR(40,0), BOTTOM_RIGHT);
    AddAnchor(IDC_ICON1, ANCHOR(40,0), ANCHOR(70,0));
尚需依赖界面编辑器!
ANCHOR(40,0)按照原作者的说明前者为x坐标,后为y坐标,均以比例计 (但本人此处猜测应该分别是dx和dy的比例,即拖动父窗体增长的坐标值的比例)
AddAnchor(hwnd/Dialog ID, top-left, bottom-right),第二个参数为控件左上角比例坐标,第三个参数

为控件右下角坐标;注意!当两个参数相等时,使用编辑界面时的值!这种情况很多
DEMO中型如BOTTOM_RIGHT的宏比较容易误导人,应该看作RIGHT_BUTTOM
另外,AddAnchor(::GetDlgItem(GetResizableWnd()->GetSafeHwnd(),IDC_DATAGRID1),   ,   );在针对DataGrid的时候是行不通的,而必须用AddAnchor(GetDlgItem(IDC_DATAGRID1)->m_hWnd ,    ,   )

这个方法在与DATAGIRD一起使用的时候容易出现问题,如拖动父窗体时, datagir重绘有问题

二、《Control Positioning and Sizing using a C++ Helper Class》
http://www.codeproject.com/KB/dialog/layout_helper.aspx
可定义控件相对上下左右的offset
而此处的anchor坐标都是相对左或上
这个可以比例以pixel计,分别以宏表明。
形如
 info.Reset();
    info.AddOption(CLayoutInfo::OT_LEFT_OFFSET,   0);
    info.AddOption(CLayoutInfo::OT_LEFT_ANCHOR,   360);
    info.AddOption(CLayoutInfo::OT_TOP_OFFSET,    10);
    info.AddOption(CLayoutInfo::OT_RIGHT_OFFSET,  10);
    info.AddOption(CLayoutInfo::OT_BOTTOM_OFFSET, 10);
    info.AddOption(CLayoutInfo::OT_BOTTOM_ANCHOR, 125);
    m_layoutHelper->AddControl(m_layoutOptionsBox, info);

若要使用OT_BOTTOM_ANCHOR,则必须先使用OT_BOTTOM_OFFSET,其它的方向同。
datagrid的重绘无问题,但是似乎DBGrid是两部分组成:外面的框和里面的Grid。所以需要在FornView或者Dialog的Onsize里面专门地写一下DbGrid的MoveWindow,否则就只能看到外面的框自动调整而里面的Grid不调整。
三、另外的一种LayOut
For more powerfull solution see MSDN Magazine July 2001 --- Paul DiLascia: Windows UI: WinMgr
http://msdn.microsoft.com/msdnmag/issues/01/07/winmgr/default.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值