VC中控制臺(tái)程序創(chuàng)建窗口的實(shí)例方法
在VC控制臺(tái)程序中調(diào)用D3DVideoRender時(shí),需要?jiǎng)?chuàng)建新的窗口控件顯示圖像
#include "windows.h" #include "TCHAR.h" //聲明自定義消息處理函數(shù) LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE hInstance; hInstance = GetModuleHandle(NULL); //獲取一個(gè)應(yīng)用程序或動(dòng)態(tài)鏈接庫(kù)的模塊句柄 WNDCLASS Render_WND; Render_WND.cbClsExtra = 0; Render_WND.cbWndExtra = 0; Render_WND.hCursor = LoadCursor(hInstance, IDC_ARROW); //鼠標(biāo)風(fēng)格 Render_WND.hIcon = LoadIcon(hInstance, IDI_APPLICATION); //圖標(biāo)風(fēng)格 Render_WND.lpszMenuName = NULL; //菜單名 Render_WND.style = CS_HREDRAW | CS_VREDRAW; //窗口的風(fēng)格 Render_WND.hbrBackground = (HBRUSH)COLOR_WINDOW; //背景色 Render_WND.lpfnWndProc = WindowProc; //【關(guān)鍵】采用自定義消息處理函數(shù),也可以用默認(rèn)的DefWindowProc Render_WND.lpszClassName = _T("RenderWindow"); //【關(guān)鍵】該窗口類(lèi)的名稱 Render_WND.hInstance = hInstance; //【關(guān)鍵】表示創(chuàng)建該窗口的程序的運(yùn)行實(shí)體代號(hào) RegisterClass(&Render_WND); HWND hwnd = CreateWindow( _T("RenderWindow"), //【關(guān)鍵】上面注冊(cè)的類(lèi)名lpszClassName,要完全一致 L"Zombie", //窗口標(biāo)題文字 WS_OVERLAPPEDWINDOW, //窗口外觀樣式 0, //窗口相對(duì)于父級(jí)的X坐標(biāo) 0, //窗口相對(duì)于父級(jí)的Y坐標(biāo) 320, //窗口的寬度 240, //窗口的高度 NULL, //沒(méi)有父窗口,為NULL NULL, //沒(méi)有菜單,為NULL hInstance, //當(dāng)前應(yīng)用程序的實(shí)例句柄 NULL); //沒(méi)有附加數(shù)據(jù),為NULL //去標(biāo)題欄 SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_CAPTION); //去邊框 SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & ~(WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME)); // 顯示窗口 ShowWindow(hwnd, SW_SHOW); // 更新窗口 UpdateWindow(hwnd); // 消息循環(huán) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } // 自定義消息處理函數(shù)的實(shí)現(xiàn) LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { switch (uMsg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } case WM_KEYDOWN: { if (wParam == VK_ESCAPE)//按Esc鍵退出 { PostQuitMessage(0); return 0; } } } return DefWindowProc(hwnd, uMsg, wParam, lParam); }
實(shí)例擴(kuò)展:
#include <iostream> #include <Windows.h> using namespace std; LRESULT CALLBACK __WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (msg) { case WM_CLOSE: MessageBox(NULL,"WM_CLOSE", "", NULL); break; default: break; } return DefWindowProc(hWnd, msg, wParam, lParam); } int main() { // 窗口屬性初始化 HINSTANCE hIns = GetModuleHandle(0); WNDCLASSEX wc; wc.cbSize = sizeof(wc); // 定義結(jié)構(gòu)大小 wc.style = CS_HREDRAW | CS_VREDRAW; // 如果改變了客戶區(qū)域的寬度或高度,則重新繪制整個(gè)窗口 wc.cbClsExtra = 0; // 窗口結(jié)構(gòu)的附加字節(jié)數(shù) wc.cbWndExtra = 0; // 窗口實(shí)例的附加字節(jié)數(shù) wc.hInstance = hIns; // 本模塊的實(shí)例句柄 wc.hIcon = NULL; // 圖標(biāo)的句柄 wc.hIconSm = NULL; // 和窗口類(lèi)關(guān)聯(lián)的小圖標(biāo)的句柄 wc.hbrBackground = (HBRUSH)COLOR_WINDOW; // 背景畫(huà)刷的句柄 wc.hCursor = NULL; // 光標(biāo)的句柄 wc.lpfnWndProc = __WndProc; // 窗口處理函數(shù)的指針 wc.lpszMenuName = NULL; // 指向菜單的指針 wc.lpszClassName = "LYSM_class"; // 指向類(lèi)名稱的指針 // 為窗口注冊(cè)一個(gè)窗口類(lèi) if (!RegisterClassEx(&wc)) { cout << "RegisterClassEx error : " << GetLastError() << endl; } // 創(chuàng)建窗口 HWND hWnd = CreateWindowEx( WS_EX_TOPMOST, // 窗口擴(kuò)展樣式:頂級(jí)窗口 "LYSM_class", // 窗口類(lèi)名 "LYSM_title", // 窗口標(biāo)題 WS_OVERLAPPEDWINDOW, // 窗口樣式:重疊窗口 0, // 窗口初始x坐標(biāo) 0, // 窗口初始y坐標(biāo) 800, // 窗口寬度 600, // 窗口高度 0, // 父窗口句柄 0, // 菜單句柄 hIns, // 與窗口關(guān)聯(lián)的模塊實(shí)例的句柄 0 // 用來(lái)傳遞給窗口WM_CREATE消息 ); if (hWnd == 0) { cout << "CreateWindowEx error : " << GetLastError() << endl; } UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); // 消息循環(huán)(沒(méi)有會(huì)導(dǎo)致窗口卡死) MSG msg = { 0 }; while (msg.message != WM_QUIT) { // 從消息隊(duì)列中刪除一條消息 if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { DispatchMessage(&msg); } } cout << "finished." << endl; getchar(); end: getchar(); return 0; }
到此這篇關(guān)于VC中控制臺(tái)程序創(chuàng)建窗口的實(shí)例方法的文章就介紹到這了,更多相關(guān)VC中控制臺(tái)程序如何創(chuàng)建窗口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語(yǔ)言如何實(shí)現(xiàn)兩數(shù)之和
這篇文章主要介紹了c語(yǔ)言如何實(shí)現(xiàn)兩數(shù)之和,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Qt自定義控件實(shí)現(xiàn)多彩色儀表盤(pán)
這篇文章主要為大家詳細(xì)介紹了Qt自定義控件實(shí)現(xiàn)多彩色儀表盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12C/C++使用fmt庫(kù)實(shí)現(xiàn)格式化字符串
fmt庫(kù)是一個(gè)高效、易用的C++格式化庫(kù),可以幫助我們方便地進(jìn)行字符串格式化、輸出、日志記錄等操作,下面我們就來(lái)學(xué)習(xí)一下fmt格式化字符串的具體操作吧2023-12-12C++ 類(lèi)的構(gòu)造函數(shù)詳解及實(shí)例
這篇文章主要介紹了C++ 類(lèi)的構(gòu)造函數(shù)詳解及實(shí)例的相關(guān)資料,學(xué)習(xí)C++ 的朋友對(duì)構(gòu)造函數(shù)肯定不陌生,非常重要的基礎(chǔ)知識(shí),這里就詳細(xì)介紹下,需要的朋友可以參考下2016-12-12使用c++實(shí)現(xiàn)OpenCV繪制圓端矩形
這篇文章主要介紹了使用c++實(shí)現(xiàn)OpenCV繪制圓端矩形,其中著重的講解了OpenCV使用過(guò)程中需要注意的一些小細(xì)節(jié),避免浪費(fèi)大家在開(kāi)發(fā)過(guò)程中浪費(fèi)多余的時(shí)間2021-08-08