接着上次的框架,肯定有疑问那两个窗口类是怎么来的
g_pMainWnd = new CUMFCMainWindow(_T("UMFCMainWindow"));
g_pLoginWnd = new CUMFCLoginWindow(_T("UMFCLoginWindow"));
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;
...//若干控件
}
#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);
}
//事件绑定,第一个参数是窗口类名称,第二个是控件名称,第三个是事件类型的宏
/*
支持的事件类型
//控件事件
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);
}