Hello2
既然已经有了基础,那么是时候把Hello1升级一下,至少应该让人可以看见它。因为很多Windows CE系统没有控制台驱动程序,Hello2创建一个消息框而不是用printf来显示“Hello CE”文字。Hello2的程序如下表1-2所示:
列表1-2: Hello2, 使用MessageBox函数的简单应用程序
Hello2.cpp
//======================================================================
// Hello2 - 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) {
MessageBox (NULL, TEXT ("Hello World"), TEXT ("Hello2"), MB_OK);
return 0;
}
编译并运行Hello2,可以看到如图1-2所示的小窗口。
图1-2(略)
运行在Windows CE桌面的Hello2
替代printf的MessageBox函数为Hello2提供了2个特性。第一个也是最明显的一个就是它创建一个窗口,并在上面显示"Hello World"文本。第二个特性是MessageBox函数直到用户关闭消息窗口才会返回。这允许Hello2一直保持运行,直到用户关闭窗口。
MessageBox函数原型如下:
int MessageBox (HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
第1个参数是顶层窗口的句柄,它是消息窗口的父窗口。目前我们把这个参数置为NULL,因为Hello2还没有任何其它窗口。第2个参数是准备显示在窗口里的文字。注意传入的字符串是用TEXT宏包裹的,确保它能够编译成Unicode版本。第3个参数lpCaption是显示在窗口标题栏的文字。最后一个参数uType是一系列标志位,规定消息框如何显示在屏幕上。标志位规定了消息框中按扭的数量和类型,规定了图标的类型以及消息框窗口的风格设置。
表1-2列出了Windows CE下有效的标志位
表1-2: 默认标志位
标志位
按钮或者图标
用于按钮
MB_OK
OK
MB_OKCANCEL
OK and Cancel
MB_RETRYCANCEL
Retry and Cancel
MB_YESNO
Yes and No
MB_YESNOCANCEL
Yes, No, and Cancel
MB_ABORTRETRYIGNORE
Abort, Retry, and Ignore
用于图标
MB_ICONEXCLAMATION, MB_ICONWARNING
Exclamation point
MB_ICONINFORMATION, MB_ICONASTERISK
Lower case i within a circle
MB_ICONQUESTION
Question mark
MB_YESNO
Yes and No
MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND
Stop sign
MB_DEFBUTTON1
First button
MB_DEFBUTTON2
Second button
MB_DEFBUTTON3
Third button
For Window Styles:
MB_SETFOREGROUND
Bring the message box to the foreground.
MB_TOPMOST
Make the message box the topmost window.
MessageBox的返回值指出用户按了哪个按扭。返回值如下:
IDOK
OK button pressed
IDYES
Yes button pressed
IDNO
No button pressed
IDCANCEL
Cancel button pressed or Esc key pressed
IDABORT
Abort button pressed
IDRETRY
Retry button pressed
IDIGNORE
Ignore button pressed
此时值得注意的是,如果你调试和重新编译这个程序,它不会被再次下载到目标设备上的,因为程序早先的版本仍然正在目标系统上运行。换句话说,当您在eVC++中启动一个新的build时,您要确保Hello2没有运行在远程系统上,否则编译过程里的自动下载过程就会失败。如果发生这种情况,关闭应用程序,选择eVC++里[Update Remote File]菜单命令去下载新的编译后的文件。
Hello2展示了一个简单的窗口,但窗口只能按MessageBox函数允许的形式进行配置。如何显示一个完全由程序配置的窗口呢?在我们这样做之前,对Windows 应用程序如何工作的做一个快速浏览是必要的。