• 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

Duilib – 点击按钮弹出模态对话框

Duilib 发布于2021-11-16 阅读 5,928次 0次评论 0次点赞 本文共4267个字,阅读需要11分钟。

1 模态对话框

是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击确定或取消按钮等将该对话框关闭。模态对话框垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。

2 在Duilib中实现模态对话框

2.1 需求示例

实现以下需求,在主页面中点击一个按钮弹出一个模态对话框,这里以下列例子为例:

Duilib - 点击按钮弹出模态对话框-第0张图片

点击添加任务,弹出添加任务子模态对话框:

Duilib - 点击按钮弹出模态对话框-第1张图片

整体界面如下:

Duilib - 点击按钮弹出模态对话框-第2张图片

2.2 界面设计

2.2.1 主界面xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Window size="800,600" roundcorner="0,0" sizebox="6,6,6,6" caption="0,0,0,90" mininfo="800,600" >
    <Font id="0" name="微软雅黑" size="36" bold="true"/>
    <Font id="1" name="微软雅黑" size="28" bold="false"/>
    <Font id="2" name="微软雅黑" size="24" bold="false"/>
    <Font id="3" name="微软雅黑" size="72" bold="true"/>

    <VerticalLayout bkcolor="0xFFFFFFFF">
        <!-- 标题栏 -->
        <HorizontalLayout height="32" >
            <Control />
            <HorizontalLayout width="80">
                <Button name="Btn_Min" width="24" height="24" padding="0,0,0,0" normalimage="file='最小化.png'" hotimage="file='最小化悬停.png'"/>
                <Button name="Btn_Max" width="24" height="24" padding="0,0,0,0" normalimage="file='最大化.png'" hotimage="file='最大化悬停.png'"/>
                <Button name="Btn_Close" width="24" height="24" padding="0,0,0,0" normalimage="file='关闭.png'" hotimage="file='关闭悬停.png'"/>
            </HorizontalLayout>
        </HorizontalLayout>

        <!-- 主要功能区 -->
        <VerticalLayout >
            <!-- 功能按钮区 -->
            <HorizontalLayout height="80">
                <Control width="20"/>
                <VerticalLayout width="39" height="80">
                    <Button name="Btn_AddConversionTask" width="39" height="32" padding="0,6,0,0" normalimage="file='添加任务.png'" hotimage="file='添加任务悬停.png'" />
                    <Control height="5" />
                    <Text text="添加任务" />
                </VerticalLayout>
                <Control width="20"/>
                <VerticalLayout width="32">
                    <Button name="Btn_StartConvertTask" width="32" height="32" padding="0,6,0,0" normalimage="file='开始处理任务.png'" hotimage="file='开始处理任务悬停.png'" />
                    <Control height="5" />
                    <Text text="运行任务" />
                </VerticalLayout>   
                <Control />
            </HorizontalLayout>


        </VerticalLayout>

        <!-- 状态栏 -->
        <HorizontalLayout height="30">
        </HorizontalLayout>

    </VerticalLayout>
</Window>

2.2.1 子模态对话框xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Window size="640,260" roundcorner="0,0" sizebox="0,0,0,0" caption="0,0,0,90" mininfo="640,260" maxinfo="640,260">
    <VerticalLayout bkcolor="0xFFFFFFFF">
        <!-- 标题栏 -->
        <HorizontalLayout height="32" >
            <Control />
            <HorizontalLayout width="32">
                <Button name="Btn_Close" width="24" height="24" padding="0,0,0,0" normalimage="file='关闭.png'" hotimage="file='关闭悬停.png'"/>
            </HorizontalLayout>
        </HorizontalLayout>

        <!-- 主要功能区 -->
        <VerticalLayout height="140">
            <HorizontalLayout height="60">
                <Text text="选择输入文件夹" width="90" padding="10,8,0,0"/>
                <Button name="Btn_Open_Input_Folder" width="24" height="24" padding="10,0,0,0" normalimage="file='打开文件夹.png'" hotimage="file='打开文件夹悬停.png'"/>   
                <Text name="Text_Input_Folder" height="50" bordercolor="0xFF000000" bordersize="1" padding="20,0,10,0" />
            </HorizontalLayout>
            <Control />
            <HorizontalLayout height="60" >
                <Text text="选择输出文件夹" width="90" padding="10,8,0,0"/>
                <Button name="Btn_Open_Output_Folder" width="24" height="24" padding="10,0,0,0" normalimage="file='打开文件夹.png'" hotimage="file='打开文件夹悬停.png'"/>
                <Text name="Text_Output_Folder" height="50" bordercolor="0xFF000000" bordersize="1" padding="20,0,10,0" />
            </HorizontalLayout>         
        </VerticalLayout>

        <HorizontalLayout height="60" >
            <Control />
            <Button name="Btn_AddTask" width="60" height="40" bkcolor="#0xFF333303" text="添加任务" textcolor="0xFFFFFFFF" hottextcolor="0xFF1ECC94" borderround="3,3"/>
            <Control width="20"/>
            <Button name="Btn_CancelAdd" width="60" height="40" bkcolor="#0xFF333303" text="取消添加" textcolor="0xFFFFFFFF" hottextcolor="0xFF1ECC94" borderround="3,3"/>
            <Control />
        </HorizontalLayout>

        <Control height="10" />
    </VerticalLayout>
</Window>

2.3 代码实现

2.3.1 主界面点击添加任务按钮弹出模态对话框

    // 添加任务按钮
    else if (_tcsicmp(msg.pSender->GetName(), MainWnd_Btn_AddConversionTask_Name) == 0)
    {
        AddTaskDialog addTaskDialog;
        addTaskDialog.Create(this->m_hWnd, _T("添加任务"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
        addTaskDialog.CenterWindow();
        if (addTaskDialog.ShowModal() == 0)
        {
            if (addTaskDialog.IsAddTask())
            {
                MessageBox(NULL, "a", NULL, NULL);
            }
        }
    }

这里需要注意的是,子模态对话框在创建是需要设置父窗口为主界面,也就是:

addTaskDialog.Create(this->m_hWnd, _T("添加任务"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);

然后通过ShowModel()函数弹出模态对话框。

2.3.2 子模态对话框添加任务与取消添加按钮的实现

在子模态对话框中,不管是点击添加任务按钮或者是点击取消添加按钮,都需要主动关闭子模态对话框

    // 添加任务
    else if (_tcsicmp(msg.pSender->GetName(), AddTaskWnd_Btn_AddTask_Name) == 0)
    {
        m_bIsAddTask = true;
        ::SendMessage(this->GetHWND(), WM_CLOSE, NULL, NULL);
    }
    // 取消添加任务
    else if (_tcsicmp(msg.pSender->GetName(), AddTaskWnd_Btn_CancelAdd_Name) == 0)
    {
        m_bIsAddTask = false;
        ::SendMessage(this->GetHWND(), WM_CLOSE, NULL, NULL);
    }

在模态对话框中的添加任务按钮中增加相关成员变量保存需要在主界面中获取的数据,然后通过成员函数调用访问数据。

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:Duilib – 点击按钮弹出模态对话框

原文链接:https://www.stubbornhuang.com/1831/

发布于:2021年11月16日 10:42:54

修改于:2023年06月26日 21:02:55

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
资源分享 - Video Game Optimization 英文PDF下载
计算几何与计算机图形学资源
下一篇
资源分享 - Mathematics for Computer Graphics , Second Edition 英文PDF下载
计算几何与计算机图形学资源
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号