1 Duilib中设置和获取控件的自定义属性

在Duilib除了控件已有的属性之外,还可以通过在xml中自定义控件属性字段。

比如

<Button name="example_Btn" width="208" height="38" text="测试按钮" button_status="open"/>

上面的button_status就是我们自定义的属性,我们可以在代码中通过控件的GetCustomAttribute函数获取自定义属性,比如

CButtonUI* m_ptr_example_btn = static_cast<CButtonUI*>(m_PaintManager.FindControl("example_Btn"));
std::string button_status_str = m_ptr_example_btn->GetCustomAttribute("button_status");

这个特性在处理Combolist控件非常有用,比如有以下Combo控件

<Combo style="trade_common_combo_style" name="notice_type_combo" font="1400" width="168" height="30" dropbox="bordercolor="#FF4D4D50" bordersize="1" bkcolor="#FF4D4D50"">
    <ListLabelElement text="全部" notify_type="0" height="20" selected="true" />
    <ListLabelElement text="供股通知" notify_type="1" height="20" />
    <ListLabelElement text="权益登记" notify_type="2" height="20" />
    <ListLabelElement text="公开配售" notify_type="3" height="20" />
    <ListLabelElement text="股份收购" notify_type="4" height="20" />
</Combo>

我们可以通过这种方式,直接拿到ComboBox的Item中的自定义”notify_type”属性,通过判断所选择的combo下的ListLabelElementnotify_type直接进行相关操作,而不用去比较ListLabelElementtext这种比较粗野的方法,比如

std::string notify_type = "-1";
if (notice_type_combo_) {
    auto index = notice_type_combo_->GetCurSel();
    if (index < 0 || index >= notice_type_combo_->GetCount()) {
        return ;
    }
    auto item = notice_type_combo_->GetItemAt(index);
    if (item == nullptr) {
        return ;
    }
    notify_type = item->GetCustomAttribute("notifyType");

    if(notify_type == "1"){
        // 写相应的处理代码 ...
    }
    else if(notify_type == "2"){
        // 写相应的处理代码 ...
    }
    else if(notify_type == "3"){
        // 写相应的处理代码 ...
    }
    else if(notify_type == "4"){
        // 写相应的处理代码 ...
    }
}

参考链接