天天看點

windows程式設計一 最簡單的windows程式

這裡所指的windows程式是傳統的win32應用程式,使用windows API編寫.首先,先來看一個簡單的例子:

#include<Windows.h>
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
    MessageBox(NULL, L"Visual C++", L"視窗消息", );
    return ;
}
           

這是一個最簡單的windows程式,顯示一個消息視窗

windows程式設計一 最簡單的windows程式

仔細看看,大家會發現這裡有一個似曾相識的函數WinMain(),是不是和初學C++時的入口函數main()很相似呢。大家不難猜出它的作用,WinMain函數是wndows程式的入口函數,是所有windows程式的核心。

WinMain前的WINAPI是一個宏定義,檢視定義:

windows程式設計一 最簡單的windows程式

可以發現WINAPI其實就是__stdcall,__stdcall表示的是一種調用的約定,使編譯器以windows相容的方式來産生機器指令。此外,我們在圖中可以看到CALLBACK,APIPRIVATE等具有和WINAPI相同的宏定義,是以,可以使用它們代替WINAPI。

WinMain函數的參數中都用一個_In字段,表示的是需要我們自行輸入參數,可以了解為宏。

第一個參數hInstance,h表示的是handle即句柄,句柄是個什麼東西呢?大家把它看作是程式的唯一辨別就好了。就像我們有時候去超市,當我們存東西到儲物櫃時,儲物櫃會給我們一個号碼,用來區分不同使用者的存儲資訊。Instance是執行個體的意思,合起來就是執行個體句柄,hInstance就是一個數值,當一個程式在windows下運作時,它對應唯一一個運作執行個體。隻有運作中的執行個體才能配置設定到執行個體句柄,一個程式可以運作多個執行個體,每個運作執行個體都可以配置設定到句柄。

第二個參數hPreInstance也是執行個體句柄,但表示的是目前執行個體的上一個執行個體的執行個體句柄。win32環境下,該參數總為null。不起任何作用,但書寫代碼時還是要寫出來。

第三個參數LpCmdLine,它是LPSTR類型,LP表示指針,STR明顯示字元串,LPSTR就是字元串指針,cmdLine表示指令行 LpCmdLine表示的一個以空終止的字元串,指定傳遞給程式的指令行參數。實際上是指令行字元串的起始位址。

第四個參數nShowCmd指的是視窗應該如何顯示,是最大化,最小化還是隐藏等。

接下來簡單介紹一下MessageBox函數,首先還是檢視定義:

windows程式設計一 最簡單的windows程式

MessageBox函數有兩種形式,這裡隻講第一種。

In_opt :opt為option即可選,In_opt即為可選輸入參數,當我們不想填任何資訊時可以填NULL,

第一個參數hWnd表示父視窗的句柄,即消息框所屬視窗,當沒有父視窗時設為NULL.

第二個參數LPCSTR類型的lpText,表示一個以空結尾的字元串,消息框要顯示的消息。實際上是字元串的起始位址。

第三個參數LPCSTR類型lpCaption,表示一個以空結尾的字元串,消息框的标題。實際上是字元串的起始位址。

第四個參數UINT類型的uType,表示是視窗的樣式和顯示圖示的類型。

繼續閱讀