接着上次的框架,肯定有疑問那兩個窗口類是怎麼來的
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);
}
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。