?? cppapp.cpp
字號(hào):
#include "CPPAPP.h"
#include "cppapp.bid"
#include "cppapp_res.h"
#include <AEEStdLib.h>
extern "C" {
int AEEClsCreateInstance(AEECLSID clsID, IShell* pIShell, IModule* pIModule, void **ppobj)
{
if(clsID == AEECLSID_CPPAPP)
{/* 這里的CPPApp應(yīng)該是類似于MFC中的CWinApp類(應(yīng)用程序主體)
但是比 CWinApp弱多了,CWinApp是從 CWinThread 繼承下來(lái)的,有一些先天具來(lái)的功能
而這里的CPPApp 就是光屁股了
-----------------------------------
上面的想法不對(duì):
CWinApp 是應(yīng)用程序類,提供的接口主要有:
virtual BOOL InitApplication();
virtual BOOL InitInstance();
virtual int Run();
而這里的 CPPApp 提供的接口有:
static boolean InitAppData(IApplet *pIApplet) <-- 就這個(gè)還比較像一點(diǎn)
static void FreeAppData(CPPApp * pCPPApp)
static boolean HandleEvent() <-- 這個(gè)就一點(diǎn)不象了,還是像
傳統(tǒng)的 sdk 程序中的 WndProc 程序,用 switch/case 來(lái)對(duì)應(yīng)消息和處理函數(shù),或者是像MFC中的 DefWindowProc()函數(shù)(用了 MESSAGE MAP的機(jī)制)
MFC程序在開始的地方定義了一個(gè)全局的對(duì)象(Application Object),執(zhí)行完必要的構(gòu)造函數(shù)以后,
WinMain()登場(chǎng),登場(chǎng)后調(diào)用 InitApplication() 和 InitInstance() 以及 Run()
相當(dāng)于 CWinApp::InitApplication(); <-- 注冊(cè)窗口類 -》在brew中好像沒有windows下的類的窗口類,而是子窗口的概念
CMyWinApp::InitInstance(); <-- 產(chǎn)生窗口,顯示窗口 -》在brew中是通過(guò)響應(yīng) EVT_APP_START 畫出來(lái)的窗口
CWinApp::Run(); <-- 獲取消息并分派消息(獲取的消息好像是從消息隊(duì)列里取出來(lái)的)
接上 -》在brew中不知道消息是怎么獲得的,分派是通過(guò)HandleEvent()函數(shù)
比較關(guān)鍵的操作在 CMyWinApp::InitInstance() 中,如下:
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd(); <-- 執(zhí)行 CMyFrameWnd 的構(gòu)造函數(shù),轉(zhuǎn)了一大圈產(chǎn)生出了窗口
m_pMainWnd->ShowWindow(m_nCmdShow); <-- 令窗口顯示出來(lái)
m_pMainWnd->UpdateWindow(); <-- 送出去 WM_PAINT 消息
return TRUE;
}
這部分的操作實(shí)際相當(dāng)于BREW中的,顯示窗口然后更新屏幕 <-- ISHELL_CreateInstance 產(chǎn)生窗口,(設(shè)定屬性) IDISPLAY_Update()刷新屏幕
MFC中送出 WM_PAINT 消息以后,執(zhí)行 系統(tǒng)自動(dòng)加入的WinMain() 函數(shù)中 Run() <--發(fā)送消息隊(duì)列中的 WM_PAINT消息,然后依照 MESSAGE MAP
分發(fā)找到相應(yīng)的處理函數(shù)并且處理消息。
*/
if(!AEEApplet_New(sizeof(CPPApp), clsID, pIShell, pIModule, (IApplet**)ppobj,(AEEHANDLER)CPPApp::HandleEvent,
(PFNFREEAPPDATA)CPPApp::FreeAppData))
return EFAILED;
if (!CPPApp::InitAppData((IApplet *)*ppobj))
return EFAILED;
return SUCCESS;
}
return EFAILED;
}
} //extern "C"
boolean CPPApp::InitAppData(IApplet *pIApplet)
{
CPPApp* pCPPApp = (CPPApp*)pIApplet;
return pCPPApp->OnAppInitData();
}
void CPPApp::FreeAppData(CPPApp *pCPPApp)
{
pCPPApp->OnAppFreeData();
}
boolean CPPApp::HandleEvent(CPPApp *pCPPApp, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
return pCPPApp->OnEvent(eCode, wParam, dwParam);
}
// 比較奇怪,在這里居然不能執(zhí)行操作,在MFC的框架中應(yīng)該執(zhí)行的是生成FrameWnd的對(duì)象
/*
說(shuō)明這個(gè)執(zhí)行初始化的函數(shù)和MFC中的應(yīng)用類所對(duì)應(yīng)的 InitInstance 是有區(qū)別的
*/
boolean CPPApp::OnAppInitData() // 做初始化工作|分配必須的內(nèi)存
{
this->m_strHello = (AECHAR*)MALLOC(16*sizeof(AECHAR));
// Show_HelloWorld();
return TRUE;
}
void CPPApp::OnAppFreeData()
{
FREE(this->m_strHello);
}
boolean CPPApp::OnEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
switch (eCode)
{
case EVT_APP_START:
Show_HelloWorld();
return(TRUE);
case EVT_APP_STOP:
return(TRUE);
default:
return(FALSE);
}
}
void CPPApp::Show_HelloWorld(){
IShell *pIShell = this->m_pIShell;
IDisplay *pIDisplay = this->m_pIDisplay;
ISHELL_LoadResString(pIShell, CPPAPP_RES_FILE, STR_HELLO, m_strHello, 32);
IDISPLAY_ClearScreen(pIDisplay);
IDISPLAY_DrawText(pIDisplay, AEE_FONT_NORMAL, m_strHello, -1, 0, 50, NULL, IDF_ALIGN_CENTER);
IDISPLAY_Update(pIDisplay);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -