(4)用DuiCreator的DuiLib类向导,加速多窗口程序制作

来源:互联网 发布:国家顶级域名是 编辑:程序博客网 时间:2024/05/19 18:42

转自DuiLib中文网 http://www.duilibcn.com/duicreator/97.html


在前面的例子中,使用DuiCreator已经能轻松开发一个简单单窗口应用,但是一个完整的程序可能是需要多个窗口的,比如点击一个按钮需要弹出登录界面,那么就需要另外的窗体了。DuiCreator的DuiLib类添加向导能轻而易举的做出多个窗体。
首先用DuiCreator新建一个DuiLib EXE程序,建好后在工程上点击右键,选择“添加新”,或者按快捷键 CTRL + N,弹出类向导,这里选择,DuiLib Windows C++ Class,之所以还有个DuiLib Contrl C++ Class是因为DuiLib的窗体类和控件类的基类是不一样的。
 
Class Name 填写新类的名称,这里就叫LoginDialog好了。完成之后工程里多了logindialog.h,logindialog.cpp,logindialog.xml3个文件

  1. #ifndef LOGINDIALOG_H
  2. #define LOGINDIALOG_H


  3. #include <Windows.h>
  4. #include <objbase.h>
  5. #include <UIlib.h>
  6. using namespace DuiLib;

  7. class LoginDialog : public WindowImplBase
  8. {
  9. public:
  10.     LoginDialog(const CDuiString& m_uiFolderName,const CDuiString& sUiFileName);
  11.     virtual ~LoginDialog();

  12.     //设置窗口标题
  13.     void setWindowTitle(const CDuiString& sTitle);
  14.     CLabelUI* m_titleLabel;

  15. protected:
  16.     virtual LPCTSTR GetWindowClassName() const;

  17.     virtual CDuiString GetSkinFile();

  18.     virtual void InitWindow();
  19.     virtual CDuiString GetSkinFolder();

  20.     void OnFinalMessage(HWND hwnd);

  21.     virtual CControlUI* CreateControl(LPCTSTR pstrClass);
  22.     void Notify(TNotifyUI& msg);

  23. private:
  24.     CDuiString m_uiFileName;
  25.     CDuiString m_uiFolderName;

  26.     CButtonUI* m_minBtn;
  27.     CButtonUI* m_maxBtn;
  28.     CButtonUI* m_restoreBtn;
  29.     CButtonUI* m_closeBtn;
  30. };


  31. #endif // LOGINDIALOG_H
复制代码
LoginDialog 和 CMainWindow一样同样继承自WindowImplBase。
打开 CMainWindow.cpp 添加LoginDialog的头文件#include "logindialog.h"编辑如下代码
  1. void CMainWindow::Notify(TNotifyUI &msg)
  2. {
  3.     if(msg.sType == DUI_MSGTYPE_CLICK)
  4.     {
  5.         //(*
  6.         if(msg.pSender == m_minBtn)
  7.         {this->SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, NULL);}
  8.         if(msg.pSender == m_maxBtn)
  9.         {this->SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);}
  10.         if(msg.pSender == m_restoreBtn)
  11.         {this->SendMessage(WM_SYSCOMMAND, SC_RESTORE, NULL);}
  12.         if(msg.pSender == m_closeBtn)
  13.         {::PostQuitMessage(0L);}
  14.         //*)

  15.         if(msg.pSender->GetName() == L"button1")
  16.         {
  17.             //::MessageBoxW(NULL,L"Hello DuiLib",L"ok",MB_OK);
  18.             LoginDialog* dlg = new LoginDialog(L"skin",L"LoginDialog.xml");
  19.             dlg->Create(m_hWnd,L" 登录",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
  20.             dlg->ShowModal();

  21.         }
  22.     }
  23. }
复制代码
编译运行程序,如果出现编译错误,执行qmake,然后再重新构建项目,看一下我们的模态窗口是否出来了呢? 
注意,如果登录对话框的标题是乱码,需要用NotePad++改变CMainWindow.cpp的编码为UTF-8编码。
LoginDialog* dlg = new LoginDialog(L"skin",L"LoginDialog.xml"); 说明LoginDialog的皮肤文件也是在skin文件夹里,窗体布局文件则是LoginDialog.xml。
dlg->Create(m_hWnd,L" 登录",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE); 这句话创建了登录窗体,它的上级是m_hWnd,也就是CMainWindow,如果置NULL,则登录对话框就不是模态的了。
dlg->ShowModal(); 这句就是显示模态对话框了。

0 0
原创粉丝点击