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 應用程序如何工作的做一個快速瀏覽是必要的。