【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
!
還有(原始碼,零基礎教程,專案實戰教學視訊)!