
🤵♂️ 個人首頁: @計算機魔術師
👨💻 作者簡介:CSDN内容合夥人,全棧領域優質創作者。
更新時間:2022/4/18
🎏visual studio 2022編譯器
🎏打開項目流程:![]()
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 運作!
🤞到這裡,你如果對增删改查還有什麼疑問🤞
🐱🏍歡迎私信部落客問題哦,部落客會盡自己能力為你解答疑惑的!🐱🏍
🥳如果對你有幫助,你的贊是對部落客最大的支援!!🥳