Directx11学习笔记【二】 将HelloWin封装成类
我们把上一个教程的代码封装到一个类中来方便以后的使用。
首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面
MyWindow.h文件
1 /************************************************************************ 2 Directx11学习笔记【2】 将HelloWin封装成类 3 2016.01 by zhangbaochong 4 /************************************************************************/ 5 #pragma once 6 #include <windows.h> 7 8 static bool isPushEsc = false;//是否按下Esc键 9 10 class MyWindow 11 { 12 public: 13 MyWindow(); 14 ~MyWindow(); 15 public: 16 HWND GetHandle();//返回窗口句柄 17 bool Create(int &width, int &height);//创建窗口 18 void Run();//处理消息循环 19 LRESULT CALLBACK MessageHandler(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);//消息处理 20 private: 21 HWND m_hwnd; 22 HINSTANCE m_hinstance; 23 LPCWSTR m_name; 24 };
MyWindow.cpp
因为定义窗口的时候必须指定一个回调函数,所以我们定义一个静态的WndProc,因为在WndProc中需要调用其他消息的处理函数MessageHandler,所以我们又定义一个类的实例句柄applicationHandle。
1 /************************************************************************ 2 Directx11学习笔记【2】 将HelloWin封装成类 3 2016.01 by zhangbaochong 4 /************************************************************************/ 5 6 #include "MyWindow.h" 7 8 static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);//静态回调函数 9 static MyWindow *applicationHandle;//类的一个静态实例 10 11 MyWindow::MyWindow() 12 { 13 isPushEsc = false; 14 m_hwnd = NULL; 15 m_name = L"HelloWin"; 16 } 17 18 19 MyWindow::~MyWindow() 20 { 21 } 22 23 24 HWND MyWindow::GetHandle() 25 { 26 return m_hwnd; 27 } 28 29 bool MyWindow::Create(int &width, int &height) 30 { 31 WNDCLASSEX wnd; 32 applicationHandle = this; 33 m_hinstance = GetModuleHandle(NULL); 34 wnd.cbClsExtra = 0; 35 wnd.cbSize = sizeof(WNDCLASSEX); 36 wnd.cbWndExtra = 0; 37 wnd.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 38 wnd.hCursor = LoadCursor(NULL, IDC_ARROW); 39 wnd.hIcon = LoadIcon(NULL, IDI_WINLOGO); 40 wnd.hIconSm = wnd.hIcon; 41 wnd.hInstance = m_hinstance; 42 wnd.lpfnWndProc = WndProc; 43 wnd.lpszClassName = m_name; 44 wnd.lpszMenuName = m_name; 45 wnd.style = CS_VREDRAW | CS_HREDRAW; 46 47 //注册窗口 48 if ( !RegisterClassEx(&wnd) ) 49 { 50 MessageBox(NULL, L"注册窗口失败", L"error", 0); 51 return false; 52 } 53 m_hwnd = CreateWindowEx(WS_EX_APPWINDOW, m_name, m_name, WS_OVERLAPPEDWINDOW, 0, 0, width, height, 54 NULL, NULL, m_hinstance, NULL); 55 //显示窗口设置其为焦点 56 ShowWindow(m_hwnd, SW_SHOW); 57 UpdateWindow(m_hwnd); 58 return true; 59 } 60 61 static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) 62 { 63 switch (message) 64 { 65 case WM_DESTROY: 66 PostQuitMessage(0); 67 return 0; 68 //其他消息发送MessageHandler处理 69 default: 70 return applicationHandle->MessageHandler(hwnd, message, wparam, lparam); 71 } 72 } 73 74 LRESULT CALLBACK MyWindow::MessageHandler(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) 75 { 76 switch (message) 77 { 78 //检测按键消息 79 case WM_KEYDOWN: 80 if (wparam == VK_ESCAPE)//用户按下退出键 81 isPushEsc = true; 82 return 0; 83 84 //其他消息发送windows缺省处理 85 default: 86 return DefWindowProc(hwnd, message, wparam, lparam); 87 } 88 } 89 90 void MyWindow::Run() 91 { 92 MSG msg; 93 ZeroMemory(&msg, sizeof(MSG)); 94 bool isRuning = true;//控制是否退出消息循环 95 while (isRuning) 96 { 97 //处理windows消息 98 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 99 { 100 TranslateMessage(&msg); 101 DispatchMessage(&msg); 102 } 103 if (msg.message == WM_QUIT) 104 { 105 isRuning = false; 106 } 107 else//按下esc键也退出 108 { 109 isRuning = !isPushEsc; 110 111 //渲染等处理可以放在这儿 112 } 113 114 } 115 }
main.cpp
1 /************************************************************************ 2 Directx11学习笔记【2】 将HelloWin封装成类 3 2016.01 by zhangbaochong 4 /************************************************************************/ 5 #include "MyWindow.h" 6 7 int WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) 8 { 9 int width = 800, height = 600; 10 MyWindow *window = new MyWindow; 11 if (window->Create(width, height)) 12 { 13 window->Run(); 14 } 15 return 0; 16 }
运行结果和上次一样:
Directx11学习笔记【二】 将HelloWin封装成类相关推荐
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...
- jquery学习笔记及常用函数封装
二.JQuery 学习笔记及常用函数封装 https://download.csdn.net/download/weixin_42530002/13087988 1.JQuery入门 (1).css选 ...
- Java学习笔记二:数据类型
Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)
Table of Contents appendTo appendTo(source, target) 源代码 append prependTo prependTo源码 prepend ...
- MATLAB学习笔记——二维和三维绘图
MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...
- pythonsze_python学习笔记二 数据类型(基础篇)
Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...
- 二维码学习笔记(二) | 数据分析与数据编码
唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...
最新文章
- Error:Unsupported method: BaseConfig.getApplicationIdSuffix(). The version o
- 一个用于录制用户输入操作并实时回放的小工具
- 三星emcp型号详解_嵌入式存储产品发展趋势:uMCP取代eMCP序幕拉开
- “sudo: go:找不到命令”完美解决方案
- Leaflet快速入门与加载OSM显示地图
- 【数据结构与算法】之深入解析“路径交叉”的求解思路与算法示例
- python函数type的用意_python中type()是什么意思
- 返回一个1到54之间的随机数
- c#之 quartz的学习
- apache log分析
- OpenCV-图像处理(03、Mat对象)
- 数据库执行update语句,一直执行不完【已解决】
- linux pid t 头文件_Linux中 pid_t 类型的定义.
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法
- matlab 密集,matlab – 全局和parfor
- HTML5入门 之下拉菜单
- 性能测试基础知识-华为云学院
- Processing 入门教程(二十一) 利用数组产生雪花坠落效果
- 安装ruby1.9.3-p0及redmon来监控redis
- 【观察】新华三:云智原生,重塑未来
热门文章
- 清除掉AD的相关属性!
- 安装Oracle数据库操作步骤
- HFileOutputFormat与TotalOrderPartitioner
- WebServices 基础知识
- 《高级软件架构师讲义》学习笔记5
- Source Insight 4.0安装教程(PS:附安装包及卸载重新安装等注意事项)
- 全国计算机等级考试题库二级C操作题100套(第20套)
- python输出可执行文件_重定向-禁止在Python调用中输出可执行文件
- 最新处理器排名_安兔兔Android处理器天梯榜发布:最强的还是它
- java swing事件_第四节 Java Swing事件处理