1. 程式人生 > 實用技巧 >【C語言/C++程式設計學習筆記】你的第一個Windows程式!高階操作~

【C語言/C++程式設計學習筆記】你的第一個Windows程式!高階操作~

什麼是windows程式設計?瞭解到Windows API 程式設計、Windows程式設計、Windows SDK 程式設計是一個概念。今天我們運用C語言來實現你的第一個真正的Windows程式。

windows.h 標頭檔案介紹:

編寫Windows程式,首先要包含 windows.h 標頭檔案。windows.h 還包含了其他一些Windows標頭檔案,例如:

● windef.h:基本型別定義

● winbase.h:核心函式

●wingdi.h:使用者介面函式

●winuser.h: 圖形裝置介面函式

這些標頭檔案定義了Windows的所有資料型別、函式原型、資料結構和符號常量,也就是說,所有的Windows API都在這些標頭檔案中宣告。

在C語言中,程式都是“黑屏”的,稱為控制檯程式(Console Application)。這套教程要講的是帶介面的Windows程式(Windows Application),也稱為GUI程式(GUI Application)。

控制檯程式以 main() 為入口函式,Windows程式以 WinMain() 為入口函式,動態連結庫(DLL)以 DllMain() 為入口函式,不同的入口函式決定了不同型別的程式。

WinMain() 函式的原型為:

int WINAPI WinMain(

HINSTANCE hInstance,   // 當前視窗控制代碼

HINSTANCE hPrevInstance,   
// 前一個視窗控制代碼,Win32下為NULL(Win16留下的廢物,目前已棄用) LPSTR lpCmdLine, // 命令列引數 int nCmdShow // 視窗顯示方式 );

先不要急於理解這些引數的含義,我先給大家寫一個簡單的不帶黑屏的、真正的Windows程式:

#include

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

){

// 呼叫API 函式MessageBox

int nSelect = MessageBox(NULL, TEXT(""
), TEXT(), MB_OKCANCEL); if(nSelect == IDOK){ MessageBox(NULL, TEXT("你點選了“確定”按鈕"), TEXT("提示"), MB_OK); }else { MessageBox(NULL, TEXT("你點選了“取消”按鈕"), TEXT("提示"), MB_OK); } return 0; }

執行結果:


點選“確定”或“取消”按鈕,又會彈出一個新的提示框。大家可以親自執行一下,會有真實的體驗。

原來沒有main()函式,沒有#include 的C語言程式也是可以執行的!

MessageBox() 函式是眾多API中的一個,用於彈出一個指定風格的對話方塊,其原型為:

int WINAPI MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );

WINAPI 為巨集定義

#define WINAPI __stdcall,表示函式呼叫方式,暫時可以不理會,不影響程式碼編寫,只需要知道MessageBox()返回值為 int,表示按下的按鈕。

引數說明:

hWnd:該訊息框的父視窗控制代碼,如果此引數為NULL,則該訊息框沒有擁有父視窗。大家不用急於理解這個引數,後續會詳細講解。

lpText:訊息框的內容。LPCTSTR 是自定義資料型別,等價於 const char *。

lpCaption:訊息框的標題。

uType:對話方塊的按鈕樣式和圖示。

uType支援的按鈕樣式:


這些按鈕都是巨集定義:

#define MB_OK 0x00000000L

#define MB_OKCANCEL 0x00000001L

#define MB_ABORTRETRYIGNORE 0x00000002L

#define MB_YESNOCANCEL 0x00000003L

#define MB_YESNO 0x00000004L

#define MB_RETRYCANCEL 0x00000005L

你也可以嘗試用數字來表示按鈕,例如:

MessageBox(NULL, TEXT("你好,世界!");

也會生成與上面相同的對話方塊。

除了按鈕,uType 還支援圖示(圖示對使用者有提醒作用):


這些圖示也都是巨集定義:

#define MB_ICONHAND 0x00000010L

#define MB_ICONQUESTION 0x00000020L

#define MB_ICONEXCLAMATION 0x00000030L

#define MB_ICONASTERISK 0x00000040L

如果希望同時定義按鈕和圖示的樣式,可以使用或運算|,例如:

MessageBox(

NULL,

TEXT(!"),

TEXT(""),

MB_OKCANCEL | MB_ICONINFORMATION

);

把上面的MessageBox換成這個就ok了。執行結果:

與上面的對話方塊相比,多出了一個圖示,同時還能聽到提示音。是不是多了一個提示符號在文字的前面啊。

再看來一下MessageBox() 的返回值。

MessageBox() 返回被按下的按鈕,以數字表示,這些數字都被定義成了巨集,如下所示:


對應的巨集定義為:

#define IDOK 1

#define IDCANCEL 2

#define IDABORT 3

#define IDRETRY 4

#define IDIGNORE 5

#define IDYES 6

#define IDNO 7


總結:

對於剛剛學完C語言的,學windows程式設計的,這些都是滿滿的乾貨。

一定要記住喔,從你學windows程式設計開始,你就已經告別了難看的windows do介面,只要一步一步走,寫一個漂亮的window程式不在話下。這些都是以後學習必須掌握的,先收藏吧!

自學C/C++不易,此路應攜手前行。

可關注我的程式設計公眾號【草莓味狸貓】

如果你想跟著小編一起學程式設計的話!

可以來我的C語言C++程式設計學習聖地

#define IDOK 1

#define IDCANCEL 2

#define IDABORT 3

#define IDRETRY 4

#define IDIGNORE 5

#define IDYES 6

#define IDNO 7

還有(原始碼,零基礎教程,專案實戰教學視訊)!