SOUI之DIY: 自定义控件和消息实现

本文介绍了如何在SOUI框架下自定义控件和消息,通过实例展示了创建一个包含两个按钮的控件,当点击任一按钮时,外部能够接收到事件信息并弹窗显示所点击的按钮。主要涉及自定义事件类、事件绑定及外部响应等步骤。

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

一、引言

使用 SOUI 的过程是一个漫长的学习过程,必然要以需求驱使着,才能够促使自己去探索其内部的原理。

最近有一个想法:

将一个导航条封装成一个控件类,但是导航条里面众多的按钮消息应该如何封装成自定义消息呢?
我想要不论点击哪个按钮,也只需要外部监控一个事件消息来处理即可。这样子,对于外部来说,这个控件就是完整的封装良好的个体。

那么自定义控件的方法,SOUI 的博客上已经有过描述了,但是自定义控件消息的方法,却没有详细的记载,只能我们自己来探索了(虽然其实并不难 T_T)。

那么,就让我们开始吧,让我们设想下实现这么一个需求:

使用 SOUI 扩展一个如下的控件:
1. 有两个按钮:按钮1 和 按钮 2
2. 当我们点击任何一个按钮的时候,在外部可以接收到事件信息,并且弹窗显示我们点击了哪个按钮

这个需求需要分两步走,第一步实现这个控件,第二个实现自定义事件,让我们一步一步来吧。

二、DIY 控件

自定义控件的内容在 SOUI 作者的博客中有所提及:
第二十八篇:SOUI中自定义控件开发过程

这里我简单说下我实现本篇博客的 STestControl 控件的步骤(不是本篇博客的重点):

1. 新建一个 SOUI 项目(额,这是必然的 T_T)

2. 新建一个 STestControl 类,继承自 SOUI::SWindow,这个类中,最基本的除了构造析构,就是 OnCreate 和 SOUI 的窗口绑定映射了,以下是 OnCreate (实现其初始化从 xml 文件中加载控件的功能) 的代码:

// 创建控件:初始化 xml,绑定事件等等
int STestControl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    pugi::xml_document xmlDoc;
    SOUI::SStringW strXml = L"test_control";

    if (!LOADXML(xmlDoc, strXml, L"LAYOUT")) {
        return E_FAIL;
    }
    pugi::xml_node itemXmlNode = xmlDoc.child(L"testcontrol");
    if (!itemXmlNode) {
        return E_FAIL;
    }
    this->CreateChildren(itemXmlNode);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值