DuiLib使用

初次用duilib写一个小玩具,由于还不熟悉XML的布局相关的,所以比较简陋
功能描述:
模仿抖音小视频中的,一个窗口,询问是否喜欢我,点击‘喜欢’按钮则弹出小对话框,如果想点击‘不喜欢’,则鼠标移动上去后就弹开,让你点不到

主函数省略了!
class MWindow :public CWindowWnd, public INotifyUI,public CHorizontalLayoutUI
{
public:
    virtual void DoEvent(TEventUI& event)                      //为响应鼠标的信号,
    {
        if (event.Type == UIEVENT_MOUSEENTER)
        {
            m_pain.SendNotify(this, DUI_MSGTYPE_MOUSEENTER);  //鼠标穿过 就触发 注册这个信号
            return;
        }
        __super::DoEvent(event);
    }
    virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
    virtual void Notify(TNotifyUI &msg)                                         
    {
        if (msg.sType == _T("click"))                                    //处理鼠标单击产生的信号
        {
            if (msg.pSender->GetName() == _T("like"))     //根据XML中设置的按钮,对点击该按钮的信号进行处理
            {
                ::MessageBox(NULL, _T("我也喜欢你!"), _T("嘿嘿"), NULL);  //开启小对话框,对点击事件进行回应

            }
        //  if(msg.pSender->GetName() == _T(""))
        }
    }
    virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)    //消息处理函数 继承来重写
    {
        LRESULT lRes = 0;
        if (uMsg == WM_CREATE)                //创建窗口时系统给消息处理程序发送的消息
        {
            m_pain.Init(m_hWnd);              //m_hWnd是主窗口句柄
            CDialogBuilder builder;
            CControlUI *p = builder.Create(_T("m.xml"), (UINT)0, NULL, &m_pain);  //调用Create ,加载XML文件开窗
            ASSERT(p && "Failed to parse XML!");

            m_pain.AttachDialog(p);     //将控件添加到Hash表中
            m_pain.AddNotifier(this);   //添加通知处理
            return lRes;
        }
        if (uMsg == WM_MOUSEMOVE)      //鼠标移动的信号
        {
            POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };  //得到消息触发坐标          
            CControlUI* pHover = m_pain.FindControl(pt);
            if (pHover == NULL) return 0;

            if (pHover->GetName() == _T("unlike"))
            {
                srand(time(0));
                pHover->SetVisible(false);     //让控件消失
                RECT re = pHover->GetPos();    //得到鼠标目前所在位置

                long tmp1 = rand() % (300 - 50) + 50;
                if (abs(tmp1 - re.left) < 50)  {  tmp1 += 50;  }     //这一部分是为了产生随机数,让按钮新位置随机产生
                long tmp2 = tmp1 - 15;                               //但是逻辑上并不健全,有待完善

                TCHAR pose[18]; memset(pose, 0, 18);    //使用通用类型

                _stprintf(pose,_T("%ld,%ld,%ld,%ld"),tmp1,tmp2,0,0);        
                pHover->SetAttribute(L"pos", pose);     //给控件设置新位置
                pHover->SetVisible(true);
            }
        }
        if (m_pain.MessageHandler(uMsg, wParam, lParam, lRes))
        {
            return lRes;
        }
        return __super::HandleMessage(uMsg, wParam, lParam);
    }

private:
    CPaintManagerUI m_pain;
};

上面是C++部分,还需要XML文件

m.xml

<?xml version="1.0" encoding="UTF-8"?>
<Window size="600,400" mininfo="150,100" caption="0,0,0,44" >
    <HorizontalLayout bkcolor="#FFcfe2f3" > <!-- 整个窗口的背景 -->

        <Button  name="like"  float="true" borderround="6,6" pos="390,280" text="喜欢" width="55" height="25" normalimage="file='button_pp.png' source='0,0,20,110'" hotimage="file='button.png'" pushedimage="file='button_push.png'"/> 
        <Button  name="unlike"  float="true" borderround="6,6" pos="110,280" text="不喜欢" width="55"  height="25" normalimage="file='button_pp.png' source='0,0,20,110'"hotimage="file='button.png'" />
        <Label name="douyoulove" text="你喜欢我吗?"size="12"  float="true" pos="80,80" width="100" height="60" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="right"/>

    </HorizontalLayout>
</Window>

XML中设置两个控件button,Label 并设置内容和属性

效果图
初始情况:
这里写图片描述
点击“不喜欢”,按钮弹走
这里写图片描述
点击“喜欢”,弹出新窗口
这里写图片描述

界面简陋,因为还不会XML的布局方法,同志仍需努力!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值