域名注册好了怎么打开网站,网站底部图标,WordPress图床工具,php网站开发的成功经历我们把上一个教程的代码封装到一个类中来方便以后的使用。 首先新建一个空工程叫做MyHelloWin#xff0c;添加一个main.cpp文件#xff0c;然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 MyWindow.h文件 1 /***************************************************…我们把上一个教程的代码封装到一个类中来方便以后的使用。 首先新建一个空工程叫做MyHelloWin添加一个main.cpp文件然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 MyWindow.h文件 1 /************************************************************************2 Directx11学习笔记【2】 将HelloWin封装成类3 2016.01 by zhangbaochong4 /************************************************************************/5 #pragma once6 #include windows.h7 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.h7 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 LHelloWin;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注册窗口失败, Lerror, 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 zhangbaochong4 /************************************************************************/5 #include MyWindow.h6 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 } 运行结果和上次一样