第一个Windows CE程序
说了这么多,就让我们一起看一下你的第一个Windows CE程序吧。列表1-1显示了Hello1--为Windows CE写的一个简单的Hello World应用程序。 Listing 1-1: Hello1, 一个简单的Windows应用程序
Hello1.cpp
//======================================================================
// Hello1 - A simple application for Windows CE
//
// Written for the book Programming Windows CE
// Copyright (C) 2003 Douglas Boling
//======================================================================
#include "windows.h"
//
// Program entry point
//
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPWSTR lpCmdLine, int nCmdShow) {
printf ("Hello World\n");
return 0;
}
如您所见,除了程序入口点外,代码看上去十分类似经典的Kernighan和Ritchie版程序。在注释之后,有一行代码
#include "windows.h"
这个文件包含了一组文件,它们中定义了Windows API及其用到的结构和常量。
程序的入口点是本程序和标准C程序之间最大的差别。作为C标准入口
int main (char **argv, int argc)
的替代品,Windows CE通过标准Windows入口点[注1]
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPWSTR lpCmdLine, int nCmdShow);
构建程序环境。
Windows CE在一些方面不同于桌面版的Windows。第1个参数,hInstance为其它应用程序指明具程序实例,也为需要验证这个EXE的Windows API函数提供了程序实例。参数hPrevInstance是从旧的Win16 API(Windows 3.1及更早的系统)遗留下来的。包括Windows CE在内的所有Win32 操作系统中,hPrevInstance 始终是0,可以忽略掉。
参数lpCmdLine指向一个Unicode字符串,包含了命令行文本。从微软Windows CE浏览器启动的应用程序没有命令行参数,但在某些情况下,例如当系统自动启动一个程序时,系统包含一个命令行参数来说明程序为什么被启动。参数lpCmdLine 是Windows CE与XP出现差异的情况之一,在Windows CE里,命令行字符串是Unicode字符串,在其它版本的Windows 里,命令行字符串总是ASCII的。
最后一个参数,nCmdShow,指明了程序主窗口的初始状态。由父进程,通常是浏览器传递这个参数到程序里。它对应用程序如何配置主窗口给出了说明。该参数可能会规定窗口最初显示成图标(SW_SHOWMINIMIZE),或者显示最大化(SW_SHOWMAXIMIZED)来覆盖整个桌面,或者显示为普通(SW_RESTORE)大小来表明窗口按标准可变大小方式显示在屏幕上。其它值规定窗口初始状态对用户不可见,或者规定窗口可见但不能成为活动窗口。在Windows CE里,这个参数的值被限制成3个状态:普通(SW_SHOW)、隐藏(SW_HIDE)和非激活显示(SW_SHOWNOACTIVATE)。除非应用程序需要强制它的窗口预先确定状态,在程序主窗口被创建后,这个值是不加修改,只是简单的传递给ShowWindow函数的。
下一行是这个应用程序唯一的功能行:
printf ("Hello World\n");
Windows CE支持大部分标准C库,包括printf,getchar等等。这一行有趣的地方在于它不像Windows CE其它任何地方,这个串不是Unicode而是ANSI。下面是对这个现象的合理解释:对于用ANSI标准编译的C标准库,printf和诸如strcpy等其它字符串库函数用的是ANSI字符串。当然,Windows CE支持这些标准函数的Unicode版,例如 wprintf, getwchar,和 wcscpy。
最后,用return 0;结束程序。
其它进程可以用Win32 API函数GetExitCodeProcess获取返回值。 构建第一个应用程序
要在你的系统上从头创建Hello1,可以启动MS eVC++,在[File]菜单上选择[新建]创建一个新工程。当看到新工程的对话框,可以明显的看到WinCE编程与标准Win32编程的变化。你有机会选择在图1-1中所显示的各种平台。对于非MFC或ATL工程,首选是WCE Pocket PC应用(用于Pocket PC)和WCE应用(用于其它Windows CE系统)。您还可以选择适当的目标CPU。例如,选择Win32(WCE MIPI)来为使用MIPS CPU的Windows CE平台编译程序。无论是何种目标设备,都要确保选择WCE模拟器。这样你就可以在用XP下的模拟器中运行例子程序了。
图1-1 平台列表使eVC++能够面向不同的Windows CE平台。