VC中控制台程序创建窗口的实例方法
更新时间:2021年12月5日 20:27 点击:270 作者:jobsxiao
在VC控制台程序中调用D3DVideoRender时,需要创建新的窗口控件显示图像
#include "windows.h" #include "TCHAR.h" //声明自定义消息处理函数 LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE hInstance; hInstance = GetModuleHandle(NULL); //获取一个应用程序或动态链接库的模块句柄 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; //【关键】采用自定义消息处理函数,也可以用默认的DefWindowProc Render_WND.lpszClassName = _T("RenderWindow"); //【关键】该窗口类的名称 Render_WND.hInstance = hInstance; //【关键】表示创建该窗口的程序的运行实体代号 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); //没有附加数据,为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); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } // 自定义消息处理函数的实现 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); }
实例扩展:
#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; // 如果改变了客户区域的宽度或高度,则重新绘制整个窗口 wc.cbClsExtra = 0; // 窗口结构的附加字节数 wc.cbWndExtra = 0; // 窗口实例的附加字节数 wc.hInstance = hIns; // 本模块的实例句柄 wc.hIcon = NULL; // 图标的句柄 wc.hIconSm = NULL; // 和窗口类关联的小图标的句柄 wc.hbrBackground = (HBRUSH)COLOR_WINDOW; // 背景画刷的句柄 wc.hCursor = NULL; // 光标的句柄 wc.lpfnWndProc = __WndProc; // 窗口处理函数的指针 wc.lpszMenuName = NULL; // 指向菜单的指针 wc.lpszClassName = "LYSM_class"; // 指向类名称的指针 // 为窗口注册一个窗口类 if (!RegisterClassEx(&wc)) { cout << "RegisterClassEx error : " << GetLastError() << endl; } // 创建窗口 HWND hWnd = CreateWindowEx( WS_EX_TOPMOST, // 窗口扩展样式:顶级窗口 "LYSM_class", // 窗口类名 "LYSM_title", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式:重叠窗口 0, // 窗口初始x坐标 0, // 窗口初始y坐标 800, // 窗口宽度 600, // 窗口高度 0, // 父窗口句柄 0, // 菜单句柄 hIns, // 与窗口关联的模块实例的句柄 0 // 用来传递给窗口WM_CREATE消息 ); if (hWnd == 0) { cout << "CreateWindowEx error : " << GetLastError() << endl; } UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); // 消息循环(没有会导致窗口卡死) 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中控制台程序创建窗口的实例方法的文章就介绍到这了,更多相关VC中控制台程序如何创建窗口内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/jobsxiao/article/details/52651869
上一篇: 详解C++中inline关键字的作用
下一篇: C++实现截图截屏的示例代码
相关文章
- 这篇文章主要介绍了SpringMVC文件上传原理及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-15
C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?
这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下...2020-06-25使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程
这篇文章主要介绍了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-16- 这篇文章主要介绍了SpringMvc自动装箱及GET请求参数原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 这篇文章主要介绍了SpringMvc获取请求头请求体消息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-17
vc提示unexpected end of file found的原因分析
这篇文章主要介绍了vc提示unexpected end of file found的原因分析,给出了几点常见错误原因的分析,需要的朋友可以参考下...2020-04-25Springmvc ResponseBody响应json数据实现过程
这篇文章主要介绍了Springmvc ResponseBody响应json数据实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-26- 这篇文章主要为大家详细介绍了C#创建SQLite控制台应用程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了CocosCreator MVC架构,同学们在制作游戏过程中,尽量使用一些架构,会避免很多问题...2021-04-16
- Spring MVC是Spring系列框架中使用频率最高的部分。不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分。因此程序员一定要熟练掌握MVC部分。本篇博客简要分析Spring MVC处理一个请求的流程。...2021-02-06
- 这篇文章主要为大家介绍了javascript中的MVC模式,MVC是一种软件架构模式,一般把软件模式分为三部分,本文就针对MVC模式的三部分进行讲解,感兴趣的小伙伴们可以参考一下...2016-02-01
- 这篇文章主要介绍了仅30行代码实现Javascript中的MVC的方法,MVC的基础是观察者模式,这是实现model和view同步的关键,想要深入了解的朋友可以参考本文...2016-02-18
使用jQuery.form.js/springmvc框架实现文件上传功能
这篇文章主要介绍了使用jQuery.form.jsspringmvc框架实现文件上传功能,非常具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-05-14- 这篇文章主要介绍了SpringMVC和rabbitmq集成的使用案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-20
- 本文主要讲解AngularJS MVC体系结构,这里提供详细的教程供大家学习参考,有需要的小伙伴可以参考下...2016-08-24
web面试MVC与MVVM区别及Vue为什么不完全遵守MVVM解答
这篇文章主要介绍了web面试中常问问题,MVC与MVVM区别以及Vue为什么不完全遵守MVVM的难点解答,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-09-24- 平时在使用tomcat做一些服务的时候经常遇到各种乱码问题,下面这篇文章主要给大家介绍了一次tomcat源码启动控制台中文乱码的调试过程,需要的朋友可以参考下...2021-06-01
- 本篇文章主要介绍了ASP.NET MVC API 接口验证的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-09-22
SpringMVC中的handlerMappings对象用法
这篇文章主要介绍了SpringMVC中的handlerMappings对象用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-26