Windows 程式設計學習筆記1

來源:互聯網
上載者:User
/*------------------------------------------------------------------HelloMsg.c -- Displays "Hello, Windows 98!" in a message box(c) Charles Petzold, 1998--------------------------------------------------------------------*/#include <windows.h>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,            PSTR szCmdLine, int iCmdShow){  MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);  return 0 ;}

幾乎每一個使用C/C++編寫的Windows程式在開頭都會使用include引入"windows.h"標頭檔,WINDOWS.H是主要的含入檔案,
它包含了其它Windows表標頭檔,這些表標頭檔的某些也包含了其它表標頭檔.這些表標頭檔中最重要的和最基本的是:

WINDEF.H 基本型態定義。
WINNT.H 支援Unicode的型態定義。
WINBASE.H Kernel函數。
WINUSER.H 使用者介面函數。
WINGDI.H 圖形裝置介面函數。
  
這些表標頭檔定義了Windows的所有資料型態、函數呼叫、資料結構和常數標識符,它們是Windows檔案中的一個重要部分.
每一個C/C++程式都有一個程式入口(main函數),Windows程式的也有進入點:WinMain,該函數總是像這樣出現:

int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance,            PSTR szCmdLine,int iCmdShow)

WinMain在WINBASE.H中有如下聲明:

intWINAPIWinMain(      HINSTANCE hInstance,      HINSTANCE hPrevInstance,      LPSTR lpCmdLine,      int nShowCmd      );

其中第三個參數在WINBASE.H中定義為LPSTR,樣本中為PSTR.這兩種資料型態都定義在WINNT.H中,作為指向字串的指標.LP首碼代表「長指標」,這是16位Windows下的寫法.


WinMain函式宣告為返回一個int值.WINAPI標識符在WINDEF.H定義,語句如下:

#define WINAPI __stdcall

該語句指定了一個呼叫約定,包括如何生產機械碼以在堆棧中放置函數呼叫的參數.許多Windows函數呼叫聲明為WINAPI.

WinMain的第1個參數被稱作「執行實體控制代碼」.在Windows程式設計中,控制代碼僅是一個應用程式用來識別某些東西的數字.在這種情況下,該控制代碼唯一地標識該程式,還需要它在其它Windows函數呼叫中作為參數.
在Windows的早期版本中,當同時運行同一程式多次時,便建立了該程式的「多個執行實體(multiple instances)」.同一應用程式的所有執行實體共用程式和唯讀記憶體(通常是例如菜單和對話方塊模板的資源).程式通過檢查hPrevInstance參數就能夠確定自身的其它執行實體是否正在運行,然後它可以略過一些繁雜的工作並從前面的執行實體將某些資料移到自己的資料區域,在32位Windows版本中,該概念已被拋棄,故傳給WinMain的第2個參數總是NULL(定義為0).
WinMain的第3個參數是用於執行程式的命令列,如某些Windows應用程式利用它在程式啟動時將檔案載入記憶體.
WinMain的第4個參數指出程式最初顯示的方式,可以是正常的或者是最大化地充滿整個畫面,或者是最小化顯示在工作列中.

MessageBox函數用於顯示簡訊息,雖然,MessageBox顯示的小視窗不具有什麼功能,實際上被認為是一個對話方塊.
MessageBox的第1個參數通常是視窗控制代碼.
第2個參數是在訊息框主體中顯示的字串.
第3個參數是出現在訊息框標題列上的字串,在樣本程式中,這些文字字串的每一個都被封裝在一個TEXT宏中.

MessageBox的第4個參數用於在對話方塊中顯示按鈕,它可以是在WINUSER.H中定義的一組以首碼MB_開始的常數的組合,有以下內容:

#define     MB_OK                           0x00000000L#define     MB_OKCANCEL                     0x00000001L#define     MB_ABORTRETRYIGNORE             0x00000002L#define     MB_YESNOCANCEL                  0x00000003L#define     MB_YESNO                        0x00000004L#define     MB_RETRYCANCEL                  0x00000005L

如果在樣本程式中將第4個參數設定為0,則僅顯示「OK」按鈕.可以使用OR(|)操作符號將上面顯示的一個常數與代表內定按鈕的常數組合:

#define   MB_DEFBUTTON1             0x00000000L#define   MB_DEFBUTTON2             0x00000100L#define   MB_DEFBUTTON3             0x00000200L#define   MB_DEFBUTTON4             0x00000300L

還可以使用一個常數指出訊息框中圖示的外觀:

#define   MB_ICONHAND             0x00000010L#define   MB_ICONQUESTION           0x00000020L#define   MB_ICONEXCLAMATION               0x00000030L#define   MB_ICONASTERISK           0x00000040L

這些圖示中的某些有替代名稱:

#define   MB_ICONWARNING         MB_ICONEXCLAMATION#define   MB_ICONERROR          MB_ICONHAND#define   MB_ICONINFORMATION        MB_ICONASTERISK#define   MB_ICONSTOP           MB_ICONHAND

在樣本程式中,MessageBox返回數值1,但更嚴格地說它返回IDOK,IDOK在WINUSER.H中定義,等於1。根據在訊息框中顯示的其它按鈕,MessageBox函數還可返回IDYES、IDNO、IDCANCEL、IDABORT、
IDRETRY或IDIGNORE。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.