初步瞭解C語言Windows程式設計

生活不易001發表於2021-01-23

上次我們說了什麼是windows程式設計?瞭解到WindowsAPI程式設計、Windows程式設計、WindowsSDK程式設計是一個概念。

 

今天我們運用C語言來實現你的第一個真正的Windows程式。

windows.h標頭檔案介紹:

 

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

 

  windef.h:基本型別定義

 

  winbase.h:核心函式

 

  wingdi.h:使用者介面函式

 

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

 

  這些標頭檔案定義了Windows的所有資料型別、函式原型、資料結構和符號常量,也就是說,所有的WindowsAPI都在這些標頭檔案中宣告。在C語言中,程式都是“黑屏”的,稱為控制檯程式(ConsoleApplication)。這套教程要講的是帶介面的Windows程式(WindowsApplication),也稱為GUI程式(GUIApplication)。控制檯程式以main()為入口函式,Windows程式以WinMain()為入口函式,動態連結庫(DLL)以DllMain()為入口函式,不同的入口函式決定了不同型別的程式。

 

  WinMain()函式的原型為:

 

  intWINAPIWinMain(

 

  HINSTANCEhInstance,//當前視窗控制程式碼

 

  HINSTANCEhPrevInstance,//前一個視窗控制程式碼,Win32下為NULL(Win16留下的廢物,目前已棄用)

 

  LPSTRlpCmdLine,//命令列引數

 

  intnCmdShow//視窗顯示方式

 

  );

 

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

 

  #include<windows.h>

 

  intWINAPIWinMain(

 

  HINSTANCEhInstance,

 

  HINSTANCEhPrevInstance,

 

  LPSTRlpCmdLine,

 

  intnCmdShow

 

  ){

 

  //呼叫API函式MessageBox

 

  intnSelect=MessageBox(NULL,TEXT("你好,這是源世界介紹windows程式設計的例子"),TEXT("源世界出品,禁止轉載!"),MB_OKCANCEL);

 

  if(nSelect==IDOK){

 

  MessageBox(NULL,TEXT("你點選了“確定”按鈕"),TEXT("提示"),MB_OK);

 

  }else{

 

  MessageBox(NULL,TEXT("你點選了“取消”按鈕"),TEXT("提示"),MB_OK);

 

  }

 

  return0;

 

  }

 

執行結果:

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

 

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

 

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

 

  intWINAPIMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTuType);

 

  WINAPI為宏定義

 

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

 

  引數說明:

 

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

 

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

 

  lpCaption:訊息框的標題。

 

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

.這些按鈕都是宏定義:

 

  #defineMB_OK0x00000000L

 

  #defineMB_OKCANCEL0x00000001L

 

  #defineMB_ABORTRETRYIGNORE0x00000002L

 

  #defineMB_YESNOCANCEL0x00000003L

 

  #defineMB_YESNO0x00000004L

 

  #defineMB_RETRYCANCEL0x00000005L

 

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

 

  MessageBox(NULL,TEXT("你好,歡迎源世界您!"),TEXT("源世界出品!"),1);

 

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

 

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

這些圖示也都是宏定義:

 

  #defineMB_ICONHAND0x00000010L

 

  #defineMB_ICONQUESTION0x00000020L

 

  #defineMB_ICONEXCLAMATION0x00000030L

 

  #defineMB_ICONASTERISK0x00000040L

 

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

 

  MessageBox(

 

  NULL,

 

  TEXT("這是源世界整理的例子!"),

 

  TEXT("源世界整理"),

 

  MB_OKCANCEL|MB_ICONINFORMATION

 

  );

 

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

 

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

 

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

 

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

 

  對應的宏定義為:

 

  #defineIDOK1

 

  #defineIDCANCEL2

 

  #defineIDABORT3

 

  #defineIDRETRY4

 

  #defineIDIGNORE5

 

  #defineIDYES6

 

  #defineIDNO7

 

  總結:

 

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

 

 

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993485/viewspace-2752401/,如需轉載,請註明出處,否則將追究法律責任。

相關文章