在VC控制臺程序中調用D3DVideoRender時,需要創(chuàng)建新的窗口控件顯示圖像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#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); //獲取一個應用程序或動態(tài)鏈接庫的模塊句柄 WNDCLASS Render_WND; Render_WND.cbClsExtra = 0; Render_WND.cbWndExtra = 0; Render_WND.hCursor = LoadCursor(hInstance, IDC_ARROW); //鼠標風格 Render_WND.hIcon = LoadIcon(hInstance, IDI_APPLICATION); //圖標風格 Render_WND.lpszMenuName = NULL; //菜單名 Render_WND.style = CS_HREDRAW | CS_VREDRAW; //窗口的風格 Render_WND.hbrBackground = ( HBRUSH )COLOR_WINDOW; //背景色 Render_WND.lpfnWndProc = WindowProc; //【關鍵】采用自定義消息處理函數(shù),也可以用默認的DefWindowProc Render_WND.lpszClassName = _T( "RenderWindow" ); //【關鍵】該窗口類的名稱 Render_WND.hInstance = hInstance; //【關鍵】表示創(chuàng)建該窗口的程序的運行實體代號 RegisterClass(&Render_WND); HWND hwnd = CreateWindow( _T( "RenderWindow" ), //【關鍵】上面注冊的類名lpszClassName,要完全一致 L "Zombie" , //窗口標題文字 WS_OVERLAPPEDWINDOW, //窗口外觀樣式 0, //窗口相對于父級的X坐標 0, //窗口相對于父級的Y坐標 320, //窗口的寬度 240, //窗口的高度 NULL, //沒有父窗口,為NULL NULL, //沒有菜單,為NULL hInstance, //當前應用程序的實例句柄 NULL); //沒有附加數(shù)據(jù),為NULL //去標題欄 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); } |
實例擴展:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#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); // 定義結構大小 wc.style = CS_HREDRAW | CS_VREDRAW; // 如果改變了客戶區(qū)域的寬度或高度,則重新繪制整個窗口 wc.cbClsExtra = 0; // 窗口結構的附加字節(jié)數(shù) wc.cbWndExtra = 0; // 窗口實例的附加字節(jié)數(shù) wc.hInstance = hIns; // 本模塊的實例句柄 wc.hIcon = NULL; // 圖標的句柄 wc.hIconSm = NULL; // 和窗口類關聯(lián)的小圖標的句柄 wc.hbrBackground = ( HBRUSH )COLOR_WINDOW; // 背景畫刷的句柄 wc.hCursor = NULL; // 光標的句柄 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, // 窗口擴展樣式:頂級窗口 "LYSM_class" , // 窗口類名 "LYSM_title" , // 窗口標題 WS_OVERLAPPEDWINDOW, // 窗口樣式:重疊窗口 0, // 窗口初始x坐標 0, // 窗口初始y坐標 800, // 窗口寬度 600, // 窗口高度 0, // 父窗口句柄 0, // 菜單句柄 hIns, // 與窗口關聯(lián)的模塊實例的句柄 0 // 用來傳遞給窗口WM_CREATE消息 ); if (hWnd == 0) { cout << "CreateWindowEx error : " << GetLastError() << endl; } UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); // 消息循環(huán)(沒有會導致窗口卡死) 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; } |
到此這篇關于VC中控制臺程序創(chuàng)建窗口的實例方法的文章就介紹到這了,更多相關VC中控制臺程序如何創(chuàng)建窗口內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/jobsxiao/article/details/52651869