Duilib学习(一)

#pragmaonce#includeusingnamespaceDuiLib;#ifdef_DEBUG#ifdef_UNICODE#pragmacomment(lib,&

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

#pragma once
#include <UIlib.h>
using namespace DuiLib;

#ifdef _DEBUG
#   ifdef _UNICODE
#       pragma comment(lib, "DuiLib_ud.lib")
#   else
#       pragma comment(lib, "DuiLib_d.lib")
#   endif
#else
#   ifdef _UNICODE
#       pragma comment(lib, "DuiLib_u.lib")
#   else
#       pragma comment(lib, "DuiLib.lib")
#   endif
#endif

class CDuiFrameWnd : public CWindowWnd, public INotifyUI
{
public:
    virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
    virtual void    Notify(TNotifyUI& msg) 
    {
        if (msg.sType == _T("click"))
        {
            if (msg.pSender->GetName() == _T("btnHello"))
            {
                ::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL);
            }
        }
    }

    virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        LRESULT lRes = 0;

        if (uMsg == WM_CREATE)
        {
            // 方法1
            //CControlUI *pWnd = new CButtonUI;
            //pWnd->SetName(_T("btnHello"));   // 控件的唯一标识
            //pWnd->SetText(_T("Hello World"));   // 设置文字
            //pWnd->SetBkColor(0xFF00FF00);       // 设置背景色

            //m_PaintManager.Init(m_hWnd);
            //m_PaintManager.AttachDialog(pWnd);

            //m_PaintManager.AddNotifier(this);  // 添加控件响应消息,这样消息就会达到duilib的消息循环

            // 方法2
            m_PaintManager.Init(m_hWnd);

            CDialogBuilder builder;
            CControlUI *pRoot = builder.Create(_T("duilib.xml"), NULL, NULL, &m_PaintManager, NULL);
            ASSERT(pRoot && "Failed to parse XML");

            m_PaintManager.AttachDialog(pRoot);
            m_PaintManager.AddNotifier(this);
            return lRes;
        }
        // 以下三个消息用于屏蔽系统标题栏
        // WM_NCACTIVETE WM_NCCALCSIZE WM_NCPAINT
        else if (uMsg == WM_NCACTIVATE)
        {
            if (!::IsIconic(m_hWnd))
            {
                return (wParam == 0) ? TRUE : FALSE;
            }
        }
        else if (uMsg == WM_NCCALCSIZE)
        {
            return 0;
        }
        else if (uMsg == WM_NCPAINT)
        {
            return 0;
        }

        if (m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes))
        {
            return lRes;
        }

        return __super::HandleMessage(uMsg, wParam, lParam);
    }

protected:
    CPaintManagerUI m_PaintManager;
};


class CDuiXmlFrameWnd : public WindowImplBase
{
public:
    // 实现以下三个纯虚函数
    virtual LPCTSTR GetWindowClassName()const { return _T("DUIMainFrame"); }
    virtual CDuiString GetSkinFile(){ return _T("duilib.xml"); }
    virtual CDuiString GetSkinFolder(){ return _T(""); }

    // 将事件添加到消息队列
    virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        LRESULT lRes = 0;

        if (uMsg == WM_CREATE)
        {
            // 方法1
            //CControlUI *pWnd = new CButtonUI;
            //pWnd->SetName(_T("btnHello"));   // 控件的唯一标识
            //pWnd->SetText(_T("Hello World"));   // 设置文字
            //pWnd->SetBkColor(0xFF00FF00);       // 设置背景色

            //m_PaintManager.Init(m_hWnd);
            //m_PaintManager.AttachDialog(pWnd);

            //m_PaintManager.AddNotifier(this);  // 添加控件响应消息,这样消息就会达到duilib的消息循环

            // 方法2
            m_PaintManager.Init(m_hWnd);

            CDialogBuilder builder;
            CControlUI *pRoot = builder.Create(_T("duilib.xml"), NULL, NULL, &m_PaintManager, NULL);
            ASSERT(pRoot && "Failed to parse XML");

            m_PaintManager.AttachDialog(pRoot);
            m_PaintManager.AddNotifier(this);
            return lRes;
        }
        // 以下三个消息用于屏蔽系统标题栏
        // WM_NCACTIVETE WM_NCCALCSIZE WM_NCPAINT
        else if (uMsg == WM_NCACTIVATE)
        {
            if (!::IsIconic(m_hWnd))
            {
                return (wParam == 0) ? TRUE : FALSE;
            }
        }
        else if (uMsg == WM_NCCALCSIZE)
        {
            return 0;
        }
        else if (uMsg == WM_NCPAINT)
        {
            return 0;
        }

