C++創(chuàng)建窗口程序的實(shí)現(xiàn)示例
實(shí)現(xiàn)一個(gè)基本的 Windows 應(yīng)用程序,使用 C++ 和 WinAPI(Windows API)編寫。運(yùn)行這段代碼時(shí),它將顯示一個(gè)標(biāo)題為“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); // 獲取當(dāng)前模塊的實(shí)例句柄 WNDCLASS wnd = {}; // 初始化窗口類結(jié)構(gòu)體 wnd.lpfnWndProc = WindowProc; // 設(shè)置消息處理函數(shù)指針 wnd.hInstance = hInstance; // 設(shè)置實(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)) { // 進(jìn)入消息循環(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消息時(shí)關(guān)閉應(yīng)用程序 break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); // 默認(rèn)情況下交由系統(tǒng)處理 } return 0; }
下面是這段代碼的詳細(xì)解釋:
- #include <windows.h>:引入 Windows 頭文件,它包含了創(chuàng)建和管理 Windows 應(yīng)用程序所需的函數(shù)和宏。
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);:定義一個(gè)消息處理函數(shù)
WindowProc
。這個(gè)函數(shù)用于處理發(fā)送給窗口的各種消息。 - int main():主函數(shù),程序的入口點(diǎn)。
- HINSTANCE hInstance = GetModuleHandle(NULL);:獲取當(dāng)前模塊(通常是可執(zhí)行文件)的實(shí)例句柄。
- WNDCLASS wnd = {};:初始化一個(gè)
WNDCLASS
結(jié)構(gòu)體。這個(gè)結(jié)構(gòu)體用于定義窗口類。 - wnd.lpfnWndProc = WindowProc;:設(shè)置消息處理函數(shù)為前面定義的
WindowProc
。 - wnd.hInstance = hInstance;:設(shè)置窗口類的實(shí)例句柄。
- wnd.lpszClassName = TEXT("blackcat");:設(shè)置窗口類的名稱。
- RegisterClass(&wnd);:注冊窗口類。
- HWND hwnd = CreateWindowA(...);:使用前面注冊的窗口類創(chuàng)建一個(gè)窗口。
- ShowWindow(hwnd, SW_SHOWNORMAL);:顯示窗口。
- MSG msg = {};:定義一個(gè)
MSG
結(jié)構(gòu)體變量,用于接收從消息隊(duì)列中取出的消息。 - while (GetMessage(&msg, NULL, 0, 0)):進(jìn)入消息循環(huán),直到接收到退出消息為止。
- TranslateMessage(&msg); 和 DispatchMessage(&msg);:這兩行代碼負(fù)責(zé)轉(zhuǎn)換和分發(fā)消息。簡單來說,它們將消息傳遞給適當(dāng)?shù)拇翱谶^程函數(shù)進(jìn)行處理。
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam):這是消息處理函數(shù)。它檢查收到的消息,如果消息是
WM_DESTROY
,則退出應(yīng)用程序。否則,將消息傳遞給默認(rèn)的處理函數(shù)。
到此這篇關(guān)于C++創(chuàng)建窗口程序的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++創(chuàng)建窗口程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)可增容動(dòng)態(tài)通訊錄詳細(xì)過程
這篇文章主要為大家介紹了C語言實(shí)現(xiàn)簡易通訊錄的完整流程,此通訊錄還可以增容,并且每個(gè)環(huán)節(jié)都有完整代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-05-05C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作的相關(guān)資料,需要的朋友可以參考下2017-06-06在C語言中g(shù)etchar的使用方法和讀取規(guī)則講解
getchar中文意思是獲取字符,getchar函數(shù)從標(biāo)準(zhǔn)輸入輸出里讀取下一個(gè)字符,返回類型為int整形,返回用戶輸入的ASCII碼值,如果到達(dá)文件末尾或者出錯(cuò)返回EOF,這篇文章主要介紹了在C語言中g(shù)etchar的使用方法和讀取規(guī)則,需要的朋友可以參考下2022-12-12C++?STL標(biāo)準(zhǔn)庫std::vector擴(kuò)容時(shí)進(jìn)行深復(fù)制原因詳解
我們知道,std::vector之所以可以動(dòng)態(tài)擴(kuò)容,同時(shí)還可以保持順序存儲,主要取決于其擴(kuò)容復(fù)制的機(jī)制。當(dāng)容量滿時(shí),會重新劃分一片更大的內(nèi)存區(qū)域,然后將所有的元素拷貝過去2022-08-08使用C++實(shí)現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-06-06