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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 5个常用的MySQL数据库管理工具_MySQL 事务

    5个常用的MySQL数据库管理工具_MySQL 事务mysql几个管理工具推荐发布时间:2020-03-2615:59经常跟mysql打交道,免不了用到mysql管理的一些工具,根据我平时使用的一些经验,谈一谈我使用一些工具的心得,推荐给大家。废话就不多说咯,我推荐大家三款工具吧,phpmyadmin,mysqlworkbenth以及mysqladministrator。分别阐述如下。1,phpmyadmin。开发php程序的人应该都知道,这个w…

    2022年8月22日
    7
  • windows+mysql集群搭建-三分钟搞定集群

    windows+mysql集群搭建-三分钟搞定集群

    2022年2月22日
    30
  • cdma是第几代移动通信系统_移动通信系统的双工分为

    cdma是第几代移动通信系统_移动通信系统的双工分为第三代移动通信系统旨在提供包括卫星在内的全球覆盖并实现有线和无线以及不同无线网络之间业务的无缝连接,同时针对不同的业务应用,提供从9.6kbit/s~2Mbit/s的接入速率,满足多媒体业务的要求。国际电联(ITU)把第三代移动通信系统称为IMT-2000。第三代移动通信系统主流的技术标准有WCDMA、TD-SCDMA、CDMA2000。WCDMA主要技术指标和特点WCDMA核心网络基于GSM/GPRS网络的演进,保持与GSM/GPRS网络的兼容性;核心网络可以基于TDM、ATM和

    2022年10月3日
    0
  • 大学数学课程(本科数学系有哪些课程)

    专业基础类课程:解析几何(大一上学期)数学分析I(大一上学期)数学分析II(大一下学期)数学分析III(大二上学期)高等代数I(大一上学期)高等代数II(大一下学期)常微分方程(大二上学期)抽象代数(大二下学期)概率论基础(大二下学期)复变函数(大二下学期)近世代数(大二下学期)专业核心课程:实变函数(大三上学期)偏微分方程(大三上学期)概率论(大三上学期)拓扑学(大三下学期)泛函分析(大三下学期)微分几何(大三下学期)数理方程(大三下学期)专业选

    2022年4月11日
    255
  • python怎么表示取余_python如何实现取余操作[通俗易懂]

    python怎么表示取余_python如何实现取余操作[通俗易懂]python实现取余操作的方法:可以利用求模运算符(%)来实现。求模运算符可以将两个数相除得到其余数。我们还可以使用divmod()函数来实现取余操作,具体方法如:【divmod(10,3)】。在python中要实现取余操作可以使用求模运算符(%),该运算符可以将两个数相除得到其余数。(推荐教程:Python入门教程)如果一个数恰好能被另外一个数据整除,则余数为0,%运算后返回结果为0。可利用余数…

    2022年4月25日
    75
  • element table_elementuos8

    element table_elementuos81、后台返回数据类型若有数组2、页面部分&lt;el-table-columnalign="center"prop="idCard"label="身份证号"width="250"&gt;&lt;/el-table-column&gt;&lt;el-table-columnalign="center"label="职务"width

    2022年9月6日
    2

发表回复

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

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