C++創(chuàng)建窗口程序的實現(xiàn)示例
實現(xiàn)一個基本的 Windows 應(yīng)用程序,使用 C++ 和 WinAPI(Windows API)編寫。運行這段代碼時,它將顯示一個標題為“Hello World”的窗口,并且可以通過關(guān)閉窗口來結(jié)束程序。
#include <windows.h> // 包含Windows頭文件
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // 定義消息處理函數(shù)
int main() {
HINSTANCE hInstance = GetModuleHandle(NULL); // 獲取當前模塊的實例句柄
WNDCLASS wnd = {}; // 初始化窗口類結(jié)構(gòu)體
wnd.lpfnWndProc = WindowProc; // 設(shè)置消息處理函數(shù)指針
wnd.hInstance = hInstance; // 設(shè)置實例句柄
wnd.lpszClassName = TEXT("blackcat"); // 設(shè)置窗口類名稱
RegisterClass(&wnd); // 注冊窗口類
HWND hwnd = CreateWindowA(
TEXT("blackcat"),
TEXT("Hello World"),
WS_OVERLAPPEDWINDOW,
100, 100, 600, 600, NULL, NULL, hInstance, NULL); // 創(chuàng)建窗口
ShowWindow(hwnd, SW_SHOWNORMAL); // 顯示窗口
MSG msg = {}; // 定義消息變量
while (GetMessage(&msg, NULL, 0, 0)) { // 進入消息循環(huán)
TranslateMessage(&msg); // 轉(zhuǎn)換消息
DispatchMessage(&msg); // 分發(fā)消息
}
return static_cast<int>(msg.wParam); // 返回程序退出值
}
// 消息處理函數(shù)
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0); // 接收到WM_DESTROY消息時關(guān)閉應(yīng)用程序
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam); // 默認情況下交由系統(tǒng)處理
}
return 0;
}

下面是這段代碼的詳細解釋:
- #include <windows.h>:引入 Windows 頭文件,它包含了創(chuàng)建和管理 Windows 應(yīng)用程序所需的函數(shù)和宏。
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);:定義一個消息處理函數(shù)
WindowProc。這個函數(shù)用于處理發(fā)送給窗口的各種消息。 - int main():主函數(shù),程序的入口點。
- HINSTANCE hInstance = GetModuleHandle(NULL);:獲取當前模塊(通常是可執(zhí)行文件)的實例句柄。
- WNDCLASS wnd = {};:初始化一個
WNDCLASS結(jié)構(gòu)體。這個結(jié)構(gòu)體用于定義窗口類。 - wnd.lpfnWndProc = WindowProc;:設(shè)置消息處理函數(shù)為前面定義的
WindowProc。 - wnd.hInstance = hInstance;:設(shè)置窗口類的實例句柄。
- wnd.lpszClassName = TEXT("blackcat");:設(shè)置窗口類的名稱。
- RegisterClass(&wnd);:注冊窗口類。
- HWND hwnd = CreateWindowA(...);:使用前面注冊的窗口類創(chuàng)建一個窗口。
- ShowWindow(hwnd, SW_SHOWNORMAL);:顯示窗口。
- MSG msg = {};:定義一個
MSG結(jié)構(gòu)體變量,用于接收從消息隊列中取出的消息。 - while (GetMessage(&msg, NULL, 0, 0)):進入消息循環(huán),直到接收到退出消息為止。
- TranslateMessage(&msg); 和 DispatchMessage(&msg);:這兩行代碼負責(zé)轉(zhuǎn)換和分發(fā)消息。簡單來說,它們將消息傳遞給適當?shù)拇翱谶^程函數(shù)進行處理。
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam):這是消息處理函數(shù)。它檢查收到的消息,如果消息是
WM_DESTROY,則退出應(yīng)用程序。否則,將消息傳遞給默認的處理函數(shù)。
到此這篇關(guān)于C++創(chuàng)建窗口程序的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++創(chuàng)建窗口程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于C語言strlen與sizeof區(qū)別詳情
對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別,今天得這篇文章我們就來學(xué)習(xí)C語言strlen與sizeof區(qū)別的相關(guān)資料,需要的朋友可以參考一下2021-10-10
OpenCV實戰(zhàn)之基于Hu矩實現(xiàn)輪廓匹配
這篇文章主要介紹了利用C++ OpenCV實現(xiàn)基于Hu矩的輪廓匹配,文中的示例代碼講解詳細,對我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以學(xué)習(xí)一下2022-01-01
c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)
下面小編就為大家?guī)硪黄猚++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09

