接着上次的框架,肯定有疑問那兩個窗口類是怎麼來的


g_pMainWnd = new CUMFCMainWindow(_T("UMFCMainWindow"));
    g_pLoginWnd = new CUMFCLoginWindow(_T("UMFCLoginWindow"));

 今天就接着講解窗口類的來歷。

#pragma once
#include "EasyUI.h"
#include "EasyDialog.h"
#include "EasyEventDelgate.h"
#include "EasyList.h"
#include "EasyStatic.h"
#include "EasyProgress.h"
#include "EasyTrayIcon.h"
#include "EasyRadioButton.h"
#include "EasyMenu.h"
using namespace easyui;

class CUMFCMainWindow 
: public CEasyDialogWinWnd  //windows窗口基類
{
public:
    CUMFCMainWindow(LPCTSTR pszWndName);//構造函數,需要傳入窗口名稱,這個名稱就是xml裏面配置的窗口名稱,name屬性的值
    LPCTSTR GetWindowClassName() const;//給窗口類指定一個名稱
    UINT GetClassStyle() const;//窗口的style,不需要可以直接返回null
        //上面三個方法是窗口類必須實現的

    bool OnCreate();
    void OnDestory();
        //消息處理函數
    LRESULT OnWndMsg(UINT uMsg, WPARAM wParam,LPARAM lParam);
       
    //事件處理函數(下面會詳細講解)
    DECLARE_EVENT_FUN(OnMenuOpen);
    DECLARE_EVENT_FUN(OnMenuQuit);
    ....//若干個事件處理函數
    DECLARE_EASY_EVENT(CUMFCMainWindow);//這個是必須調用的,用來綁定事件處理函數的,參數就是窗口類名
    DECLARE_EASY_CONTROL_BIND();//這個也是必須調用的,用來綁定控件到成員變量,方便訪問 
    //注意:關於事件控件綁定,後面文章會詳細講解
   
public: //控件變量
    CEasyStatic    *m_pStcUsrname;
    CEasyList    *m_pListRun; 
        ...//若干控件 
}

 

 大致的頭文件就這樣子了。(這裏沒有給出完整版本,如果需要完整版本的例子工程,可以聯繫我QQ發送,或者留下郵箱)

CPP文件也有一些必須的工作:

BEGIN_ULTRANT_EVENT_MAP(CUMFCMainWindow)//事件綁定開始的宏
    //事件綁定,第一個參數是窗口類名稱,第二個是控件名稱,第三個是事件類型的宏
    /*
    支持的事件類型
    //控件事件
    enum EVENT_ID
    {
        EVENT_SKIN_BEFORE,
        EVENT_SKIN_AFTER,
        EVENT_TIMER,
        EVENT_BTN_LCLICK,
        EVENT_BTN_RCLICK,
        EVENT_BTN_LDBCLICK,
        EVENT_BTN_RDBCLICK,
        EVENT_CHK_SELECT,
        EVENT_RADIO_SELECT,
        EVENT_SLIDER_SCROLL,
        EVENT_LSTBOX_SELCHANGE,
        EVENT_LSTBOX_DBLCLICK,
        EVENT_LST_ROW_SELCHANGE,
        EVENT_LST_ITEM_SELCHANGE,
        EVENT_LST_DBLCLICK,
        EVENT_TREE_SEL_CHANGE,
        EVENT_TREE_DBCLICK,
        EVENT_MENU_SELECT,
        EVENT_COMBOX_SELCHANGE,
        EVENT_EDIT_TEXT_INPUT,
        EVENT_EDIT_TEXT_CHANGE,
        EVENT_STEP_NUM_CHANGE,
        EVENT_END,//擴展的event需要從這裏開始
    };
    */
    ON_ULTRANT_EVENT(_T("UMFCMainWindow"),     _T("btnaddtask"),          EVENT_BTN_LCLICK,            &CUMFCMainWindow::OnAddTask);
    ON_ULTRANT_EVENT(_T("UMFCMainWindow"),     _T("btndeltask"),          EVENT_BTN_LCLICK,            &CUMFCMainWindow::OnDelTask);
    ....//不同的事件綁定
    ON_ULTRANT_EVENT(_T("menutray"),         _T("start"),              EVENT_MENU_SELECT,            &CUMFCMainWindow::OnMenuStart);
    ON_ULTRANT_EVENT(_T("menutray"),         _T("stop"),              EVENT_MENU_SELECT,            &CUMFCMainWindow::OnMenuStop);
END_ULTRANT_EVENT_MAP()//結束的宏

//控件綁定 CUMFCMainWindow類名,_T("UMFCMainWindow")窗口名
BEGIN_ULTRANT_CONTROL_BIND(CUMFCMainWindow, _T("UMFCMainWindow"))
    //CUltrantList* 指針類型的成員變量, m_pListRun成員變量,_T("listrun")控件名 
    BIND_CONTROL(CUltrantList*,        m_pListRun,        _T("listrun"));
    BIND_CONTROL(CUltrantList*,        m_pListDel,        _T("listdel"));
    ......
    BIND_CONTROL(CUltrantStatic*,    m_pStcUsrname,    _T("stcaccount"));
    BIND_CONTROL(CUltrantRadioButton*,    m_pBtnListDel,    _T("radiodel"));
END_ULTRANT_CONTROL_BIND()


CUMFCMainWindow::CUMFCMainWindow(LPCTSTR pszWndName) 
: CUltrantDialogWinWnd(pszWndName)//基類初始化需要窗口名
{
}

LPCTSTR CUMFCMainWindow::GetWindowClassName() const 
{
    return _T("UMFCMainWindow"); //註冊一個窗口類名稱
}

UINT CUMFCMainWindow::GetClassStyle() const
{
    return CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; 
}

//事件處理函數 CUMFCMainWindow窗口類,OnSelectRunLst函數名
IMP_EVENT_FUN(CUMFCMainWindow, OnSelectRunLst)
{
    //data是處理函數給的參數,具體事件類型不同給的數據不同
    _OnSwitchLst(EM_BTN_STATUS_TWO == data->lParam);
}