天天看點

C語言基本的視窗開發

C語言基本的視窗開發

🤵‍♂️ 個人首頁: @計算機魔術師

👨‍💻 作者簡介:CSDN内容合夥人,全棧領域優質創作者。

更新時間:2022/4/18

🎏visual studio 2022編譯器

🎏打開項目流程:
C語言基本的視窗開發
C語言基本的視窗開發
C語言基本的視窗開發
  • 建立主函數
C語言基本的視窗開發

🙋‍♂️重點重點!!!

🙋‍♂️必須要設定,不然在設定類配置回調函數中不允許其命名為常字元,就會報錯!!
C語言基本的視窗開發
C語言基本的視窗開發

🎏建立檔案,放入代碼

#include"windows.h"
#define PageSizex 500 //視窗寬
#define PageSizey 600 //視窗長
LRESULT CALLBACK CallBack(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam);//聲明回調函數


//WINAPI: 調用約定,調用約定,主要是參數的入棧順序,這個棧空間的清理者,
// 在其他代碼中 __stdcall, APIENTRY都是一樣,可以轉到定義檢視,
// 
//句柄:一個數 ;作用:視窗的唯一标志

int WINAPI WinMain(
  HINSTANCE hInstance, //目前執行個體句柄 英文單詞:hinstance
  HINSTANCE hPreinstance, //前一個執行個體的句柄
  LPTSTR ipcmdline,  //傳遞給系統胡指令行參數
  int ncmdshow  //預設為1,指定視窗的打開方式:隐藏,最大,最小顯示
)
{
  //初始化視窗類
  WNDCLASSEX  wc; // window class extra與 wndclass 的擴充
  HWND hWnd; //視窗句柄 Handle to the window
  MSG mSg; //資訊接受 message

  //配置視窗類
  wc.cbClsExtra = 0;  //對視窗類的額外空間
  wc.cbSize = sizeof(WNDCLASSEX); //類的結構體大小
  wc.hInstance = hInstance; //目前視窗執行個體句柄
  wc.hCursor = NULL;// 光标 不需要設為 NULL 也可自行加載系統光标 LoadCursor(NULL,IDC_HAND);
  wc.cbWndExtra = 0; //對視窗的額外空間
  wc.hIcon = NULL;//圖示 不需要可以設為NULL 可以将NULL換為系統預設圖示 LoadIcon(NULL,IDI_ERROR); 
  wc.hbrBackground = (HBRUSH)COLOR_WINDOW;    //背景更換顔色 
  wc.hIconSm = NULL; //小圖示 不需要設為 NULL 也可自行加載系統圖示 LoadIcon(NULL, IDI_ERROR); 
  wc.lpfnWndProc = CallBack; //回調函數名
  wc.lpszClassName = "FirstWin"; //名字不能重複!給作業系統看的
  wc.lpszMenuName = NULL;  //菜單名 不需要設為 NULL
  wc.style = CS_HREDRAW | CS_VREDRAW; //視窗類樣式:hrizons redaw | vertical redaw 垂直重新整理和水準重新整理 

  //12個成員少一個不可以!!!

  //注冊視窗對象
  //RegisterClassEx(&wc) 傳回資料類型 ATOM unsigned short 注冊成功傳回非0,失敗傳回0
  if (0 == RegisterClassEx(&wc))
  {

    int a = GetLastError(); //函數生成對應的錯誤碼,可用工具查詢注冊失敗的原因 

    return 0;
  };

  //建立視窗      lp 是一個指針的意思   指針英文:pointer 
  hWnd = CreateWindowEx(
    WS_EX_TOPMOST, //dwExStyle 視窗附加屬性:顯示在最頂層
    "FirstWin", // lpClassName 視窗類的名字, 給系統看的,同前 
    "俺的第一個視窗",  //lpWindowName 視窗顯示的名字
    WS_OVERLAPPEDWINDOW,  //dwStyle 視窗建立風格 可以一個或多個用 | 連接配接
    100, //x 指定視窗的顯示的x坐标,相對與桌面
    100, //y 指定視窗的顯示的y坐标,相對與桌面
    PageSizex, //nWidth 視窗寬度
    PageSizey, //nheight 視窗高度
    NULL,  //hWndParent 副視窗句柄
    NULL, //hMenu 視窗菜單
    hInstance, //hInstance 目前執行個體句柄
    NULL //lpParam 
  );

  if (NULL == hWnd) //視窗句柄  視窗唯一辨別
  {
    return 0;
  }

  //顯示視窗
  ShowWindow(hWnd, ncmdshow); //指定視窗顯示方式,這裡為1,标準顯示視窗樣式 同上
  // 隐藏傳回0, 可視傳回非0  

//得到消息
  while (GetMessage(
    &mSg, //指向資訊體的指針
    NULL,// 指定視窗句柄 選擇處理那個視窗的消息  NULL/非NULL的差別,全部句柄接受
    0, 0 //設定處理消息的範圍 這裡為全部範圍
  ))
  {

    TranslateMessage(&mSg); //翻譯消息,将按鍵虛拟消息轉化為字元消息并寄送到調用線程的資訊隊列裡,

    DispatchMessage(&mSg); //分發消息到系統,系統去調用我們的回調函數callback(過程函數) 
    //資訊類型 :标準消息 指令消息 通知消息 自定義消息

  }

  return 0;
}


 // LRESULT 處理消息産生的一個有符号值  CALLBACK調用約定
   
LRESULT CALLBACK CallBack(
  HWND hWnd, //視窗句柄
  UINT nMsg, //消息ID  UIMT 其實就是一個unsigned int
  WPARAM wParam, LPARAM lParam //每條資訊所帶的兩條資料 'word'資料類型,’long‘資料類型
) 
{
  PAINTSTRUCT pst;
  HDC hDC;
  switch (nMsg)
  {
  case WM_DESTROY:
    PostQuitMessage(0); //在點選視窗關閉鍵 傳回0給Getmessage函數 停止資訊接受循環
    //點選叉叉 會經過  WM_CLOSE->WM_DESTORY->WM_QUIT  處理消息 
    break;
  }
  return DefWindowProc(hWnd, nMsg, wParam, lParam);//預設系統處理其他消息
  //保持系統連貫性

}      
  • 🙌ctrl + F5 運作!
🤞到這裡,你如果對增删改查還有什麼疑問🤞
    🐱‍🏍歡迎私信部落客問題哦,部落客會盡自己能力為你解答疑惑的!🐱‍🏍
      🥳如果對你有幫助,你的贊是對部落客最大的支援!!🥳      

繼續閱讀