(控制臺(tái)程序以 main() 為入口函數(shù)Windows程序以 WinMain() 為入口函數(shù)動(dòng)態(tài)鏈接庫(kù)(DLL)以 DllMain() 為入口函數(shù)) (在C語(yǔ)言中程序都是黑屏的稱為控制臺(tái)程序(Console Application)這套教程要講的是帶界面的Windows程序(Windows Application)GUI程序(GUI Application)) 編寫Windows程序,首先要包含 windows.h 頭文件。windows.h 還包含了其他一些Windows頭文件,例如:
這些頭文件定義了Windows的所有數(shù)據(jù)類型、函數(shù)原型、數(shù)據(jù)結(jié)構(gòu)和符號(hào)常量,也就是說(shuō),所有的Windows API都在這些頭文件中聲明。 在C語(yǔ)言中,程序都是“黑屏”的,稱為控制臺(tái)程序(Console Application)。這套教程要講的是帶界面的Windows程序(Windows Application),也稱為GUI程序(GUI Application)。 控制臺(tái)程序以 main() 為入口函數(shù),Windows程序以 WinMain() 為入口函數(shù),動(dòng)態(tài)鏈接庫(kù)(DLL)以 DllMain() 為入口函數(shù)(請(qǐng)查看 動(dòng)態(tài)鏈接庫(kù)DLL教程),不同的入口函數(shù)決定了不同類型的程序。 WinMain() 函數(shù)的原型為: int WINAPI WinMain(HINSTANCE hInstance, // 當(dāng)前窗口句柄HINSTANCE hPrevInstance, // 前一個(gè)窗口句柄,Win32下為NULL(Win16留下的廢物,目前已棄用)LPSTR lpCmdLine, // 命令行參數(shù)int nCmdShow // 窗口顯示方式); #include <windows.h>int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// 調(diào)用API 函數(shù)MessageBoxint nSelect = MessageBox(NULL, TEXT("你好,歡迎來(lái)到C語(yǔ)言中文網(wǎng)!"), TEXT("Welcome"), MB_OKCANCEL);if(nSelect == IDOK){MessageBox(NULL, TEXT("你點(diǎn)擊了“確定”按鈕"), TEXT("提示"), MB_OK);}else{MessageBox(NULL, TEXT("你點(diǎn)擊了“取消”按鈕"), TEXT("提示"), MB_OK);}return 0;} 點(diǎn)擊“確定”或“取消”按鈕,又會(huì)彈出一個(gè)新的提示框。大家可以親自運(yùn)行一下,會(huì)有真實(shí)的體驗(yàn)。 原來(lái)沒(méi)有 main() 函數(shù),沒(méi)有#include <stdio.h> 的C語(yǔ)言程序也是可以運(yùn)行的!MessageBox() 函數(shù)是眾多API中的一個(gè),用于彈出一個(gè)指定風(fēng)格的對(duì)話框,其原型為: int WINAPI MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );WINAPI 為宏定義 #define WINAPI __stdcall ,表示函數(shù)調(diào)用方式,暫時(shí)可以不理會(huì),不影響代碼編寫,只需要知道MessageBox()返回值為 int,表示按下的按鈕。有興趣的讀者可以查看:__stdcall,__cdecl,__pascal,__fastcall的區(qū)別參數(shù)說(shuō)明:
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("你好,歡迎來(lái)到C語(yǔ)言中文網(wǎng)!"), TEXT("Welcome"), 1);也會(huì)生成與上面相同的對(duì)話框。 除了按鈕,uType 還支持圖標(biāo)(圖標(biāo)對(duì)用戶有提醒作用):
這些圖標(biāo)也都是宏定義: #define MB_ICONHAND 0x00000010L#define MB_ICONQUESTION 0x00000020L#define MB_ICONEXCLAMATION 0x00000030L#define MB_ICONASTERISK 0x00000040L 如果希望同時(shí)定義按鈕和圖標(biāo)的樣式,可以使用或運(yùn)算 | ,例如:MessageBox(NULL,TEXT("你好,歡迎來(lái)到C語(yǔ)言中文網(wǎng)!"),TEXT("Welcome"),MB_OKCANCEL | MB_ICONINFORMATION); 與上面的對(duì)話框相比,多出了一個(gè)圖標(biāo),同時(shí)還能聽(tīng)到提示音(Win7 有,XP 和 Win8 讀者可以親自測(cè)試)。 大家有沒(méi)有發(fā)現(xiàn),按鈕都是用十六進(jìn)制的第1位(二進(jìn)制前4位)來(lái)表示,圖標(biāo)都是使用十六進(jìn)制第2位(二進(jìn)制第5~8位)來(lái)表示,進(jìn)行或運(yùn)算,每個(gè)位都不會(huì)改變,如下圖所示: Windows 通過(guò)檢測(cè)第1位的值來(lái)確定按鈕的樣式,檢測(cè)第2位的值來(lái)確定圖標(biāo)樣式。 再看來(lái)一下MessageBox() 的返回值。 MessageBox() 返回被按下的按鈕,以數(shù)字表示,這些數(shù)字都被定義成了宏,如下所示:
對(duì)應(yīng)的宏定義為: (在C語(yǔ)言中程序都是黑屏的稱為控制臺(tái)程序(Console Application)這套教程要講的是帶界面的Windows程序(Windows Application)GUI程序(GUI Application)) (控制臺(tái)程序以 main() 為入口函數(shù)Windows程序以 WinMain() 為入口函數(shù)動(dòng)態(tài)鏈接庫(kù)(DLL)以 DllMain() 為入口函數(shù)) |
|