精华内容
下载资源
问答
  • duilib

    2015-08-06 14:18:42
    2013 duilib入门简明教程 -- 总结 (20) 分类: duilib2014-04-30 01:39 319人阅读 评论(0) 收藏 举报  duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第387个版本,时间是...
     

    2013 duilib入门简明教程 -- 总结 (20)

    分类: duilib 319人阅读 评论(0) 收藏 举报
        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第387个版本,时间是2013.08.15~
     
        这里给出Alberl最后汇总的一个工程,戳我下载,效果如图:
     
        
     
    2013 duilib入门教程汇总:
     
        对比duilib自带的Demo而言,值得一提的是以下几点:
    1、本教程菜单、列表框的使用非常简明,比duilib自带的Demo里简明N倍,看过Demo的应该都知道MenuDemo、ListDemo太绕了。
    2、在教程15中介绍的菜单控件实现了阴影窗口,虽然这个是参考Demo里的,但是代码少了N倍,因为菜单的图片就有阴影效果,无需再自行绘制了。
    2、提供了CWndUI,用于显示win32、MFC、WTL等HWND类的窗口。
    3、提供了CXMLWnd(以XML生成界面的窗口基类),菜单类CMenuWnd、框架类CFrameWnd都继承于它。
    4、菜单类CMenuWnd采用了编译期提示错误的方法,强制CMenuWnd只能通过new来声明,防止delete this出错~
     
    结束语:
        第一篇始于2013.09.26,最后一篇终于2013.10.06,除了国庆,基本上每天晚上都在写,周末全天都写,耗费了大概7个晚上 + 一个周末。
        而正式学习duilib是在2013.09.09,于2013.09.24基本入门,除去中间有一星期在干其他的,耗费了大概9个晚上 + 一个周末。
        可以发现写教程的时间差不多和写代码的时间一样了,第一次写这么完整的教程,真正感受到了写文档为啥比写代码纠结~~~~(>_<)~~~~
     
        此入门教程是Alberl用duilib模仿原来的MFC程序所用到的知识,已经一一介绍给小伙伴了;下一个阶段将会用duilib来模仿几年前做的仿迅雷播放器界面,之后会做出一个完整的播放器,并且开源出来(注意:开源并不是把代码传上来就完事了,必须配备好详细的文档才算一个合格的开源项目,几年前Alberl已经传过源代码了,最近将整个SVN库都上传了)。Alberl也会配置相应的文档。 先放一张MFC做的土鳖图:

        由于之前都是用MFC,所以要完全模仿迅雷就很困难,界面难免很山寨,不过现在有了duilib之后,界面就不是太难的事啦,Alberl将会模仿目前最新的迅雷播放器,小伙伴们期待不?
        不过得声明的是:
        Alberl几年前开源了一个五子棋项目,并在末尾说了后面会开源播放器,但毕业之后就没时间了,于是就太监了。所以这次卷土重来,但是小伙伴们也不要催时间哦,Alberl只有业余时间才学习这些,所以不能给出具体的时间,只能说尽快~O(∩_∩)O~
        另外就是要看看本次duilib入门教程的反响,如果评价普遍不好的话,Alberl就不继续献丑啦,如果反响不错的话,Alberl会继续下一个系列的教程,就是仿迅雷播放器,后面还会有安装包等一系列完整应用的教程,希望不要太监了~
        小伙伴们,入门教程就讲完啦,如有遗漏,请亲们在评论中补充,如果是属于入门范畴的,Alberl会尽快加上~O(∩_∩)O~
    展开全文
  • Duilib

    2011-09-01 11:00:33
  • DuiLib

    2018-06-19 10:19:39
    1、XML 文件编写配置 ...用于处理duilib自己定义的一套消息,其消息类型请参见duilib的UIDefine.h。  (5) LRESULT HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam);消息响应,类似于MFC的DefWindowProc()。 
    1、XML 文件编写配置
     注意: 保存为utf-8格式
            window节点不能少
    name节点的值需要做到整个xml文件唯一。这个值是与代码交互的关键,用于代码中标识这一个控件具体对象。
    可以使用HorizontalLayout或者VerticalLayout来进行布局时占位。


    2、将建好的xml文件和所用到的图标文件打包形成一个压缩包(test.zip)。在VS 编译器中导入这个test.zip的资源。


    3、在_tWinMain函数中加入以下代码: 
       CPaintManagerUI::SetInstance(hInstance);  
       CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());   // 设置资源的默认路径(此处设置为和exe在同一目录


    CTestUIDlg *pFrame = new CTestUIDlg(_T("test.xml"));  
    pFrame->Create(NULL, _T("这是一个最简单的测试用exe,修改test.xml就可以看到效果"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);  
    pFrame->CenterWindow();  
    pFrame->ShowModal();  
    CPaintManagerUI::MessageLoop(); //!消息循环  


    4、CTestUIDlg即是我们的对话框类,它继承于WindowImplBase类,WindowImplBase类是一个XML的包装类,封装了常用操作,以方便大家使用。
       它是以XML作为界面描述的,所以用它的时候,我们必须将界面描述写到XML里。


    5、主要的几个函数:
       (1)explicit  CTestUIDlg(LPCTSTR pszXMLPath);构造函数,同其他构造函数一样,做一些初始化操作。传入的参数是xml文件路径,也就是test.xml的路径。
            CTestUIDlg::CTestUIDlg( LPCTSTR pszXMLPath )


        (2) void InitWindow();初始化窗口信息,根据前面xml文件中我们说的控件唯一标识,创建空间,其余功能相当于MFC下的OnInitDialog(),用于一些控件的初始化之类的。
        
        (3) CControlUI* CreateControl(LPCTSTR pstrClassName);用于自定义控件的创建.
     
        (4) void Notify(TNotifyUI& msg);操作消息响应,一般用于点击操作等的响应。用于处理duilib自己定义的一套消息,其消息类型请参见duilib的UIDefine.h。


        (5) LRESULT HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam);消息响应,类似于MFC的DefWindowProc()。 
    展开全文
  • DUILIB

    2017-07-15 17:43:24
    我用SetName修改了一个Option的名字为“stne”,但是之后再其他地方用COptionUI *lsop = static_cast<COptionUI*>(m_PaintManager.FindControl(“stne”)); lsop的值却为NULL怎么办?
  • Duilib学习资料自学

    2017-06-19 21:24:10
    Duilib
  • duilib初探

    2017-08-24 10:06:23
    duilib初探
  • DUIlib Demo

    2019-02-19 11:39:17
    duilib demo界面开发实例
  • NSIS教程(9): NSIS+duilib仿QQ安装包

    万次阅读 2018-01-19 17:43:48
    本文在NSIS教程(8): 基于第三方界面库的安装包界面基础上,分享如何使用NSIS结合duilib高仿QQ安装包的过程。 先上效果图吧! 完整NSIS脚本 # ====================== 自定义宏 =======================...

    推荐:NSIS-UI-Plugin 开源NSIS UI插件框架,支持任意第三方界面库,默认提供使用Qt作为界面库的安装包示例。

    本文在NSIS教程(8): 基于第三方界面库的安装包界面基础上,分享如何使用NSIS结合duilib高仿QQ安装包的过程。

    先上效果图吧!
    这里写图片描述

    这里写图片描述

    这里写图片描述

    在这里插入图片描述

    完整NSIS脚本

    下面是仿QQ安装包项目的NSIS部分的完整脚本,从脚本中可以看到,安装包的界面已经全部封装到了插件中(插件使用C++开发),在插件dll中使用duilib库创建窗体,并响应按钮点击等事件。通过插件与NSIS间的交互,可以方便的实现用户的交互操作。

    # ====================== 自定义宏 ==============================
    !define PRODUCT_NAME           "腾讯QQ"
    !define EXE_NAME               "QQ.exe"
    !define PRODUCT_VERSION        "1.0.0.1"
    !define PRODUCT_PUBLISHER      "Tencent"
    !define PRODUCT_LEGAL          "Copyright (C) 1999-2014 Tencent, All Rights Reserved"
    
    
    # ===================== 外部插件以及宏 =============================
    !include "LogicLib.nsh"
    !include "nsDialogs.nsh"
    !include "..\..\include\common.nsh"
    
    # ===================== 安装包版本 =============================
    VIProductVersion                    "${PRODUCT_VERSION}"
    VIAddVersionKey "ProductVersion"    "${PRODUCT_VERSION}"
    VIAddVersionKey "ProductName"       "${PRODUCT_NAME}"
    VIAddVersionKey "CompanyName"       "${PRODUCT_PUBLISHER}"
    VIAddVersionKey "FileVersion"       "${PRODUCT_VERSION}"
    VIAddVersionKey "InternalName"      "${EXE_NAME}"
    VIAddVersionKey "FileDescription"   "${PRODUCT_NAME}"
    VIAddVersionKey "LegalCopyright"    "${PRODUCT_LEGAL}"
    
    # ==================== NSIS属性 ================================
    
    #SetCompressor zlib
    
    ; 安装包名字.
    Name "${PRODUCT_NAME}"
    
    # 安装程序文件名.
    OutFile "QQ Setup.exe"
    
    # 默认安装位置.
    InstallDir "$PROGRAMFILES\Tencent\${PRODUCT_NAME}"
    
    
    # 针对Vista和win7 的UAC进行权限请求.
    # RequestExecutionLevel none|user|highest|admin
    RequestExecutionLevel admin
    
    # 安装和卸载程序图标
    Icon              "image\logo.ico"
    UninstallIcon     "image\logo.ico"
    
    # 自定义页面
    Page custom DUIPage
    
    # 卸载程序显示进度
    UninstPage instfiles
    
    # ======================= DUILIB 自定义页面 =========================
    Var hInstallDlg
    
    Function DUIPage
        !insertmacro Trace "$TEMP $PLUGINSDIR"
        nsDui::InitDUISetup
        Pop $hInstallDlg
        
        # License页面
        nsDui::FindControl "btnLicenseClose"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnExitDUISetup
            nsDui::OnControlBindNSISScript "btnLicenseClose" $0
        ${EndIf}
        
        nsDui::FindControl "btnLicenseMin"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnMin
            nsDui::OnControlBindNSISScript "btnLicenseMin" $0
        ${EndIf}
        
        nsDui::FindControl "btnLicenseNext"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnLicenseNextClick
            nsDui::OnControlBindNSISScript "btnLicenseNext" $0
        ${EndIf}
        
        # 目录选择 页面
        nsDui::FindControl "btnDirClose"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnExitDUISetup
            nsDui::OnControlBindNSISScript "btnDirClose" $0
        ${EndIf}
        
        nsDui::FindControl "btnDirMin"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnMin
            nsDui::OnControlBindNSISScript "btnDirMin" $0
        ${EndIf}
        
        nsDui::FindControl "btnSelectDir"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnSelectDir
            nsDui::OnControlBindNSISScript "btnSelectDir" $0
        ${EndIf}
        
        nsDui::FindControl "btnDirPre"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnDirPre
            nsDui::OnControlBindNSISScript "btnDirPre" $0
        ${EndIf}
        
        nsDui::FindControl "btnDirCancel"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnCancel
            nsDui::OnControlBindNSISScript "btnDirCancel" $0
        ${EndIf}
            
        nsDui::FindControl "btnDirInstall"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnInstall
            nsDui::OnControlBindNSISScript "btnDirInstall" $0
        ${EndIf}
        
    
        
        # 安装进度 页面
        nsDui::FindControl "btnDetailClose"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnExitDUISetup
            nsDui::OnControlBindNSISScript "btnDetailClose" $0
        ${EndIf}
        
        nsDui::FindControl "btnDetailMin"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnMin
            nsDui::OnControlBindNSISScript "btnDetailMin" $0
        ${EndIf}
    
        # 安装完成 页面
        nsDui::FindControl "btnFinished"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnFinished
            nsDui::OnControlBindNSISScript "btnFinished" $0
        ${EndIf}
        
        nsDui::FindControl "btnFinishedMin"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnBtnMin
            nsDui::OnControlBindNSISScript "btnFinishedMin" $0
        ${EndIf}
        
        nsDui::FindControl "btnFinishedClose"
        Pop $0
        ${If} $0 == 0
            GetFunctionAddress $0 OnExitDUISetup
            nsDui::OnControlBindNSISScript "btnFinishedClose" $0
        ${EndIf}
        
        nsDui::ShowPage
    FunctionEnd
    
    Function OnBtnLicenseNextClick
        nsDui::GetCheckboxStatus "chkAgree"
        Pop $0
        ${If} $0 == "1"
            nsDui::SetDirValue "$INSTDIR"
            nsDui::NextPage "wizardTab"
        ${EndIf}
    FunctionEnd
    
    # 开始安装
    Function OnBtnInstall
        nsDui::GetDirValue
        Pop $0
        StrCmp $0 "" InstallAbort 0
        StrCpy $INSTDIR "$0"
        nsDui::NextPage "wizardTab"
        nsDui::SetSliderRange "slrProgress" 0 100
        
        # 覆盖安装时,指定不覆盖的文件
        # 将这些文件暂存到临时目录
        CreateDirectory "$TEMP\qq_file_translate"
        CopyFiles /SILENT "$INSTDIR\gf-config.xml" "$TEMP\qq_file_translate"
        
        #启动一个低优先级的后台线程
        GetFunctionAddress $0 ExtractFunc
        BgWorker::CallAndWait
        
        # 文件释放完成以后,还原暂存的文件
        CopyFiles /SILENT "$TEMP\qq_file_translate\gf-config.xml" "$INSTDIR"
        RMDir /r "$TEMP\qq_file_translate"
        
        Call CreateShortcut
        Call CreateUninstall
    InstallAbort:
    FunctionEnd
    
    Function ExtractFunc
        SetOutPath $INSTDIR
        File "app\app.7z"
        GetFunctionAddress $R9 ExtractCallback
        Nsis7z::ExtractWithCallback "$INSTDIR\app.7z" $R9
        #Delete "$INSTDIR\app.7z"
    FunctionEnd
    
    
    Function ExtractCallback
        Pop $1
        Pop $2
        System::Int64Op $1 * 100
        Pop $3
        System::Int64Op $3 / $2
        Pop $0
        
        nsDui::SetSliderValue "slrProgress" $0
    
        ${If} $1 == $2
            nsDui::SetSliderValue "slrProgress" 100
            nsDui::NextPage "wizardTab"
        ${EndIf}
    FunctionEnd
    
    
    Function OnExitDUISetup
        nsDui::ExitDUISetup
    FunctionEnd
    
    Function OnBtnMin
        SendMessage $hInstallDlg ${WM_SYSCOMMAND} 0xF020 0
    FunctionEnd
    
    Function OnBtnCancel
    FunctionEnd
    
    Function OnFinished
        # 开机启动
        nsDui::GetCheckboxStatus "chkBootStart"
        Pop $R0
        ${If} $R0 == "1"
            SetShellVarContext all
            CreateShortCut "$SMSTARTUP\QQ.lnk" "$INSTDIR\Bin\QQ.exe"
        ${EndIf}
        
        # 立即启动
        nsDui::GetCheckboxStatus "chkStartNow"
        Pop $R0
        ${If} $R0 == "1"
            Exec "$INSTDIR\Bin\QQ.exe"
        ${EndIf}
        
        # 设置主页
        nsDui::GetCheckboxStatus "chkSetHomePage"
        Pop $R0
        ${If} $R0 == "1"
            WriteRegStr HKCU "Software\Microsoft\Internet Explorer\Main" "Start Page" "http://www.qq.com"
        ${EndIf}
        
        # 显示新特征
        nsDui::GetCheckboxStatus "chkShowFeature"
        Pop $R0
        ${If} $R0 == "1"
            ExecShell "open" "$INSTDIR\QQWhatsnew.txt"
        ${EndIf}
        
        Call OnExitDUISetup
    FunctionEnd
    
    Function OnBtnSelectDir
        nsDui::SelectInstallDir
        Pop $0
    FunctionEnd
    
    Function OnBtnDirPre
        nsDui::PrePage "wizardTab"
    FunctionEnd
    
    
    # ========================= 安装步骤 ===============================
    
    Function CreateShortcut
      SetShellVarContext all
      CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
      CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\Bin\${EXE_NAME}"
      CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\卸载${PRODUCT_NAME}.lnk" "$INSTDIR\uninst.exe"
      CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\Bin\${EXE_NAME}"
      SetShellVarContext current
    FunctionEnd
    
    Function CreateUninstall
    	# 生成卸载程序
    	WriteUninstaller "$INSTDIR\uninst.exe"
    	
    	# 添加卸载信息到控制面板
    	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" "${PRODUCT_NAME}"
    	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" "$INSTDIR\uninst.exe"
    	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayIcon" "$INSTDIR\${EXE_NAME}"
    	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "Publisher" "$INSTDIR\${PRODUCT_PUBLISHER}"
    FunctionEnd
    
    # 添加一个空的Section,防止编译器报错
    Section "None"
    SectionEnd
    
    
    # 卸载区段
    Section "Uninstall"
    
      ; 删除快捷方式
      SetShellVarContext all
      Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
      Delete "$SMPROGRAMS\${PRODUCT_NAME}\卸载${PRODUCT_NAME}.lnk"
      RMDir "$SMPROGRAMS\${PRODUCT_NAME}\"
      Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
      SetShellVarContext current
      
      SetOutPath "$INSTDIR"
    
      ; 删除安装的文件
      Delete "$INSTDIR\*.*"
    
      SetOutPath "$DESKTOP"
    
      RMDir /r "$INSTDIR"
      RMDir "$INSTDIR"
      
      SetAutoClose true
    SectionEnd
    
    # ============================== 回调函数 ====================================
    
    # 函数名以“.”开头的一般作为回调函数保留.
    # 函数名以“un.”开头的函数将会被创建在卸载程序里,因此,普通安装区段和函数不能调用卸载函数,而卸载区段和卸载函数也不能调用普通函数。
    
    Function .onInit
    
    FunctionEnd
    
    
    # 安装成功以后.
    Function .onInstSuccess
    
    FunctionEnd
    
    # 在安装失败后用户点击“取消”按钮时被调用.
    Function .onInstFailed
        MessageBox MB_ICONQUESTION|MB_YESNO "安装成功!" /SD IDYES IDYES +2 IDNO +1
    FunctionEnd
    
    
    # 每次用户更改安装路径的时候这段代码都会被调用一次.
    Function .onVerifyInstDir
    
    FunctionEnd
    
    # 卸载操作开始前.
    Function un.onInit
        MessageBox MB_ICONQUESTION|MB_YESNO "您确定要卸载${PRODUCT_NAME}吗?" /SD IDYES IDYES +2 IDNO +1
        Abort
    FunctionEnd
    
    # 卸载成功以后.
    Function un.onUninstSuccess
    
    FunctionEnd
    

    nsDui::InitDUISetupnsDui::FindControl这样的函数都是自己开发的nsDui插件提供的功能,该插件基于duilib,提供界面显示,控件响应等功能。

    脚本中使用了BgWorker插件来实现开启后台工作线程来执行解压缩过程:

     GetFunctionAddress $0 ExtractFunc
     BgWorker::CallAndWait
    

    使用nsis7z插件来解压缩7z文件,并且通过将函数ExtractCallback传入作为回调函数,获取解压缩进度:

    GetFunctionAddress $R9 ExtractCallback
    Nsis7z::ExtractWithCallback "$INSTDIR\app.7z" $R9
    

    需要留意 NSIS教程(8): 基于第三方界面库的安装包界面中提到的nsis7z因为版本太老导致的无法解压的问题。

    nsDui工程下载地址:
    http://download.csdn.net/download/china_jeffery/10214488
    也可以从http://download.csdn.net/download/china_jeffery/10214582下载完整的工程,含插件、脚本、图片资源等。

    推荐:NSIS-UI-Plugin 开源NSIS UI插件框架,支持任意第三方界面库,默认提供使用Qt作为界面库的安装包示例。

    展开全文
  • Duilib Demo

    2016-04-05 11:44:24
    Duilib Demo
  • duilib.rar

    2020-04-10 15:55:25
    duilib——ultimate、duilibricheditdemo、duilib——ultimate-master\duilib新功能展示、duilibxml详解
  • duilib程序

    2018-02-09 13:41:07
    本程序使用duilib进行开发,依托win32平台,有界面显示,简单的游戏环境选择工具,代码是一个简单例子,有duilib库,大家可以根据需要更改!
  • duilib源码

    2017-07-01 08:24:29
    duilib源码,这是我自己用的 一个库
  • duilib对话框

    2018-02-27 10:32:18
    一个基于duilib的对话框,主要用到了树和tab页面。。。。。。。。。。。。。
  • duilib学习

    2015-08-26 16:29:57
    duilib界面开发学习
  • duilib学习资源

    2017-03-29 14:19:36
    duilib
  • DUILIB 解析

    2017-07-08 17:26:16
    DUILIB中对控件操作非常重要的源码进行了分析、添加了注释,方便大家.
  • duilib master

    2017-11-14 16:52:08
    Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率,遵循bsd协议。
  • DuiLib资源

    2015-04-20 00:19:09
    DuiLib相关资源,包含DuiLib最新源码,还有相关的案例源码。如果想用DuiLib开发软件的话这套资源很有用。因为他包含了所有能用到的控件开发案例
  • Duilib Duilib是一个Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联网公司普遍接受,广泛应用于包括IM、视频客户端、股票行情软件、导航软件、手机辅助软件、安全软件等多个...
  • Duilib Menu

    2015-05-22 09:08:03
    Duilib 的Menu进行实现和扩展
  • duilib例子

    2016-01-03 22:30:10
    duilib例子,包函常用的几个控件例子
  • duilib menu

    2015-11-17 20:25:23
    使用Duilib动态生成菜单项,添加响应事件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,302
精华内容 1,720
热门标签
关键字:

DuiLib