duilib-xml内嵌xml

本文介绍了如何在Duilib中通过两种方法实现内嵌XML控件与源文件关联:一是重写CreateControl接口动态创建;二是预先创建子对话框并根据窗口初始化消息调整布局。详细步骤包括修改XML结构和在窗口初始化时设置控件位置。

1、xml仅内嵌xml,不能关联内嵌xml对应的源文件

法1:

<Include source="DlgFiveRange.xml">

法2:

step1:重写CreateControl接口

virtual CControlUI* CreateControl(LPCTSTR pstrClass);

CControlUI * CDlgTradeCommon::CreateControl(LPCTSTR pstrClass)
{
    if (_tcsicmp(pstrClass, _T("DlgFiveRange")) == 0)
    {
        CDialogBuilder builder;
        CControlUI* pUI = builder.Create(_T("DlgFiveRange.xml"));
        return pUI;
    }

    return nullptr;
}

step2:在xml中内嵌子xml

<HorizontalLayout name="HLayoutFiveRange" pos="270,80,500,450" width="255" height="360" bkcolor="#FFFF0000">
            <DlgFiveRange width="255" height="360"/>
 </HorizontalLayout>

2、自己创建内嵌子xml关联的源文件对应的对话框,然后嵌入进来,位置信息等到收到DUI_MSGTYPE_WINDOWINIT消息后再进行布局(一般是WM_PAINT之后发送的该消息,之后才能获取相应的位置信息)

CHorizontalLayoutUI *m_pHLayoutFiveRange = nullptr;
CDlgFiveRange* m_pFiveRange = nullptr;

InitWindow中初始化:

m_pHLayoutFiveRange = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("HLayoutFiveRange")));

m_pFiveRange = new CDlgFiveRange();
        if (nullptr != m_pFiveRange)
        {
            m_pFiveRange->Create(NULL, _T("DlgFiveRange"), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW);
            SetParent(m_pFiveRange->GetHWND(), m_hWnd);
        }

DUI_ON_MSGTYPE(DUI_MSGTYPE_WINDOWINIT, OnWindowInit)

OnWindowInit中进行布局:

CRect rcFiveRange = m_pHLayoutFiveRange->GetClientPos();

        if (rcFiveRange.IsRectEmpty())
        {
            return TRUE;
        }

::SetWindowPos(m_pFiveRange->GetHWND(), NULL, rcFiveRange.left, rcFiveRange.top, rcFiveRange.Width(), rcFiveRange.Height(), SWP_SHOWWINDOW);

参考:duilib初始化无法获取控件位置(所有位置都为0)_lixiang987654321的专栏-CSDN博客

Duilib XML嵌套/自定义控件 - _KikyoBK - 博客园
Duilib的xml嵌套使用_k2322138648的博客-CSDN博客
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值