學習windows programming這麼久,也做過一些小的程序。但是總感覺到自己沒有經過系統的學習,要用到什麼才學什麼。這樣雖然解決了問題,自己的知識還是雜亂的。從現在開始,我把自己放在0的位置,重新學習,期望能對Windows編程有系統的認識。
還是從最簡單的開始,“Hello, Windows XP”。
#include <Windows.h>
int WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,
LPSTR lpCmdLine, int nShowCmd)
...{
MessageBox(NULL, TEXT("Hello, Windows XP!"), TEXT("go"), MB_OK);
return 0;
}
#define WINAPI __stdcall
Windows程序的入口函數已經不是原來的main了,應該是WinMain。在前面加上WINAPI只是函數調用習慣的問題(calling convention)。如果不加就會彈出一條警告。
: warning C4007: ''WinMain'' : must be ''__stdcall''
WinMain的第一個參數hInstance是一個實例句柄。在Windows編程中,句柄就是用來對某個對象進行唯一標識的數字。注意這裡所說的對象可不是面向對象裡談到的對象哦。在這裡,hInstance 就是唯一標識程序對象的。第二個參數hPreInstance也是一個實例句柄。它是win16時期遺留下來的產物,在win32中都是NULL。第三個參數lpCmdLine是在命令行裡啟動程序時用來傳遞參數的。最後一個是nShowCmd,它指示了程序啟動時窗口的狀態。例如:最大化。
函數體中掉用了MessageBox。掉用該函數會彈出一個窗口。這也是Windows編程中最簡單,也是最直接顯示窗口的方式。在參數中,沒個字符串都被包含在一個TEXT宏中,主要是考慮到UNICODE的問題。