我们在vs2005中建立一个工程,各部分代码解释如下:
对于MUF来说,主控是CDominatorBase类,我们进行一切的操作,都必须通过该类的对象来实现。而又因为CDominatorBase有两个纯虚函数,所以一开始我们就必须要继承该类,并实现纯虚函数。不过也不用担心,其实CDominatorBase类中已经实现了这两个函数,所以在派生类中我们只需要明确指出使用该函数即可:
- ///
- //Dominator.h
- #include "..//..//..//Dominate//DominatorBase.h"
- class CDominator:
- public CDominatorBase
- {
- public:
- //--------------------------------------------------
- //Description:
- // You could see the description in the base class
- //-------------------------------------------------
- virtual CUserWnd* CreateWndObj(const TSTRING &strWndName);
- //--------------------------------------------------
- //Description:
- // You could see the description in the base class
- //-------------------------------------------------
- virtual BOOL CloseWndObj(CUserWnd* pObject) ;
- public:
- CDominator();
- virtual ~CDominator();
- private:
- };
- ///
- //Dominator.cpp
- #include "stdafx.h"
- #include "Dominator.h"
- CDominator::CDominator()
- {}
- CDominator::~CDominator()
- {}
- CUserWnd* CDominator::CreateWndObj(const TSTRING &strWndName)
- {
- return CDominatorBase::CreateWndObj(strWndName);
- }
- BOOL CDominator::CloseWndObj(CUserWnd* pObject)
- {
- return CDominatorBase::CloseWndObj(pObject);
- }
之所以有这两个纯虚函数的出现 ,主要是为了创建子窗口,实现特定的功能。具体关于CDominator类的说明,请查看后续章节。
主程序入口的文件在这里命名为Simple.cpp,代码如下:
- ///
- // Simple.cpp : Defines the entry point for the application.
- //
- #include "stdafx.h"
- #include "Dominator.h"
- #include "..//..//..//control//common.h"
- TSTRING GetIniPath()
- {
- std::vector<TCHAR> vtFileIni(MAX_PATH,0);
- CCommon::GetCurrentDirectory(&vtFileIni[0],vtFileIni.size());
- _tcscat(&vtFileIni[0],TEXT("MUF.ini"));
- return &vtFileIni[0];
- }
- int WINAPI WinMain( HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
- CDominator dominator;
- //Initialize the control from the ini file.
- dominator.Initialize(GetIniPath());
- //Show the main window
- dominator.ShowMainWnd(TRUE);
- //Message loop
- MSG msg;
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return 0;
GetIniPath函数是获取运行时的配置文件的路径。在这里设定的配置文件名为MUF.ini,存放的位置和应用程序为同级目录。
当然,还有一个我们建立的头文件:
- ///
- //stdafx.h
- #pragma once
- #include "windows.h"
- #ifdef _X86_
- #ifdef _DEBUG
- #pragma comment (lib,"..//lib//X86em//DEBUG//MUF.lib")
- #else
- #pragma comment (lib,"..//lib//X86em//RELEASE//MUF.lib")
- #endif
- #endif
- #ifdef _MIPS_
- #ifdef _DEBUG
- #pragma comment (lib,"..//lib//MIPSII//DEBUG//MUF.lib")
- #else
- #pragma comment (lib,"..//lib//MIPSII//RELEASE//MUF.lib")
- #endif
- #endif
- #ifdef _ARM_
- #ifdef _DEBUG
- #pragma comment (lib,"..//lib//ARM4I//Debug//MUF.lib")
- #else
- #pragma comment (lib,"..//lib//ARM4I//RELEASE//MUF.lib")
- #endif
- #endif}
MUF的使用有两种方式,一种是将框架的所有代码导入工程中进行嵌合编译,另一种是直接采用头文件和lib库的方式。前者编译缓慢,但能调试框架的代码;后者编译快速,但无法调试框架代码。如果框架的代码本来就存在bug,那么采用后者将很难发现。在这里为了简单方便,采用的是后者。
最后,还有一个最重要的配置文件。该文件定义了窗口的所有定义,在程序运行中调用。
配置文件内容如下:
[VARIABLE]
%WND_RECT%=0,0,479,271
[LANGUAGE]
;CHS
EN
[WND_MAIN]
TYPE=WINDOW
BACKGROUND_COLOR=255,255,255
RECT_POS=%WND_RECT%
TEXT_GROUP=GRP_TEXT
BUTTON_GROUP=GRP_BUTTON
[TXT_INFO]
TYPE=TEXT
RECT_POS=%WND_RECT%
POINT_SIZE=30
WEIGHT=0
FORMAT=DT_CENTER|DT_SINGLELINE|DT_VCENTER
COLOR=0,0,0
TRANSPARENT_MODE=TRUE
STRING=STR_INFO
[BTN_EXIT]
TYPE=BUTTON
RECT_POS=%WND_RECT%
COMMAND=CMD_EXIT
[GRP_TEXT]
TXT_INFO
[GRP_BUTTON]
BTN_EXIT
[STR_INFO]
TYPE=STRING
EN="HELLO WORLD!"
CHS="世界,你好!"
将该文件保存为MUF.ini,放置于应用程序的同级目录中即可。目前该配置文件显示的为英文,如果需要显示中文,只需要将[LANGUAGE]字段的EN用;注释掉,然后将CH前的;删掉即可。
该文件字段的释义,请见其后章节。