Win32 程序開發入門:一個最簡單的Win32程序


一、什么是 Win32

Win32 是指 Microsoft Windows 操作系統的 32 位環境,與 Win64 都為 Windows 常見環境。

這里再介紹下 Win32 Application 和 Win32 Console Application 之間的區別:

1、程序不同

  • Win32 Application 是標准 windows 程序,完全擁有 windows 的特性,可以通過鼠標點擊窗口來完成控制。

  • Win32 Console Application 是控制台應用程序,類似於 MS-DOS 窗口,只能運行命令行程序,不具備消息響應機制。

2、入口函數不同

  • Win32 Application 入口函數是 WinMain(),它具有消息響應機制,可以運行圖形化的 C++ 程序。

  • Win32 Console Application 入口函數是 main(),可以訪問部分 windows API 函數,如果你編寫傳統的 C 程序,必須建立 Win32 Console 程序。


二、最簡單的程序

創建一個 win32 應用程序 工程,功能是顯示一個消息框,隨便提示一些文字就可以了。具體的創建工程的步驟可以參考:創建一個最簡單的win32應用程序 。代碼如下:

#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
{
	MessageBox(
		NULL,
		TEXT("隨便提示一些內容就可以了!哈哈哈!"),		// 內容
		TEXT("這里是標題!"),		// 標題名稱
		0);
	return 0;
}

我們再看一下效果:


接下來我們從頭開始剖析這個簡單的小程序。


三、分析一下

3.1 頭文件

#include <Windows.h>

windows.h 是一個最重要的包含文件,它囊括了若干其他 Windows 頭文件,其中的某些頭文件又包含另外的一些頭文件。

下列幾個是最重要也是最基本的頭文件:

  • WINDEF.H 基本數據類型定義。
  • WINNT.H 支持 Unicode的類型定義。
  • WINBASE.H 內核函數。
  • WINUSER.H 用戶界面函數。
  • WINGDI.H 圖形設備接口函數。

這些頭文件定義了 Windows 的所有數據類型、函數調用、數據結構以及常量標識符。


3.2 程序入口

main 是 C 程序的入口,而 Windows 程序的入口是 WinMain,它總是這個樣子的:

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

WinMain 函數的返回值被定義為 int。WINAPI 標識符在 WINDEF.H 中定義,它規定了一種函數調用約定。而我們絕大多數 Windows 函數調用都定義成 WiNAPI。

我們再來研究一下它的參數部分:

  • 第一個參數一般叫做 “實例句柄”(Instance Handle)。在 Windows 程序中,句柄無非就是一個數值,程序里用它來標識某些東西。比如在我們這個例子里,這個句柄就唯一標識了我們的這個程序,代表程序本身。實際上在某些Windows程序中,把句柄當作調用參數是必須的。比如在早期的 Windows 版本中,當多路並發運行同一個程序時,就需要為那個程序創建多個實例。同一程序的所有的實例都共享代碼和只讀存儲。
  • 一個程序可以通過查看 hPrevInstance,也就是第二個參數從而知道是否有它的其他實例正在運行。它也就可以因此跳過某些零散雜務步驟,把一些數據從前一個實例搬到自己的數據區來。但是在 32 位Windows 中,這一概念已不再采用。 因此 WinMain 的第二個參數通常總是 NULL(定義為 0)。
  • WinMain 的第三個參數是用來運行程序的命令行(Command Line)。有些 Windows 程序在啟動時用它來把文件裝入內存。
  • WinMain 的第四個參數用來指明程序最初如何顯示或正常顯示,或最大化到全屏,或最小化顯示在任務欄上。

3.2 MessageBox函數

最后我們看一下最主要的 MessageBox 函數。

MessageBox 函數是用來顯示短信息的。盡管形式比較單一,MessageBox 所顯示的小
小窗口實際上也是一個對話框。

我們也研究一下它的幾個參數:

  • MessageBox的第一個參數通常是一個窗口句柄。我們先不管它。

  • 第二個參數就是將要在信息框里出現的文本字符串。

  • 第三個參數是將要在標題欄上顯示的文本字符串。而且在這個程序中,我們把所有的字符串都打包到 TEXT 宏代碼里面,就是用TEST("XXX")把它包裹起來。一般來說,並不需要把所有的字符串都打包到 TEXT 宏代碼里面,之所以這樣做是因為這樣在把程序轉換成 Unicode 時會方便很多。

  • 第四個參數是以前綴MB_打頭的一些常量的組合。WINUSER.H 中定義了這些相關常量。比如下面的這些,你可以任選一個來表示在對話框里希望用哪種按鈕:

    #define MB_OK                   0X00000000L		// ok
    #define MB_OKCANCEL             0x00000001L		// ok和取消
    #define MB_ABORTRETRYIGNORE     0x00000002L		// 中止、重試和取消
    #define MB_YESNOCANCEL          0x00000003L		// yes/no/取消
    #define MB_YESNO                0X00000004L		// yes和no
    #define MB_RETRYCANCEL          0x00000005L		// 重試和取消
    

參考:

通過一個最簡單的程序入門Windows編程



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM