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 应用程序如何工作的做一个快速浏览是必要的。