转载自:http://blog.csdn.net/norains/article/details/3956940
为了向前辈致敬,我们第一个程序也在设备中输出“HelloWorld”。
我们在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前的;删掉即可。