        if (m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes))
        {
            return lRes;
        }

        return __super::HandleMessage(uMsg, wParam, lParam);
    }

    // 实现控件响应事件
    virtual void Notify(TNotifyUI& msg)
    {
        if (msg.pSender->GetName() == _T("editHello"))
        {
            // 获取控件对象方法
            CEditUI *pEdit = static_cast<CEditUI *>(m_PaintManager.FindControl(_T("editHello")));
        }
        // 处理控件响应事件
        if (msg.sType == _T("click"))
        {
            if (msg.pSender->GetName() == _T("btnHello"))
            {
                ::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL);

                // 人为修改控件焦点
                CEditUI *pEdit2 = static_cast<CEditUI *>(m_PaintManager.FindControl(_T("editWorld")));
                m_PaintManager.SetFocus(pEdit2, TRUE);
            }
        }
    }
};

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    // 实例句柄与渲染类关联
    CPaintManagerUI::SetInstance(hInstance);

    // 设置资源的默认路径(设置和exe在同一个目录)
    CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

    /*CDuiFrameWnd duiFrame;
    duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
    duiFrame.CenterWindow();
    duiFrame.ShowModal();*/

    // 方法2
    CDuiXmlFrameWnd duixmlFrame;
    duixmlFrame.Create(NULL, _T("DuiWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
    duixmlFrame.CenterWindow();
    duixmlFrame.ShowModal();
    
    return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120245.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue.js跨域_vueaxios跨域请求

    vue.js跨域_vueaxios跨域请求最近公司能的项目使用前后端分离,前端开发请求接口数据的时候碰到了跨域问题,解决方案如下一、SimpleCORSFilter工具类在项目Util类中新建类SimpleCORSFilter实现Filter接口packagecom.how2java.tmall.util;importjava.io.IOException;importjavax.servlet.Filter…

    2022年9月27日
    2
  • linux单引号双引号反引号_unix和linux的区别

    linux单引号双引号反引号_unix和linux的区别特殊的赋值Shell中可以将数字或字符直接赋予变量,也可以将Linux命令的执行结果赋予变量,如下:(1)$count=9#将数字赋予变量count(2)$name=”ming”#将字符赋予变量name(3)$listc=`ls-la`#将Linux命令赋予listc,listc的值就是该命令的执行结果反引号的作用反引号的作用就是将反引号内的Lin…

    2025年7月27日
    4
  • 10.2 网页插入背景音乐「建议收藏」

    10.2 网页插入背景音乐「建议收藏」一、bgsound标签简介在网页中可以为某个网页设置背景音乐,使用的是bgsound标签。bgsound是用以插入背景音乐,但只适用于IE浏览器,在Firefox等中未必适用。语法:背景音乐的文件可以是avi、mp3等声音文件。“背景音乐的地址”可以是相对路径,也可以是绝对路径。强烈不推荐使用绝对路径。使用bgsound加入背景音乐与使用embed加入音频不一样,加入音频是有操

    2022年9月13日
    1
  • RTP 协议

    RTP 协议原博客地址:http://www.cnblogs.com/qingquan/archive/2011/07/28/2120440.html概述:实时传送协议(Real-timeTransportProtocol或简写RTP,也可以写成RTTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标…

    2022年6月28日
    35
  • 中国电子学会-青少年电子信息等级考试标准 (1-6 级)

    中国电子学会-青少年电子信息等级考试标准 (1-6 级)一级标准一、考试形式1.理论知识部分:上机考试2.实际操作部分:现场制作二、所用器件1.电子元器件——电源、电机、灯、导线、开关2.能够满足考试要求的结构件三、考核内容(一)理论知识了解人类发现电的历史 了解电的产生及用途 掌握基本电路的构成(电源、用电器、开关和导线),理解各部分的作用 理解串联电路的连接方式 了解家用照明电路组成方式 熟悉安全用电常识 掌握避免雷电伤害的生活常识 认…

    2022年5月10日
    57
  • EasyPlayer支持YUV数据导出功能

    EasyPlayer支持YUV数据导出功能我们可能会遇到这样的功能,播放一个视频的同时,再把这个视频推送出去,或者对视频数据进行智能分析等处理.这样我们就迫切需要得到视频的原始数据.基于这个需求,EasyPlayer增加了获取视频YUV数据的功能.它的原理是这样的:CreatedwithRaphaël2.1.2EasyPlayerClientEasyPlayerClientDecoderDecoderYUVYUV读取媒体…

    2022年6月25日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号