小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

第一個(gè)真正的Windows程序(在C語(yǔ)言中程序都是黑屏的稱為控制臺(tái)程序(Console Application)這套教程要講的是帶界面的Windows程序(Windows Application)GU

 山峰云繞 2022-07-11 發(fā)布于貴州


   (控制臺(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頭文件,例如:
  • windef.h:基本類型定義

  • winbase.h:內(nèi)核函數(shù)

  • wingdi.h:用戶接口函數(shù)

  • winuser.h: 圖形設(shè)備接口函數(shù)


這些頭文件定義了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  // 窗口顯示方式);
先不要急于理解這些參數(shù)的含義,我先給大家寫一個(gè)簡(jiǎn)單的不帶黑屏的、真正的Windows程序:
#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;}
編譯并運(yùn)行,會(huì)彈出一個(gè)對(duì)話框,如下所示:


點(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ō)明:
  • hWnd:該消息框的父窗口句柄,如果此參數(shù)為NULL,則該消息框沒(méi)有擁有父窗口。大家不用急于理解這個(gè)參數(shù),后續(xù)會(huì)詳細(xì)講解。

  • lpText:消息框的內(nèi)容。LPCTSTR 是自定義數(shù)據(jù)類型,等價(jià)于 const char *。

  • lpCaption:消息框的標(biāo)題。

  • uType:對(duì)話框的按鈕樣式和圖標(biāo)。


uType 支持的按鈕樣式:
按鈕含義
MB_OK默認(rèn)值,有一個(gè)“確認(rèn)”按鈕在里面
MB_YESNO有“是”和“否”兩個(gè)按鈕在里面
MB_ABORTRETRYIGNORE有“中止”,“重試”和“跳過(guò)”三個(gè)按鈕在里面
MB_YESNOCANCEL有“是”,“否”和“取消”三個(gè)按鈕在里面
MB_RETRYCANCEL有“重試”和“取消”兩個(gè)按鈕在里面
MB_OKCANCEL有“確定”和“取消”兩個(gè)按鈕在里面

這些按鈕都是宏定義:
#define MB_OK                 0x00000000L#define MB_OKCANCEL           0x00000001L#define MB_ABORTRETRYIGNORE   0x00000002L#define MB_YESNOCANCEL        0x00000003L#define MB_YESNO              0x00000004L#define MB_RETRYCANCEL        0x00000005L
你也可以嘗試用數(shù)字來(lái)表示按鈕,例如:
MessageBox(NULL, TEXT("你好,歡迎來(lái)到C語(yǔ)言中文網(wǎng)!"), TEXT("Welcome"), 1);
也會(huì)生成與上面相同的對(duì)話框。

除了按鈕,uType 還支持圖標(biāo)(圖標(biāo)對(duì)用戶有提醒作用):
圖標(biāo)含義
MB_ICONEXCLAMATION一個(gè)驚嘆號(hào)出現(xiàn)在消息框:
MB_ICONWARNING一個(gè)驚嘆號(hào)出現(xiàn)在消息框(同上)
MB_ICONINFORMATION一個(gè)圓圈中小寫字母i組成的圖標(biāo)出現(xiàn)在消息框:
MB_ICONASTERISK一個(gè)圓圈中小寫字母i組成的圖標(biāo)出現(xiàn)在消息框(同上)
MB_ICONQUESTION一個(gè)問(wèn)題標(biāo)記圖標(biāo)出現(xiàn)在消息框:
MB_ICONSTOP一個(gè)停止消息圖標(biāo)出現(xiàn)在消息框:
MB_ICONERROR一個(gè)停止消息圖標(biāo)出現(xiàn)在消息框(同上)
MB_ICONHAND一個(gè)停止消息圖標(biāo)出現(xiàn)在消息框(同上)

這些圖標(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);
會(huì)彈出如下的對(duì)話框:


與上面的對(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ù)字都被定義成了宏,如下所示:
返回值含義
IDOK用戶按下了“確認(rèn)”按鈕
IDCANCEL用戶按下了“取消”按鈕
IDABORT用戶按下了“中止”按鈕
IDRETRY用戶按下了“重試”按鈕
IDIGNORE用戶按下了“忽略”按鈕
IDYES用戶按下了“是”按鈕
IDNO用戶按下了“否”按鈕

對(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ù))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多