VC中控制臺程序創(chuàng)建窗口的實例方法
在VC控制臺程序中調(diào)用D3DVideoRender時,需要創(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); //獲取一個應(yīng)用程序或動態(tài)鏈接庫的模塊句柄
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)鍵】該窗口類的名稱
Render_WND.hInstance = hInstance; //【關(guān)鍵】表示創(chuàng)建該窗口的程序的運行實體代號
RegisterClass(&Render_WND);
HWND hwnd = CreateWindow(
_T("RenderWindow"), //【關(guān)鍵】上面注冊的類名lpszClassName,要完全一致
L"Zombie", //窗口標(biāo)題文字
WS_OVERLAPPEDWINDOW, //窗口外觀樣式
0, //窗口相對于父級的X坐標(biāo)
0, //窗口相對于父級的Y坐標(biāo)
320, //窗口的寬度
240, //窗口的高度
NULL, //沒有父窗口,為NULL
NULL, //沒有菜單,為NULL
hInstance, //當(dāng)前應(yīng)用程序的實例句柄
NULL); //沒有附加數(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ù)的實現(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);
}
實例擴(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ū)域的寬度或高度,則重新繪制整個窗口
wc.cbClsExtra = 0; // 窗口結(jié)構(gòu)的附加字節(jié)數(shù)
wc.cbWndExtra = 0; // 窗口實例的附加字節(jié)數(shù)
wc.hInstance = hIns; // 本模塊的實例句柄
wc.hIcon = NULL; // 圖標(biāo)的句柄
wc.hIconSm = NULL; // 和窗口類關(guān)聯(lián)的小圖標(biāo)的句柄
wc.hbrBackground = (HBRUSH)COLOR_WINDOW; // 背景畫刷的句柄
wc.hCursor = NULL; // 光標(biāo)的句柄
wc.lpfnWndProc = __WndProc; // 窗口處理函數(shù)的指針
wc.lpszMenuName = NULL; // 指向菜單的指針
wc.lpszClassName = "LYSM_class"; // 指向類名稱的指針
// 為窗口注冊一個窗口類
if (!RegisterClassEx(&wc)) {
cout << "RegisterClassEx error : " << GetLastError() << endl;
}
// 創(chuàng)建窗口
HWND hWnd = CreateWindowEx(
WS_EX_TOPMOST, // 窗口擴(kuò)展樣式:頂級窗口
"LYSM_class", // 窗口類名
"LYSM_title", // 窗口標(biāo)題
WS_OVERLAPPEDWINDOW, // 窗口樣式:重疊窗口
0, // 窗口初始x坐標(biāo)
0, // 窗口初始y坐標(biāo)
800, // 窗口寬度
600, // 窗口高度
0, // 父窗口句柄
0, // 菜單句柄
hIns, // 與窗口關(guān)聯(lián)的模塊實例的句柄
0 // 用來傳遞給窗口WM_CREATE消息
);
if (hWnd == 0) {
cout << "CreateWindowEx error : " << GetLastError() << endl;
}
UpdateWindow(hWnd);
ShowWindow(hWnd, SW_SHOW);
// 消息循環(huán)(沒有會導(dǎo)致窗口卡死)
MSG msg = { 0 };
while (msg.message != WM_QUIT) {
// 從消息隊列中刪除一條消息
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
DispatchMessage(&msg);
}
}
cout << "finished." << endl;
getchar();
end:
getchar();
return 0;
}
到此這篇關(guān)于VC中控制臺程序創(chuàng)建窗口的實例方法的文章就介紹到這了,更多相關(guān)VC中控制臺程序如何創(chuàng)建窗口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux網(wǎng)絡(luò)編程之socket文件傳輸示例
這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之socket文件傳輸示例,對于基于Linux平臺的C程序員來說有一定的借鑒價值,需要的朋友可以參考下2014-08-08
嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進(jìn)行位移操作的方法
今天小編就為大家分享一篇關(guān)于嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進(jìn)行位移操作的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
C語言實現(xiàn)線性動態(tài)(單向)鏈表的示例代碼
本文主要介紹了C語言實現(xiàn)線性動態(tài)(單向)鏈表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解
這篇文章主要介紹了C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解的相關(guān)資料,需要的朋友可以參考下2023-01-01

