• DuiLib学习笔记2.写一个简单的程序


    我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷。我的新建项目名为:duilibTest

    duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门

    首先新建一个win32项目

    DuiLib根目录,把目录下DuiLib文件夹拷贝到新建项目的根目录。再把这个项目添加进我们解决方案中。

    从教程里面把以下代码粘贴到我们项目的stdafx.h中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    // Duilib使用设置部分

    #pragma once

    #define WIN32_LEAN_AND_MEAN

    #define _CRT_SECURE_NO_DEPRECATE

    #include <windows.h>

    #include <objbase.h>

    #include "..DuiLibUIlib.h"

    using namespace DuiLib;

    #ifdef _DEBUG

    #   ifdef _UNICODE

    #       pragma comment(lib, "..\bin\DuiLib_ud.lib")

    #   else

    #       pragma comment(lib, "..\bin\DuiLib_d.lib")

    #   endif

    #else

    #   ifdef _UNICODE

    #       pragma comment(lib, "..\bin\DuiLib_u.lib")

    #   else

    #       pragma comment(lib, "..\bin\DuiLib.lib")

    #   endif

    #endif

    duilibTest.cpp中,除了头文件引用的代码都删除,再把以下代码粘贴到duilibTest.cpp中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    // 窗口实例及消息响应部分

    class CFrameWindowWnd : public CWindowWnd, public INotifyUI

    {

    public:

        CFrameWindowWnd() { };

        LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); };

        UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; };

        void OnFinalMessage(HWND /*hWnd*/) { delete this; };

        void Notify(TNotifyUI& msg)

        {

            if( msg.sType == _T("click") ) {

                if( msg.pSender->GetName() == _T("closebtn") ) {

                    Close();

                }

            }

        }

        LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)

        {

            if( uMsg == WM_CREATE ) {

                m_pm.Init(m_hWnd);

                CControlUI *pButton = new CButtonUI;

                pButton->SetName(_T("closebtn"));

                pButton->SetBkColor(0xFFFF0000);

                m_pm.AttachDialog(pButton);

                m_pm.AddNotifier(this);

                return 0;

            }

            else if( uMsg == WM_DESTROY ) {

                ::PostQuitMessage(0);

            }

            LRESULT lRes = 0;

            if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes;

            return CWindowWnd::HandleMessage(uMsg, wParam, lParam);

        }

    public:

        CPaintManagerUI m_pm;

    };

    // 程序入口及Duilib初始化部分

    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)

    {

        CPaintManagerUI::SetInstance(hInstance);

        CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

        CFrameWindowWnd* pFrame = new CFrameWindowWnd();

        if( pFrame == NULL ) return 0;

        pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);

        pFrame->ShowWindow(true);

        CPaintManagerUI::MessageLoop();

        return 0;

    }

    此时编译可能会报错:LINK : fatal error LNK1104: 无法打开文件“..inDuiLib_ud.lib” 

    一方面是没有拷贝lib文件进来,另外一方面,是编译duilib时应该采用UnicodeDebug模式

    重新编译duilib后,在lib文件夹里找到DuiLib_ud.lib拷贝到bin文件夹里。把bin文件夹中的DuiLib_ud.dll拷贝到debug文件夹里。

    再次编译duilibTest就能通过编译了。运行结果如下:

    到了这一步说明你的duilib已经能正常使用了。接下来继续跟着文档走,我们来读取xml配置

    首先改HandleMessage中的代码,把下面注释掉的代码改为新的

     

    //CControlUI *pButton = new CButtonUI;
    
    //pButton->SetName(_T("closebtn"));
    
    //pButton->SetBkColor(0xFFFF0000);
    
    //m_pm.AttachDialog(pButton);
    
    CDialogBuilder builder;
    
    CControlUI* pRoot = builder.Create(_T("test1.xml"), (UINT)0, NULL, &m_pm);
    
    ASSERT(pRoot && "Failed to parse XML");
    
    m_pm.AttachDialog(pRoot);

     创建一个test1.xml,使用vs直接创建一个xml,确保xml文件编码是utf-8格式

    xml中写入如下代码

    <?xml version="1.0" encoding="utf-8"?>
    
    <Window mininfo="200,360" size=" 480,320 ">
    
      <Font name="幼圆" size="16" default="true" 
  • 相关阅读:
    2018-2019-2 20189206 《网络攻防实践》 第八周作业
    2018-2019-2 20189206 《网络攻防实践》 第七周作业
    2018-2019-2 20189206 《网络攻防实践》 第六周作业
    2018-2019-2 20189206 《密码与安全新技术专题》 第三次作业
    2018-2019-2 20189206 《网络攻防实践》 第五周作业
    2018-2019-2 20189206 《网络攻防实践》 第四周作业
    2018-2019-2 20189206 《密码与安全新技术专题》 第二次作业
    2018-2019-2 20189206 《网络攻防实践》 第三周作业
    2018-2019-2 20189206 《密码与安全新技术专题》 第一次作业
    2018-2019-2 20189206 《网络攻防实践》 第二周作业
  • 原文地址:https://www.cnblogs.com/blogpro/p/11445955.html
Copyright © 2020-2023  润新知