




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、智能手機(jī)Smartphone開發(fā)從零起步 智能手機(jī)Smartphone開發(fā)從零起步 本文從零開始講述了進(jìn)行smartphone開發(fā)的整個(gè)過程,通過本文的閱讀,你可以從中獲得: 1、 安裝smartphone的開發(fā)環(huán)境 2、 配置smartphone的開發(fā)環(huán)境 3、 配置模擬器。 4、 連接模擬器到ActiveSync。 5、
2、 一個(gè)通用性好、擴(kuò)展性強(qiáng)的smartphone編程框架。 6、 在smartphone窗口中繪制文本,使用消息提示框等。 7、 安裝我們的smartphone程序。 下面所有描述均以Microsoft smartphone 2003 簡(jiǎn)體中文版操作平臺(tái)為例。 安裝開發(fā)環(huán)境 目前有兩種開發(fā)環(huán)境可供選擇,一種基于C+,另一種則是基于.NET架構(gòu)的VB.net和C#,鑒于C+的靈活,結(jié)構(gòu)相對(duì)比較清晰(最重要的一點(diǎn)是我在C+下面的開發(fā)經(jīng)驗(yàn)要比在V
3、S.NET上多一些),在下面的例子本文將選用第一種方案。 一、C+開發(fā)環(huán)境 1、安裝ActiveSync 3.7.1 這個(gè)軟件用于連接及同步桌面windows系統(tǒng)和smartphone設(shè)備,連接成功后,你會(huì)在桌面上看到一個(gè)smartphone設(shè)備的虛擬目錄,你可以在桌面windows下對(duì)這個(gè)目錄下的內(nèi)容進(jìn)行修改,所有的修改會(huì)同步更新到smartphone設(shè)備上。 2、安裝Microsoft eMbedded C+ 4.0 和Microsoft eMbedded C+ 4.0 S
4、P3 目前最新的有Microsoft eMbedded C+ 4.0 SP4,也可以安裝。 3、安裝SDK for Windows Mobile? 2003-based Smartphones 不用多說,所有smartphone相關(guān)的內(nèi)容都由它提供。 4、安裝 Localized Emulation Images for Windows Mobile? 2003-based
5、; Smartphone 對(duì)于Mobie設(shè)備開發(fā)而言,模擬器是非常重要的,它用來模擬真實(shí)的smartphone設(shè)備,讓你能夠在Windows桌面平臺(tái)上調(diào)試驗(yàn)證你的程序而不需要連接到一個(gè)真實(shí)設(shè)備,在smartphone的sdk中已經(jīng)包含了一個(gè)英文的模擬器,這里我們要安裝的是一個(gè)簡(jiǎn)體中文的版本,安裝文件是Smartphone 2003 SDK Chinese Simplified Emulation Images,它讓我們可以在
6、模擬器上顯示中文內(nèi)容。 5、Windows Mobile Developer Power Toys for smartphone 這里面提供了一些幫助你開發(fā)和調(diào)試的工具,常用的有"Emulator ActiveSync Connection Tool",可以讓你連接ActiveSync到我們的模擬器,這樣我們就可以在桌面端實(shí)時(shí)顯示完整的目錄結(jié)構(gòu);還有"ActiveSync
7、0; Remote Display",一個(gè)有趣的工具,可以將你的smartphone顯示屏幕同步顯示在桌面窗口中。 安裝注意: 進(jìn)行安裝時(shí),1到3是必須安裝的,并且,牢記不要改變13的順序,也不能改變安裝程序所指定的默認(rèn)路徑,否則一旦安裝失敗,你可能需要重新安裝操作系統(tǒng)才能解決問題(痛苦呢),這主要是因?yàn)? &
8、#160; "Microsoft Windows CE platform manager 4.0"不能被完全卸載的緣故。 建議你在安裝了Microsoft eMbedded C+ 4.0后,馬上啟動(dòng)它看一下,如果不能啟動(dòng),就不用再向下進(jìn)行了,不要使用Windows自帶的卸載程序,到網(wǎng)上找比較強(qiáng)大的卸載
9、工具來卸載eMbedded C+,然后重新安裝即可。 二、VB.net或C#開發(fā)環(huán)境 1、安裝ActiveSync 3.7.1 2、安裝VS.net 2003 3、安裝SDK for Windows Mobile? 2003-based Smartphones 4、安裝 Localized Emulation Image
10、s for Windows Mobile 2003-based Smartphone 5、安裝Windows Mobile Developer Power Toys for smartphone 其中,13是必須安裝的,4和5可選安裝,原因前面已經(jīng)說明了。 因?yàn)橄旅媾渲瞄_發(fā)環(huán)境我都是以C+環(huán)境而言的,因此,如果你使用VS.NET開發(fā),你會(huì)發(fā)覺有些地方會(huì)有差異,但涉及的基本概念和原理都是
11、一樣的。 對(duì)于VS.NET,你可以在 工具-選項(xiàng)-設(shè)備工具-設(shè)備里面發(fā)現(xiàn)并配置你的模擬器。祝你好運(yùn)。 配置開發(fā)環(huán)境 1、配置模擬器 1) 啟動(dòng)Microsoft eMbedded C+ 4.0 2) 選擇菜單tools->configure platform manager. 在Smartphone 2003中新增加一個(gè)設(shè)備CHS_SMARTPHONE 2003 Emulator 3) 選中新增的設(shè)備,點(diǎn)擊p
12、roperties 選擇Transpor為TCP/IP Transport for Windows CE;選擇Startup為Emulator Startup Server,如下: 4) 配置Emulator Startup Server 在Image中選擇CHS Smartphone 2003(Virtual Radio),其余保持不變 5) 返回Devic
13、e Properties對(duì)話框,點(diǎn)擊test 如果配置正確的話,模擬器會(huì)被啟動(dòng)起來,如下: 6) 模擬器配置完成。 2、連接ActiveSync到模擬器 配置好模擬器后,我們已經(jīng)可以進(jìn)行開發(fā)了,但因?yàn)橹挥蠥ctiveSync能夠展示出設(shè)備的目錄結(jié)構(gòu),因此只有使ActiveSync連接了模擬器,那個(gè)模擬器在開發(fā)中才能夠代替一臺(tái)真正的smartphone手機(jī)。 將ActiveSync連接到模擬器一共有兩種辦法,一種是通過串口進(jìn)行環(huán)回,需要使用null modem
14、60; cable連接,另一種是使用以太網(wǎng)卡的Virtual Switch服務(wù),讓ActiveSync以為模擬器是從以太網(wǎng)接口卡連接進(jìn)來的真實(shí)設(shè)備,因?yàn)槭褂肰irtual Switch速度快,也不需要硬件電纜,因
15、此我們以這種連接方式為例。 鑒于這一部分是個(gè)難點(diǎn),在我們開發(fā)時(shí),很多同事都碰到了配置不成功的情況,因此,此處將列出詳細(xì)的步驟: 1) virtual switch服務(wù)確認(rèn) 打開你的網(wǎng)絡(luò)鄰居,觀察在"本地連接"的屬性對(duì)話框,確認(rèn)有如下服務(wù):"virtual PC Emulated Ethernet Switch",這是你安裝模擬器的時(shí)候安裝程序自動(dòng)
16、幫你安裝的,如果沒有發(fā)現(xiàn),請(qǐng)重新安裝smartphone 2003 SDK。 2) 配置模擬器使用virtual switch服務(wù) 啟動(dòng)Microsoft eMbedded C+ 4.0,菜單tools->configure platform manager.->CHS_SMARTPHONE 2003 emulator->Emulator Startup Server:
17、; 3) 配置你的ActiveSync能夠通過以太網(wǎng)連接設(shè)備 打開ActiveSync,菜單 文件-連接設(shè)置,選擇允許通過網(wǎng)絡(luò)(以太網(wǎng))以及遠(yuǎn)程訪問服務(wù)器(RAS)與此臺(tái)計(jì)算機(jī)建立連接。 4) 啟動(dòng)模擬器 注意,我們的中文模擬器需要從EC+內(nèi)部啟動(dòng),因?yàn)橥獠縎DK菜單上的模擬器是安裝SDK時(shí)默認(rèn)安裝的英文模擬器。 5) 連接ActiveSync與模擬器 1)、首先,進(jìn)入SDK工具: 2)、然后在命令行輸入:
18、0; emuascfg /sp "smartphone 2003" "chs_smartphone 2003 emulartor" 其中"smartphone 2003"是操作平臺(tái)名,"chs_smartphone 2003 emulartor"是設(shè)備/模擬器名。
19、等待運(yùn)行結(jié)束后,關(guān)閉命令窗口。 6) 進(jìn)入模擬器,打開ActiveSync程序,選擇同步 這時(shí),你能看到你安裝的ActiveSync在任務(wù)欄有了反應(yīng),最終,模擬器上顯示已連接。 結(jié)束 此時(shí),模擬器可以通過以太網(wǎng)接口利用virtual switch服務(wù)連接到ActiveSync上去了。 我們可以把這個(gè)模擬器當(dāng)作一個(gè)真的設(shè)備對(duì)待,可以給它安裝各種軟件,可以給它定義安裝主屏幕等等,對(duì)于開發(fā)來說,我們可以使用ActiveSync的瀏覽功能看到smartphone的目錄結(jié)構(gòu),
20、在開發(fā)涉及到文件改變的程序時(shí)非常有幫助。 一些基本概念 因?yàn)樵谏厦鏀⑹鲋猩婕傲艘恍㏒martphone的基本概念,作為入門的文章,下面,我對(duì)涉及到的一些概念進(jìn)行解釋。 1) Platform Manage 在安裝Microsoft eMbedded C+ 4.0時(shí)候會(huì)提示你首先要安裝Platform
21、160; Manage,這是整個(gè)開發(fā)系統(tǒng)中非常核心的組件,它負(fù)責(zé)開發(fā)工具與實(shí)際的設(shè)備或者模擬的設(shè)備間所有的通訊。正是因?yàn)樗帘瘟诵畔⒔粨Q的細(xì)節(jié),才使得開發(fā)中模擬器可以作為一個(gè)真實(shí)的設(shè)備對(duì)待。 2) ActiveSync Transport與TCP/IP Transport 上面選擇設(shè)備的Transport時(shí)候,有這樣兩種選擇,ActiveSync Transport一般用于與
22、真實(shí)smartphone設(shè)備的連接,而TCP/IP Transport既可以和真實(shí)設(shè)備也可以和模擬設(shè)備進(jìn)行連接,因?yàn)門CP/IP Transport連接速度快且支持模擬設(shè)備,在開發(fā)調(diào)試的時(shí)候是首要選擇。 3) ActiveSync Startup Server與Emulator Startup Serve
23、r 所謂啟動(dòng)服務(wù)就是將編譯好的程序download到所連接的設(shè)備上然后執(zhí)行,ActiveSync Startup Server利用當(dāng)前的ActiveSync連接來進(jìn)行,設(shè)置可以通過ActiveSync程序進(jìn)行;Emulator Startup Server必須使用TCP/IP Transport支持。開發(fā)
24、調(diào)試的時(shí)候,一般選擇Emulator Startup Server。 4) Virtual Radio與Radio Required 在配置Emulator Startup Server時(shí)候,有這兩種Image選擇,其中,Radio Required需要相應(yīng)的無線發(fā)送設(shè)備支持而Virtual Radio則不需要,在最終測(cè)試時(shí)候,往往會(huì)需要Radio &
25、#160; Required,開發(fā)和調(diào)試時(shí)候選擇Virtual Radio。 實(shí)踐開發(fā) 1、開發(fā)實(shí)例準(zhǔn)備 鑒于本篇的定位,本文的例子是一個(gè)很簡(jiǎn)單的程序,運(yùn)行后,程序主窗口會(huì)顯示一行歡迎信息;程序底部會(huì)有兩個(gè)菜單,一個(gè)是"關(guān)于",一個(gè)是"選項(xiàng)","選項(xiàng)"是一個(gè)彈出式菜單,上面有兩個(gè)菜單項(xiàng)"關(guān)于"和"退出"。 執(zhí)行"
26、;關(guān)于"菜單會(huì)顯示一個(gè)標(biāo)準(zhǔn)的信息對(duì)話框;執(zhí)行"退出"菜單,會(huì)首先顯示一個(gè)消息提示窗口,提醒你是否確認(rèn)要退出,你可以選擇"確定"退出本程序,也可以選擇"取消"返回到程序的主界面。 下面是軟件執(zhí)行時(shí)的情況: 2、第一步:建立通用框架 因?yàn)镾martphone不支持MFC,因此,我們需要建立一個(gè)基于Windows CE API的編程框架,有過桌面開發(fā)或者Pocket
27、160; PC開發(fā)經(jīng)驗(yàn)的人會(huì)很清楚這個(gè)過程,包括注冊(cè)窗口類、實(shí)例初始化、消息循環(huán)及窗口過程回調(diào)處理等,在Smartphone上也是一樣的。 1) 打開eMbedded C+ 4.0 ,F(xiàn)ile -> New ,建立一個(gè)Smartphone 2003 工程: 注意,選擇了WCE ARMV4 和WCE emulator 使我們可以編譯在模擬器和真實(shí)設(shè)備運(yùn)行的程序。 點(diǎn)擊OK按鈕進(jìn)入下一步。 2) 選擇建立一個(gè)空的工程。 確認(rèn)后此
28、工程被建立。 這里之所以不使用系統(tǒng)的標(biāo)準(zhǔn)框架是因?yàn)闃?biāo)準(zhǔn)框架采用的是老式的消息處理方案,使用了很多的switch 語句來處理消息,不夠靈活,也不方便程序的擴(kuò)展,因此,這里從一個(gè)空的工程開始,仿照MFC消息映射的做法來構(gòu)建一個(gè)結(jié)構(gòu)良好,代碼優(yōu)美的框架,作為我們開發(fā)smartphone程序的基礎(chǔ)。 3、選擇File->New新建一個(gè)C+源文件First.cpp和C+頭文件First.h,并同時(shí)加入First工程
29、。 4、編寫文件First.h和First.cpp如下,文件很短,關(guān)鍵的地方已經(jīng)使用紅色標(biāo)注出來了,如果你有興趣,可手工敲入下面的代碼,以加深你對(duì)這個(gè)基本過程的了解。 /= / first.h 文件 / 避免頭文件的重復(fù)包含 #ifndef _CHUYUNFENG_FIRST_H_ #define _CHUYUNFENG_FIRST_H_ / 計(jì)算需要處理的消息數(shù)目 #define MSG_NUM
30、(x) (sizeof(x) / sizeof(x0) / 整個(gè)程序的消息映射結(jié)構(gòu) typedef struct tagMSG_MAP_MAIN UINT nMsg; LRESULT (*pMsgProcess)(HWND, UINT, WPARAM, LPARAM); MSG_MAP_MAIN_S; / 命令消息(WM_COMMAND)的消息映射結(jié)構(gòu),因?yàn)閮烧咛幚砗瘮?shù) / 的參數(shù)不同,調(diào)用場(chǎng)合也
31、不同,因此這里需要單獨(dú)建立,類似的有 / WM_NOTOFY消息,本程序中不涉及 typedef struct tagMSG_MAP_CMD UINT nMsg; LRESULT (*pMsgProcess)(HWND, WORD, HWND, WORD); MSG_MAP_CMD_S; / 聲明程序中用到的全局變量 extern const TCHAR g_szAppName;
32、0; extern HINSTANCE g_hInstance; extern HWND g_hMainWnd; extern const MSG_MAP_MAIN_S g_mainMsg; extern const MSG_MAP_CMD_S g_cmdMsg; / 窗口處理函數(shù)原型 LRESULT CALLBACK mainWndProc(HWND, UINT, WPARAM, LPARAM); / 需要處理的主框架消息定義函數(shù)
33、160; LRESULT onCreate(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); LRESULT onPaint(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); LRESULT onCommand(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); LRESULT on
34、Destroy(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); / 需要處理的菜單命令消息定義函數(shù) LRESULT onAbout(HWND hWnd, WORD idItem, HWND hwndCtl,WORD wNotifyCode); LRESULT onExit(HWND hWnd, WORD idItem, HWND hwndCtl,WORD wNotifyCode);
35、160; #endif /_CHUYUNFENG_FIRST_H_ /= / First.cpp 文件 #include <windows.h> #include <windowsx.h> #include <aygshell.h> #include "resource.h" #include "First.h"
36、0; / 定義程序中用到的全局變量 const TCHAR g_szAppName = _T("First"); HINSTANCE g_hInstance; HWND g_hMainWnd; / 程序中需要處理的消息映射,如果要增加,在此處增加一 / 對(duì)msgID,onMsgProcFun,然后寫對(duì)應(yīng)的消息處理函數(shù)即可。 const MSG_MAP_MAIN_S g_mainMsg =
37、60; WM_PAINT, onPaint, WM_COMMAND, onCommand, WM_CREATE, onCreate, WM_DESTROY, onDestroy ; /此處放置需要處理的命令消息 const MSG_MAP_CMD_S g_cmdMsg = IDM_ABOUT, onAbout, IDM_EXIT,onExit ; &
38、#160; /= / WinMain,入口函數(shù),由操作系統(tǒng)調(diào)用 /= int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) WNDCLASS wc; MSG msg; / 注冊(cè)窗口類 wc.sty
39、le = 0; / 窗口樣式 wc.lpfnWndProc = mainWndProc; / 回調(diào)函數(shù) wc.cbClsExtra = 0; / 擴(kuò)展的類數(shù)據(jù) wc.cbWndExtra = 0; / 擴(kuò)展的窗口數(shù)據(jù) wc.hInstance = hInstance; /實(shí)例句柄 wc.hIcon = NULL, / 圖標(biāo) wc.hCursor = NULL; / 鼠標(biāo) wc.hbrBackground = (HBRUSH) G
40、etStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; /菜單 wc.lpszClassName = g_szAppName; /窗口類的名字 if ( 0 = RegisterClass (&wc) return 0; /注冊(cè)窗口類失敗 / 建立并顯示程序主窗口 g_hInstance = hInstance; g_hMainWnd = CreateWindow (
41、g_szAppName, / 窗口類 _T("第一個(gè)演示程序"), /窗口標(biāo)題 WS_VISIBLE, /樣式 CW_USEDEFAULT, / x坐標(biāo) CW_USEDEFAULT, / y 坐標(biāo) CW_USEDEFAULT, / 初始寬度 CW_USEDEFAULT, / 初始高度 NULL, / 父窗口 NULL, /菜單,必須為NULL,WINCE窗口不支持菜單。
42、160; hInstance, / 實(shí)例 NULL); /建立參數(shù)的指針,用于WM_CRATE消息期間。 if ( !IsWindow (g_hMainWnd) /建立窗口失敗 return 0; ShowWindow (g_hMainWnd, nCmdShow); UpdateWindow (g_hMainWnd); / 消息循環(huán) while (GetMessage (&msg, NULL, 0, 0)
43、160; TranslateMessage (&msg); DispatchMessage (&msg); / WinMain函數(shù)成功則返回退出消息的wParam return msg.wParam; /= / MainWndProc,窗口過程,回調(diào)函數(shù),由操作系統(tǒng)調(diào)用 /= LRESULT CALLBACK mainWnd
44、Proc (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) / 處理我們需要處理的消息 int i; for (i = 0; i < MSG_NUM(g_mainMsg); i+) if (wMsg = g_mainMsgi.nMsg) return (*g_mainMsgi.pMsgProcess)(hWnd, wMsg, wPa
45、ram, lParam); / 有編寫對(duì)應(yīng)的函數(shù)則調(diào)用默認(rèn)的 return DefWindowProc (hWnd, wMsg, wParam, lParam); /= / onCreate,WM_CREATE 消息的處理函數(shù) /= LRESULT onCreate(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
46、60; SHMENUBARINFO mbi; / 初始化menubar結(jié)構(gòu) memset(&mbi, 0, sizeof(SHMENUBARINFO); mbi.cbSize = sizeof(SHMENUBARINFO); / 必須填充 mbi.hwndParent = hWnd; mbi.nToolBarId = IDR_MAIN_MENUBAR; mbi.hInstRes = g_hInsta
47、nce; / 建立menubar控制 if (!SHCreateMenuBar(&mbi) MessageBox (hWnd, _T("建立menubar失敗"), g_szAppName, MB_OK); DestroyWindow(hWnd); / return 0; /=
48、160; / onPaint,WM_PAINT 消息的處理函數(shù) /= LRESULT onPaint(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) PAINTSTRUCT ps; HDC hdc; RECT rtClient; GetClientRect (hWnd, &rtClient); / 開始繪圖&
49、#160; hdc = BeginPaint (hWnd, &ps); / 在屏幕中間寫一句話 DrawText (hdc, _T("Smartphone第一個(gè)程序_"), -1, &rtClient, DT_CENTER | DT_VCENTER | DT_SINGLELINE); / 結(jié)束繪圖 EndPaint (hWnd, &ps); return 0;
50、160; /= / onCommand,WM_COMMAND 消息的處理函數(shù) /= LRESULT onCommand(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) /處理我們需要處理的命令消息 WORD wID, wNotifyCode; HWND hwndCtl; int i;
51、/ 解析出參數(shù) wID = (WORD) LOWORD (wParam); wNotifyCode = (WORD) HIWORD (wParam); hwndCtl = (HWND) lParam; / 尋找消息映射結(jié)構(gòu),調(diào)用對(duì)應(yīng)的消息處理函數(shù) for (i = 0; i < MSG_NUM(g_cmdMsg); i+) if (wID = g_cmdMsgi.nMsg) return (*
52、g_cmdMsgi.pMsgProcess)( hWnd, wID, hwndCtl,wNotifyCode); return 0; /= / onDestroy,WM_DESTROY 消息的處理函數(shù) /= LRESULT onDestroy (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
53、 DestroyWindow(hWnd); return 0; /= / onAbout,菜單消息IDM_ABOUT處理函數(shù) /= LRESULT onAbout(HWND hWnd, WORD idItem, HWND hwndCtl,WORD wNotifyCode) TCHAR szAboutMsg = _T("nnnttFirstnt
54、for smartphone 2003"); MessageBox(hWnd,szAboutMsg,_T("關(guān)于First"),MB_OK); return 0; /= / onExit,菜單消息IDM_Exit處理函數(shù) /= LRESULT onExit(HWND hWnd, WORD idItem, HWND hwndCtl,WORD wN
55、otifyCode) if ( IDOK = MessageBox(hWnd, _T("真的要退出這個(gè)程序?"), _T("退出確認(rèn)"),MB_OKCANCEL | MB_ICONASTERISK) ) PostQuitMessage(0); return 0; 關(guān)鍵代碼分析: 代碼中最關(guān)鍵的地方就是使用消息
56、映射的辦法來處理消息,這主要體現(xiàn)在定義消息映射結(jié)構(gòu)和在窗口處理函數(shù)以及命令消息處理函數(shù)中進(jìn)行消息分發(fā)上面,實(shí)現(xiàn)可以參看代碼中的紅色部分。 5) 在框架上的開發(fā)。 我們構(gòu)建這個(gè)基本框架,是想使用這個(gè)框架進(jìn)行后續(xù)開發(fā)的,上述代碼中的綠色部分標(biāo)示出了增加WM_PAINT消息處理的整個(gè)過程: 1、 在.h文件中聲明消息處理函數(shù); 2、 在.c文件的消息映射結(jié)構(gòu)中增加一個(gè)消息映射對(duì); 3、 然后,在.c文件中實(shí)現(xiàn)此函數(shù)的功能即可。 3、
57、第二步:建立菜單 現(xiàn)在,我們來建立左右軟鍵對(duì)應(yīng)的菜單。 1) 確認(rèn)使用中文資源 因?yàn)橐褂觅Y源,因此,首先確認(rèn)我們項(xiàng)目所使用的是中文資源:選擇菜單項(xiàng) Project ->Settings,設(shè)置資源為中文: 2) 增加resource script文件并修改Evc的一個(gè)bugs 菜單File -> new ->增加一個(gè)resource script文件,名字為first.rc。 當(dāng)你在IDE中打開
58、這個(gè)RC文件時(shí),會(huì)發(fā)現(xiàn)一個(gè)錯(cuò)誤,這是eMbedded C+處理smartphone上的一個(gè)bugs,微軟對(duì)此的修正方案是,提供了一個(gè)newRes.h的文件,你將First.rc中的#include "afxres.h"修改為 #include
59、0; "newRes.h"即可,newRes.h文件你可以自行在程序目錄下建立,下面是newRes.h文件內(nèi)容: #ifndef _NEWRES_H_ #define _NEWRES_H_ #if !defined(UNDER_CE) #define UNDER_CE _WIN32_WCE #endif #if defined(_WIN32_WCE)
60、60; #if !defined(WCEOLE_ENABLE_DIALOGEX) #define DIALOGEX DIALOG DISCARDABLE #endif #include <commctrl.h> #define SHMENUBAR RCDATA #if defined(WIN32_PLATFORM_WFSP) && (_WIN32_WCE >= 300) #include <aygshell.h&
61、gt; #define AFXCE_IDR_SCRATCH_SHMENU 28700 #else #define I_IMAGENONE (-2) #define NOMENU 0xFFFF #define IDS_SHNEW 1 #define IDM_SHAREDNEW 10 #define IDM_SHAREDNEWDEFAULT 11 #endif / _WIN32_WCE_PSPC
62、 #define AFXCE_IDD_SAVEMODIFIEDDLG 28701 #endif / _WIN32_WCE #ifdef RC_INVOKED #ifndef _INC_WINDOWS #define _INC_WINDOWS #include "winuser.h" / extract from windows header #include "winver.h"
63、60; #endif #endif #ifdef IDC_STATIC #undef IDC_STATIC #endif #define IDC_STATIC (-1) #endif /_NEWRES_H_ 3、 增加menubar資源: 類型ID Caption MenubarIDR_MAIN_MENUBAR Left menuIDM
64、_ABOUT關(guān)于 Right menu IDM_OPTION 選項(xiàng) Right menu subitem 1IDM_ABOUT 關(guān)于(和左建菜單是同一個(gè)ID) Right menu subitem 2 IDM_EXIT退出 這是first.rc的內(nèi)容,大家可以看到,與我們桌面windows下的資源腳本文件相差無幾。 / / first.rc , resource script for first. #include &qu
65、ot;resource.h" #define APSTUDIO_READONLY_SYMBOLS / / / Generated from the TEXTINCLUDE 2 resource. / #include "newres.h" / #undef APSTUDIO_READONLY_SYMBOLS / / Chi
66、nese (P.R.C.) resources #if !defined(AFX_RESOURCE_DLL) | defined(AFX_TARG_CHS) #ifdef _WIN32 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #pragma code_page(936) #endif /_WIN32 #ifdef APSTUDIO_INVOKED /
67、160; / / TEXTINCLUDE / 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""rn" "
68、;0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "rn" "0" END #endif / APSTUDIO_INVOKED / / / Menubar / IDR_MAIN_MENUBAR MENU DISCARDAB
69、LE BEGIN MENUITEM "關(guān)于", IDM_ABOUT POPUP "選項(xiàng)" BEGIN MENUITEM "關(guān)于", IDM_ABOUT MENUITEM SEPARATOR MENUITEM "退出", IDM_EXIT END END /
70、0; / / Data / IDR_MAIN_MENUBAR SHMENUBAR DISCARDABLE BEGIN IDR_MAIN_MENUBAR, 2, I_IMAGENONE, IDM_ABOUT, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE, IDS_MENUITEM40002, 0, NOMENU, I_IMAGENONE, IDM_OPTION, TBSTATE
71、_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_MENUITEM40007, 0, 1, END / / / String Table / STRINGTABLE DISCARDABLE BEGIN IDS_MENUITEM40002 "關(guān)于" IDS_MENUITEM4000
72、4 "x" IDS_MENUITEM40007 "選項(xiàng)" END #endif / Chinese (P.R.C.) resources / #ifndef APSTUDIO_INVOKED / / / Generated from the TEXTINCLUDE 3 resource. / /
73、160; #endif / not APSTUDIO_INVOKED 4、 在onCreate函數(shù)中建立此菜單 /= / onCreate,WM_CREATE 消息的處理函數(shù) /= LRESULT onCreate(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) SHMENUBARINFO mbi; /
74、初始化menubar結(jié)構(gòu) memset(&mbi, 0, sizeof(SHMENUBARINFO); mbi.cbSize = sizeof(SHMENUBARINFO); / 必須填充 mbi.hwndParent = hWnd; mbi.nToolBarId = IDR_MAIN_MENUBAR; mbi.hInstRes = g_hInstance; / 建立menubar if (!SHCreateMe
75、nuBar(&mbi) MessageBox (hWnd, _T("建立menubar失敗"), g_szAppName, MB_OK); DestroyWindow(hWnd); / 確定menubar的位置,這些語句是可選的 RECT rect, rectDesk; int cx, cy; GetWindowRect (mbi.hwndMB, &rect);&
76、#160; GetWindowRect (GetDesktopWindow (), &rectDesk); cx = rectDesk.right-rectDesk.left; cy = (rectDesk.bottom - rectDesk.top) - (rect.bottom - rect.top); SetWindowPos (hWnd, NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER); return 0; 4、第三步:實(shí)現(xiàn)菜單功能 1) 實(shí)現(xiàn) "退出"菜單項(xiàng)的功能 步驟如下: ·在fir
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 古建門樓租賃合同
- 分項(xiàng)工程勞務(wù)分包合同
- 基坑噴錨支護(hù)勞務(wù)分包合同
- 建實(shí)務(wù)招標(biāo)與合同管理知識(shí)點(diǎn)
- 私人教練健身指導(dǎo)服務(wù)合同與免責(zé)條款
- 產(chǎn)品銷售服務(wù)合同
- 個(gè)人林地承包合同
- 北京平安普惠合同
- 石子黃沙購銷合同
- 《第14課 循環(huán)結(jié)構(gòu)(二)》教學(xué)設(shè)計(jì)教學(xué)反思-2023-2024學(xué)年小學(xué)信息技術(shù)浙教版23五年級(jí)下冊(cè)
- 中華民族共同體的歷史、現(xiàn)實(shí)與未來
- 魯科版小學(xué)四年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)教案(適合山東科學(xué)技術(shù)版教材)
- 新漢語水平考試(HSK6級(jí))真題
- TSDLPA 0001-2024 研究型病房建設(shè)和配置標(biāo)準(zhǔn)
- 2025年安徽省合肥市中考數(shù)學(xué)模擬試卷(附答案解析)
- 2025屆高考語文復(fù)習(xí):補(bǔ)寫語句+課件
- Siemens WinCC:WinCC趨勢(shì)圖與歷史數(shù)據(jù)技術(shù)教程.Tex.header
- 保護(hù)和傳承中國傳統(tǒng)文化遺產(chǎn)閱讀題答案
- 人教版生物八年級(jí)下冊(cè)全冊(cè)教學(xué)課件
- 四川省高職單招汽車類《汽車文化》復(fù)習(xí)備考試題庫(濃縮500題)
- 養(yǎng)牛購料購銷合同范本
評(píng)論
0/150
提交評(píng)論