Directx学习笔记【二】 将win32基本框架封装成类
来源:互联网 发布:传奇霸业翅膀升级数据 编辑:程序博客网 时间:2024/05/01 16:20
为了在之后的编程更加方便,所以现在将win32的基本框架封装一个类。
myWindow.h:
#pragma once#include <Windows.h>static bool isPushEsc = false;//是否按下Escclass myWindow{public:myWindow(void);~myWindow(void);public:HWND GetHandle();//返回窗口句柄bool Create(int &width,int &height);//创建窗口void Run();//处理消息循环LRESULT CALLBACK MessageHandler(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);//消息处理private:LPCWSTR w_name;//窗口类的名字HINSTANCE w_instance;//应用程序的实例句柄HWND w_hwnd;//窗口句柄};
myWindow.cpp:
因为定义窗口的时候必须指定一个回调函数,所以我们定义一个静态的WndProc,因为在WndProc中需要调用其他消息的处理函数MessageHandler,所以我们又定义一个类的实例句柄applicationHandle。
#include "myWindow.h"static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);//静态回调函数static myWindow *applicationHandle;//类的一个静态实例myWindow::myWindow(void){isPushEsc = false;w_hwnd = NULL;w_name = L"Hello World";}myWindow::~myWindow(void){}HWND myWindow::GetHandle(){return w_hwnd;}bool myWindow::Create(int &width,int &heigh){w_instance = GetModuleHandle(NULL);//得到程序实例句柄applicationHandle = this;w_name = L"Hello world";WNDCLASSEX wnd;//定义一个窗口类 wnd.cbSize = sizeof(WNDCLASSEX);//窗口大小wnd.cbClsExtra = 0;//附加字节,一般为0 wnd.cbWndExtra = 0;//附加字节,一般为0 wnd.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//窗口画刷颜色 wnd.hCursor = LoadCursor(NULL,IDC_ARROW);//窗口中光标的风格 wnd.hIcon = LoadIcon(NULL,IDI_WINLOGO);//窗口图标,可以在资源视图中改 wnd.hIconSm = wnd.hIcon;//窗口小图标 wnd.hInstance = w_instance;//实例句柄 wnd.lpfnWndProc = WndProc;//窗口过程函数,下面有定义wnd.lpszClassName = w_name;//窗口类名称 wnd.lpszMenuName = w_name;//菜单资源名称,可以在资源视图中改 wnd.style = CS_HREDRAW | CS_VREDRAW;//窗口风格,用|符号能够同时选中,具体类型看下面的图 //注册窗口类if(!RegisterClassEx(&wnd)){MessageBox(NULL,L"注册窗口失败!",L"Hello world",0);return 0;}//创建窗口w_hwnd = CreateWindowEx(WS_EX_APPWINDOW,w_name,w_name,WS_OVERLAPPEDWINDOW,300,200,800,600,NULL,NULL,w_instance,NULL);//显示窗口创建为焦点ShowWindow(w_hwnd,SW_SHOW);SetForegroundWindow(w_hwnd);SetFocus(w_hwnd);//隐藏鼠标SetCursor(false);return true;}LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){switch(msg){case WM_DESTROY:PostQuitMessage(0);return 0;default:return applicationHandle->MessageHandler(hwnd,msg,wParam,lParam);}}LRESULT CALLBACK myWindow::MessageHandler(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam){switch(message){case WM_KEYDOWN:if(wparam == VK_ESCAPE)isPushEsc = true;return 0;default:return DefWindowProc(hwnd,message,wparam,lparam);}}void myWindow::Run(){MSG msg;//初始化消息函数ZeroMemory(&msg,sizeof(MSG));bool isRuning = true;while(isRuning){if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//发送消息给窗口过程 }if(msg.message == WM_QUIT){isRuning == false;}else {isRuning = !isPushEsc;//Do someting}}}
main.cpp:
#pragma once#include "myWindow.h"myWindow* window;int WINAPI WinMain(HINSTANCE hInstance,//当前运行的实例句柄HINSTANCE hPrevInstance,//当前运行的实例句柄的前一个句柄LPSTR lpCmdLine,//一个以空终止的字符串,指定传递给应用程序的命令行参数。int nCmdshow//指定程序的窗口应该如何显示){int width = 800,height = 600;window = new myWindow;if(window->Create(width,height)){window->Run();}return 0;}
0 0
- Directx学习笔记【二】 将win32基本框架封装成类
- DirectX 3D 基本框架(二)
- DirectX 学习二:简单的封装
- Windows 8 Directx开发学习笔记(一)应用基本框架
- 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架
- 阿辉DirectX 11学习笔记二
- 学习Windows Mobile开发系列笔记(win32基本程序框架)
- ASP.NET Ajax学习笔记二(Ajax基本框架)
- Win32学习笔记——win32主框架
- DirectX学习笔记--3D基本数学知识整理
- Win32汇编学习笔记(二)
- Win32汇编学习笔记(二)
- libusb-win32学习笔记(二)
- 《win32多线程程序设计》学习笔记二
- DirectX SDK 2006学习笔记1——框架
- WIN32 基本应用框架
- win32基本框架
- Win32 Application基本框架
- 机器学习领域的五大流派
- 有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值?
- 多重背包模板
- openwrt 开机启动
- 模拟strstr函数
- Directx学习笔记【二】 将win32基本框架封装成类
- Java中的位运算机制详解
- Qt之国际化--多语言动态切换
- (中国剩余定理模版)hdoj 5768 Lucky7
- 深度学习-LeCun、Bengio和Hinton的联合综述(上)
- Linux mint17操作系统下mentohust校园网认证解决方法
- POJ 1252 DP
- HDU - 5711 Ingress DP+Flody+贪心
- 深度学习-LeCun、Bengio和Hinton的联合综述(下)