精华内容
下载资源
问答
  • 云信DUILIB 常用控件 小实例

    千次阅读 2018-03-30 17:20:23
    云信duilib在原duilib基础上扩展而来,包含了常用的控件。下面是自己学习过程中,经常用到的一些小知识点。1 Label标签1.1 一般用法<Label name= "path_label" valign="center" height=&...


    云信duilib在原duilib基础上扩展而来,包含了常用的控件。

    下面是自己学习过程中,经常用到的一些小知识点。


    1 Label标签

    1.1 一般用法

    <Label name= "path_label" valign="center" height="auto" width="auto" margin="10,0,5,0"  text="存储地址"  normaltextcolor="white" font="1"
     />

    比如:MFC 中常用的文件对话框


    使用duilib可以这么写

                  <Label name= "path_label" valign="center" height="auto" width="auto" margin="10,0,5,0"  text="存储地址"  normaltextcolor="white" font="1" />
                  <RichEdit name="record_path" width="450" height="28" margin= "10,0,0,0" bkcolor="bk_url_edit"  bordersize="1"  bordercolor="bk_border_url_edit" valign="center"  align="vcenter" font="1" multiline="false" padding="5,0,0,0" normaltextcolor="bk_url_edit_text" disabledtextcolor="bk_url_edit_text" prompttext="路径" promptcolor="bk_url_edit_text"  borderround="2,2"/>
                  <Button  name="set_file_path"  height="28" width="auto" margin= "20,0,1,0" bordersize="1"  valign="center"  normaltextcolor="change_file_path_color" font="1" text="打开路径"/>   

    1.2 

    使得标签位于盒子中间显示


    可以这么写

                <Box bkcolor="bk_wnd_darkcolor1" height="60">
                    <Label font="1" halign="center" valign="center" normaltextcolor="white" text="标签" />
                </Box>

    1.3

    使用textid  好处是在不修改XML的情况下,可以方便修改文字

    <Label name="no_search_result_tip" visible="false" halign="center"
     margin="0,20,0,0" textid="STRID_MAINWINDOW_NO_SEARCH_RESULT" font="2"
    />
    而这个textid是保存在bin\\lang\\zh_CN目录下的gdstrings.ini文件中的。

    此文件中定义了id所对应的文本








    1.4 Label标签的width默认是auto,根据文字确定宽度

    将其居中对齐,可用如下方式

    //将其设置为 stretch  可拉伸方式,这样其宽度由父容器决定,然后再将其 文字对齐方式设置为center 居中对齐
    <Label  width="stretch" align="center" text="课程题目" font="9" />
    或者,使用如下方式:
    <Label  text="本节知识点" halign="center" font="7" />
       //标签宽度是文字宽度,因此align不起作用,这时候设置halign的含义是指它在父容器内的排序方式,此时是居中

    2 分割线

    分割线也是经常用到的。

    2.1 横向分割线

    <Control bkcolor="splitline_level2" height="1" />
    or
    <Control class="splitline_hor_level1" width="stretch"/> 

    2.2 纵向分割线

    <Control class="splitline_ver_level1" height="stretch"/>

    分割线的颜色是在global.xml中定义的

      <!--分割线色值-->
        <!--第一级分割线,较深-->
        <TextColor name="splitline_level1" value="#ffd2d4d6"/>
        <!--第二级分割线,较浅-->
        <TextColor name="splitline_level2" value="#ffebedf0"/>
        <TextColor name="splitline_level8" value="#ff222435"/> 
     
        <!--分割线-->
        <Class name="splitline_hor_level1" value="bkcolor="splitl
    ine_level1" height="1""/>
        <Class name="splitline_hor_level2" value="bkcolor="splitl
    ine_level2" height="1""/>
        <Class name="splitline_ver_level1" value="bkcolor="splitl
    ine_level1" width="1""/>
        <Class name="splitline_hor_level3" value="bkcolor="splitl
    ine_level8" height="1""/> 

    2.3 子控件间隔

     布局中的 childmargin="20" 表示 子控件间的额外距离。这个有时候也是分割线效果,只不过分割线颜色为背景色,这是因为它本质上是子控件的间隙。

    比如VListBox设置childmargin  可以让列表项之间有空隙,进而起到分割线作用

                    <VListBox class="list" bkcolor="lightcolor3" name="course_list" vscrollunit="100" childmargin="20" padding="30,20,20,0">

    3图像

    3.1 盒子里有一个图片,圆形居中,图片中间部分显示label名字


    <Box height="150" bkcolor="bk_wnd_logincolor">
       <Control bkimage="circle-1.png" width="100" height="100"  valign="center" halign="center" borderround="100,100" />
       <Label text="使用者" halign="center" valign="center" />
    </Box>

    3.2 图片按钮


    <Button name="btn_header1" width="66" height="66" margin="1,1,1,1"
     borderround="66,66" cursortype="hand" bkimage="1.png" />

    不过,这种图片按钮,规整成圆形后,边界很粗糙,所以可以加边界遮罩,即除边界外全透明的同等图片来缓和处理。

    上图所示,是加遮罩后的效果。

    <Box width="auto" height="auto" valign="center" >
        <Button name="btn_header" width="66" height="66" margin="1,1,1,1" borderround="66,66" cursortype="hand" />
        <Control bkimage="head_mask.png" mouse="false"/>//68*68的边界遮罩
    </Box> 

    3.3  小图标 配合按钮、EDIT等控件使用


           <!--搜索栏-->
            <HBox height="36" bkcolor="bk_main_wnd_search">
                <Control name="search_icon" width="auto" height="auto" valign="center" margin="10,0,0,0" alpha="192" bkimage="file='../public/icon/icon_search.png'"/>
                <RichEdit class="simple prompt" name="search_edit" height="auto" margin="8,0,10,0" valign="center" font="2" normaltextcolor="white" prompttextid="STRID_MIANWINDOW_SEARCH_EDIT_PROMPT"/>
                <Button name="clear_input" visible="false" valign="center" margin="0,0,10,0"
                        normalimage="..\public\button\btn_del_search_normal.png" 
                        hotimage="..\public\button\btn_del_search_hover.png" 
                        pushedimage="..\public\button\btn_del_search_normal.png"/>
            </HBox>

    4 Option选项卡与Tab 展示页  结合使用


    点击某一选项卡后,展示这一选项卡对应的页面,点击另一个选项卡后,则展示另一个选项卡对应的页面。由此构成了多页面展示效果。

    实现逻辑如下:

    逻辑如下:
                <HBox width="auto" height="auto" halign="center" margin="0,11,0,0" childmargin="10">
                    <Option group="demo_opt" selected="true">
                        <Event type="select" receiver="demo_tab" applyattribute="selectedid="0""/>
                    </Option>
                    <Option group="demo_opt" >
                        <Event type="select" receiver="demo_tab" applyattribute="selectedid="1""/>
                    </Option>
                    <Option group="demo_opt" >
                        <Event type="select" receiver="demo_tab" applyattribute="selectedid="2""/>
                    </Option>
                </HBox>
                    <TabBox name="demo_tab" height="auto">
                        <VBox height="auto" name="tab_0">
                        </VBox>
                        <VBox height="auto" name="tab_1">
                        </VBox>
                        <VBox height="auto" name="tab_2">
                        </VBox>
                    </TabBox>

    实例1: 使用option控件

                    <!-- Option选项卡 -->
                <VBox halign="center" childmargin="10">
                        <Option  bordersize="5" height="60" width="stretch" valign="center" halign="center" group="headPage_opt" name="myCourse" selected="true" selectednormalcolor="bk_wnd_darkcolor5" selectedhotcolor="bk_wnd_darkcolor1" selectedpushedcolor="bk_wnd_darkcolor1" text="我的课程" normaltextcolor="white">
                         <Event type="select" receiver="page_tab" applyattribute="selectedid="0""/>
                        </Option>
                        <Option width="stretch"  selectednormalcolor="bk_wnd_darkcolor5" selectedhotcolor="bk_wnd_darkcolor1" selectedpushedcolor="bk_wnd_darkcolor1"  height="60"   valign="center" halign="center" group="headPage_opt" name="myDevice" text="设备调试" normaltextcolor="white">
                            <Event type="select" receiver="page_tab" applyattribute="selectedid="1""/>
                        </Option>
                        <Option width="stretch"  selectednormalcolor="bk_wnd_darkcolor5" selectedhotcolor="bk_wnd_darkcolor1" selectedpushedcolor="bk_wnd_darkcolor1"  height="60"   valign="center" halign="center" group="headPage_opt" name="mySet" text="设置" normaltextcolor="white">
                            <Event type="select" receiver="page_tab" applyattribute="selectedid="2""/>
                        </Option>   
                </VBox>  
     
     
            <TabBox  name="page_tab" >
                <VBox>
                    <Label text="页面1"/>
                </VBox>
                <VBox>
                    <Label text="页面2"/>
                </VBox>
                <VBox>
                    <Label text="页面3"/>
                </VBox>
            </TabBox>


    实例2:使用OptionBox布局,这样功能更强大。

                <VBox  halign="center">
                    <OptionBox height="60" cursortype="hand" group="headPage_opt" name="myCourse" selected="true">
                        <Event type="select" receiver=".\select_tab" applyattribute="selectedid="0""/>
                        <Event type="unselect" receiver=".\select_tab" applyattribute="selectedid="1""/>
                        <Event type="select" receiver="page_tab" applyattribute="selectedid="0""/>
     
                        <TabBox mouse="false" mousechild="false" name="select_tab" >
                            <HBox>
                                <Control normalimage="file='bk_tab_selected.png'  corner='5,5,5,5'"/>     
                            </HBox>
                            <HBox>
                                <Control  normalimage="file='bk_tab_unselected.png' corner='5,5,5,5'"/>            
                            </HBox>
                        </TabBox>
                        <Label text="页面1"  halign="center" valign="center" normaltextcolor="bk_wnd_darkcolor1" font="2" mouse="false"/>
                    </OptionBox>
                    <OptionBox height="60" cursortype="hand" group="headPage_opt" name="myDevice">
                        <Event type="select" receiver=".\select_tab" applyattribute="selectedid="1""/>
                        <Event type="unselect" receiver=".\select_tab" applyattribute="selectedid="0""/>
                        <Event type="select" receiver="page_tab" applyattribute="selectedid="1""/>
                        <TabBox mouse="false" mousechild="false" name="select_tab">
                            <HBox>
                                <Control normalimage="file='bk_tab_selected.png'  corner='5,5,5,5'"/>     
                            </HBox>
                            <HBox>
                                <Control  normalimage="file='bk_tab_unselected.png' corner='5,5,5,5'"/>            
                            </HBox>
                        </TabBox>
                        <Label text="页面2"  halign="center" valign="center" normaltextcolor="bk_wnd_darkcolor1" font="2" mouse="false"/>
                    </OptionBox>
                    <OptionBox height="60" cursortype="hand" group="headPage_opt" name="mySet">
                        <Event type="select" receiver=".\select_tab" applyattribute="selectedid="1""/>
                        <Event type="unselect" receiver=".\select_tab" applyattribute="selectedid="0""/>
                        <Event type="select" receiver="page_tab" applyattribute="selectedid="2""/>
                         <TabBox mouse="false" mousechild="false" name="select_tab">
                            <HBox>
                                <Control normalimage="file='bk_tab_selected.png'  corner='5,5,5,5'"/>     
                            </HBox>
                            <HBox>
                                <Control  normalimage="file='bk_tab_unselected.png' corner='5,5,5,5'"/>            
                            </HBox>
                        </TabBox>
                        <Label text="页面3"  halign="center" valign="center" normaltextcolor="bk_wnd_darkcolor1" font="2" mouse="false"/>                    
                    </OptionBox>
                </VBox>
     
     
            <TabBox  name="page_tab" >
                <VBox>
                    <Label text="页面1"/>
                </VBox>
                <VBox>
                    <Label text="页面2"/>
                </VBox>
                <VBox>
                    <Label text="页面3"/>
                </VBox>
            </TabBox>
     


    效果如下:



    4 最大化按钮

    默认情况下,在界面上添加后,你会发现,虽然最大化了窗口,但是再次点击时并没有起作用,因为这需要自己添加代码,在响应单击事件时确定最大化,和从最大化返回。


    实现由两种方式,第一种如下:

    XML中语句

            <!-- 左侧标题栏 最小及关闭按钮 -->
            <HBox height="auto" margin="200,5,5,5" valign="top">
                <Control mouse="false"/>
                <Button class="btn_wnd_min" margin="2,0,2,0" name="minbtn"/>
                <Button class="btn_wnd_max" name="btn_max_restore" margin="2,0,2,0"/> //最大化
                <Button class="btn_wnd_close" name="closebtn"/>
            </HBox>
            <!-- 标题栏分割线 -->
            <Control bkcolor="splitline_level2" height="1" margin="200,40,0,0"/>

    相应窗口的代码,比如CMyForm窗口

    1)定义按钮

    ui::Button		*btn_max_restore_;


    2)响应OnClicked( ui::EventArgs* arg )消息

         如果最大化,点击的时候则返回原状态,如果是原状态,点击后则最大化。

    	else if(name == L"btn_max_restore")
    	{
    		DWORD style = GetWindowLong(m_hWnd, GWL_STYLE);
    		if (style & WS_MAXIMIZE)
    			::ShowWindow(m_hWnd, SW_RESTORE);
    		else
    			::ShowWindow(m_hWnd, SW_MAXIMIZE);
    	}

    3)定义函数,用于设置此按钮的类别,比如设置为最大化类、设置为restore类,每种类云信duilib提供了对应的界面展现形式。

    void OnWndSizeMax(bool max);
    void OnWndSizeMax(bool max)
    {
    	if (btn_max_restore_)
    		btn_max_restore_->SetClass(max ? L"btn_wnd_restore" : L"btn_wnd_max"); 
    }
    而什么时候改变状态呢,是在消息处理中,判断是否窗口改变大小消息
    HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	if (uMsg == WM_SIZE)
    	{
    		if (wParam == SIZE_RESTORED)
    			OnWndSizeMax(false);
    		else if (wParam == SIZE_MAXIMIZED)
    			OnWndSizeMax(true);
    	}
    	return __super::HandleMessage(uMsg, wParam, lParam);
    }





    这样设置后,最大化及还原功能就正常了。


    第二种如下:

                        <HBox width="auto" height="auto" valign="top">
                            <Button class="btn_wnd_min" name="minbtn" margin="4,6,0,0"/>             //最小化
                            <Box width="21" margin="4,6,0,0">
                                <Button class="btn_wnd_max" name="maxbtn"/>                          //最大化
                                <Button class="btn_wnd_restore" name="restorebtn" visible="false"/>  //还原  默认不可见
                            </Box>
                            <Button class="btn_wnd_close" name="closebtn" margin="4,6,0,0"/>         //关闭
                        </HBox>

    窗口中新增一改变窗口大小时响应的函数

    void OnWndSizeMax(bool max);
    void CMyForm::OnWndSizeMax(bool max)
    {
    	if (!m_pRoot)
    		return;
    
    	FindControl(L"maxbtn")->SetVisible(!max);
    	FindControl(L"restorebtn")->SetVisible(max);
    }

    窗口大小改变时,响应此函数 

    LRESULT CMyForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	if (uMsg == WM_SIZE)
    	{
    		if (wParam == SIZE_RESTORED)
    			OnWndSizeMax(false);
    		else if (wParam == SIZE_MAXIMIZED)
    			OnWndSizeMax(true);
    	}

    这个相对来说,简单些,设置的不多。


    暂时,这些,未完待续。。。

    有同样使用这个不开源的网易云信的,可以加Q群331506725

    展开全文
  • 云信 duilib 踩坑填坑--点点滴滴

    千次阅读 2018-03-30 15:39:26
    云信duilib云信官方只提供了简单的可怜的介绍、和属性列表,通过这些,就想掌握,想想也是不可能的。本着实践是检验真理的唯一标准,生命在于不断的折腾的思想,不断的修改测试探查效果,猜测含义,加深对各种布局...

    云信duilib

    云信官方只提供了简单的可怜的介绍、和属性列表,通过这些,就想掌握,想想也是不可能的。

    本着实践是检验真理的唯一标准,生命在于不断的折腾的思想,不断的修改测试探查效果,猜测含义,加深对各种布局各种属性的理解。

    本着踩了坑,即使不能埋坑,却一定要标记出来,以免后来者不小心掉进去的品德,抛砖引玉,特记录下云信duilib开发的点滴。

     

    1、Window窗口参数

     

    1.1 部分透明效果

    shadowattached="false"

    custom_shadow="0,70,5,10"

     

    决定背景透明区域,ustom_shadow="0,0,0,0" 默认全部透明,

    custom_shadow="20,70,20,20"则是认为背景的左侧20 ,上部70,右侧20,下部20 是透明的。

    同时需要注意的是,想要实现部分透明效果,背景图像必须为纯黑色,底层是将纯黑色作为透明遮罩,纯黑色的可以适当做透明处理,而非黑色如蓝色,绿色等,则不能做部分透明处理。

    示例:

    bkcolor="bk_main_wnd_title"

     

     

     

    要想将黑色去掉,实现部分透明效果,就要设置透明区域,有两种设计方法:

    全部透明:不写这个属性,或全置为0,custom_shadow="0,0,0,0"

    这个简单,但有隐患,具体如下:

    界面展现出来这样,底层应该是richEdit控件的默认背景也是黑色,而此处因为设置的是全部区域内的纯黑色是透明的,所以将黑色过滤掉了。

     

    部分透明:

    调节这里的透明范围,如左20,上70,右20,下20的范围是透明的,其它地方不透明,之所以其它地方没看到黑色,是因为被别的背景遮住了。

    custom_shadow="20,70,20,20"

     

    而对于部分透明,就没有这种问题了。


    注意:

    官方文档

    有个错误,说custom_shadow功能与alphafixcorner完全一样,一开始,我就是看着完全一样,所以使用alphafixcorner,结果出现了透明BUG,改成用custom_shadow后,才可以的。

    可见,官方文档也是不可尽信的,需要自己去验证


     

    1.2 可拉伸属性

    Sizebox 属性列表中说,窗口可拖动改变窗口大小的边距。

    听起来好像是,设置这个值后,就可以拖动窗口,改变大小。

    但这种理解是错误的,比如设置sizebox="4,4,6,6"后,你会发现,鼠标位于边框时,光标呈现了拉伸状态。

    这时候,你可能误认为曙光来临,在这提示的暗示下,当你兴奋的想去拉伸改变窗口大小时,结果却发现,窗口大小丝毫不为所动,很气恼,很伤心,很沮丧,有没有,再次对照官方文档,然并卵,并没有找到有用信息。

    于是,不断修改调整,终于找到症结之所在。

    真是感叹,网易这篇文档的书写者,当真是惜字如金。

    Sizebox确实可以使得光标在边框时,出现拉伸状态,但只设置了这个值,并不能拉伸窗口。

    涉及因素:

    1、BOX、HBOX、VBOX等布局的width\height属性,是否设置的固定或auto,固定很好理解,auto则是根据子控件大小确定本身大小,这两种状况下,都是不可拉伸的。

    只有widht\height在stretch状态下,才可以拉伸,默认情况就是stretch。

     

    2、window 属性里的 mininfo=”1000,1000”  maxinfo=”1000,1000” ,最小窗口、最大窗口完全一样,当然也不能拉伸了。

     

    2、 Box、VBox、HBox

    这些盒子的使用,只能通过大量的修改测试了。

    VBox\HBox 是有一定规则的盒子,存放东西的时候只能按照纵向\横向的顺序排放。

    而Box却给你了自由,没有规则,具体在什么位置放东西,子控件容器则要根据valign haling margin等进行位置确定。其实这就是画布,然后结合定位信息,在指定位置绘图。

    难以言述,只能实践中掌握。

     

     

    3 、Sublime 的格式化代码,谨慎使用,因为会打乱属性顺序,造成云信无法解析,直接崩溃

    有时候代码缩进过于凌乱,安装了sublime的一个代码缩进控件

    Selection->Format->indentxml

    结果发现,代码缩进清晰了,但运行不起来,duilib加载格式错误的xml格式时,会自动崩溃掉,不给哪里出错的提示。

    经查,使用代码自动缩进工具,会调整标签中的属性位置,比如为了换行方便,会将15个字节的属性与5个字节的属性调换位置。而云信duilib中,EVENT事件,是有一定顺序的,所以导致云信解析不了这个XML,进而直接崩溃。

     


    展开全文
  • 别人也碰到过类似的问题云信 duilib 踩坑填坑--点点滴滴

    别人也碰到过类似的问题云信 duilib 踩坑填坑--点点滴滴

    展开全文
  • 网易云信duilib跟原版不同地方是原版的DUI 如果你想处理按钮的点击事件和其他控件的事件直接在Notify 函数中响应就行了,而云信的diuli定义了一个EventType事件类型的枚举里面涵盖了大部分控件的消息,...

    网易云信的duilib跟原版不同地方是原版的DUI 如果你想处理按钮的点击事件和其他控件的事件直接在Notify 函数中响应就行了,而云信的diuli定义了一个EventType事件类型的枚举里面涵盖了大部分控件的消息,AttachBubbledEvent()的第一个参数就是需要你自己需要响应的消息类型,比如kEventClick消息就是所有控件的单击消息,const EventCallback& callback)    { OnBubbledEvent[eventType] += callback;第二个参数是这个事件的回调就是响应函数需要你在自己类中实现,跟MFC 的消息处理函数一样。

    需要特殊说明的是kEventNotify这个类型是将你想要处理的消息统一用一个函数来处理,比如你想像原版一样使用Notify来处理除kEventClick以外所有的消息,那么就可以使用 kEventNotify这个消息类型然后实现对应的回调函数在里面处理你感兴趣的消息。

    展开全文
  • 序言 Duilib介绍 Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可。...网易云信Duilib介绍 Duilib是在研发易信PC版时被引入
  • 云信duilib之菜单

    2019-02-15 11:13:45
    我们看看,duilib是如何实现这些功能的   enum MenuAlignment { eMenuAlignment_Left = 1 &lt;&lt; 1, eMenuAlignment_Top = 1 &lt;&lt; 2, eMenuAlignment_Right = 1 &...
  • 云信duilib 学习一 VListBox 虚拟列表

    千次阅读 2019-08-30 16:05:00
    简单示例: <?xml version="1.0" encoding="UTF-8"?> <Window size="400,600" caption="0,0,0,35" sizebox="4,4,4,4">...VBox bkcolor="bk_wnd_darkcolor">...HBox width="stretch" h...
  • 在编程使用的RichEdit,发现不管怎么试,当输入文字的之后,绘制就会出现混乱;测试发现是RichEdit背景透明导致的,除了文字区域外鼠标事件都能穿透过去。反复测试后发现是window属性设置去掉yinshadowattached=...
  • Duilib介绍 Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可。Duilib可以简单方便地实现大多数界面需求,包括换肤、换色,透明等...
  • 既然是shadowattached导致的,那我们就查,shadowattached对绘制有啥影响
  • 全局搜索发现是NIM_DUILIB\ui_components\cef_control\handler\browser_handler.cpp文件 rect_cef_control设置位置 最后定位在NIM_DUILIB\ui_components\cef_control\control\cef_control_ui.cpp 原来是,Control...
  •  想实现窗口半透明,控件不透明的效果,使用云信duilib也很方便实现 1)shadowattached=“false” 置为假 窗口是否附加阴影效果,如(true)"/>  窗口的一个属性  如果为true时,默认给窗口加上阴影...
  • 云信duilib_fng版,源码编译版
  • duilib 绘图机制分析

    2020-08-05 17:04:15
    注:本文使用的是云信duilib 1绘图功能基本接口 抽象类 不负责具体实现功能,而是定义绘图时,应该具有的功能,由纯虚函数定义 在duilib中,将与绘制相关的功能,定义成了抽象类纯虚函数接口,定义了绘图使用的...
  • duilib源码探析之事件绑定

    千次阅读 2018-04-13 18:01:53
    最近使用云信duilib,正好研究了下duilib按钮与响应绑定的方法。duilib事件绑定每个控件都可以单独设置自己的事件处理函数,一般在InitWindow方法中初始化各个控件的事件处理函数。每个控件都有许多形如Attach···...
  • NIM Duilib 包含了一整套桌面软件的开发部件,与其说这是一个界面库,不如说它是一个开发框架。从原有 Duilib 基础上拓展了一些新的能力,并整合了 Google base 基础类库(线程、内存、闭包等)。您完全可以直接使用...
  • 云信duilib 基本控件使用示例 具体使用方法 参考博文 duilib 快速入门 (C++ 界面开发) https://blog.csdn.net/shuilan0066/category_8007774.html
  • 最简单的一个提示框如上图所示,没错,就是用duilib做的,而且只有一句代码! shared::Toast::ShowToast(L"我是一个提示框!");
  • NIM Duilib NIM Duilib 包含了一整套桌面软件的开发部件,与其说这是一个界面库,不如说它是一个开发框架。从原有 Duilib 基础上拓展了一些新的能力,并整合了 Google base 基础类库(线程、内存、闭包等)。您完全...
  • 这里使用到了ui_components里面的msgBox控件,效果如下: void InitWindow() { ui::Control* pctrl = nullptr; ui::Button* btn_yes_ = nullptr; pctrl = FindControl(L"btn_yup");... btn_yes_-&g...
  • Label效果: xml配置: <?xml version="1.0" encoding="UTF-8"?>...Window size="400,400" caption="0,0,0,35">...HBox width="stretch" height="35" bkcolor="bk_wnd_lightcolor">... ...
  • 1、效果图如下: 2、
  • xml中加人: <!--combobox--> <Combo class="list" name="combo" height="30" margin="0,12,0,0" padding="6" bkimage="file='../public/combo/normal.png' corner='5,5,30,5'"/>...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

云信duilib