1)首先是switch消息的种类的展示:
1 switch(uMsg) 2 { 3 4 case WM_CREATE://初始化 5 break; 6 case WM_PAINT://窗口重绘,其实就是贴图 7 break; 8 case WM_KEYDOWN://键盘按键按下 9 break; 10 case WM_KEYUP://按键抬起 11 break; 12 case WM_LBUTTONDOWN://鼠标左键按下 13 break; 14 case WM_LBUTTONUP://鼠标左键抬起 15 break; 16 case WM_MOUSEMOVE://鼠标移动 17 break; 18 case WM_TIMER://定时器 19 break; 20 case WM_CLOSE://点那个×,窗口关闭 21 ::PostQuitMessage(0);//消息推出 22 break; 23 24 25 }
2)然后 就是 编写基类 就是父类,这个父类里卖弄有很多的虚函数
我建立了一个CGameCtrl.h的基类头文件
1 #pragma once 2 //上面的代码为了兼容C++ 3 4 5 6 7 //下面的是兼容C编译器 8 #ifndef _CGAMECTRL_ 9 #define _CGAMECTRL_ 10 class CGameCtrl 11 { 12 //此处写的纯虚函数,子类必须他们全部重写 13 public: 14 void virtual OnCreateGame()=0;//这个给WM_CREATE 15 void virtual GameDraw()=0;//这个给WM_PAINT 16 void virtual GameRun()=0;//这个给WM_TIMER 17 void virtual OnKeyDown()=0; 18 void virtual OnKeyUp()=0; 19 void virtual OnLbuttonDown()=0; 20 void virtual OnLbuttonUp()=0; 21 void virtual OnMouseMove()=0; 22 23 } 24 25 #endif
但是 要是基类的函数全部是纯虚函数,那么子类就必须实现,所以 我可以将创虚函数做点修改:
1 #pragma once 2 //上面的代码为了兼容C++ 3 4 5 6 7 //下面的是兼容C编译器 8 #ifndef _CGAMECTRL_ 9 #define _CGAMECTRL_ 10 class CGameCtrl 11 { 12 13 //这样改写 子类中 就没必要全部重写这些函数了,因为有的子类用到键盘,有的用不到,那么下面的这种写法 ,就避免了 不用OnKeyDown()函数的类去改写这个函数 14 public: 15 void virtual OnCreateGame(){} 16 void virtual GameDraw(){} 17 void virtual GameRun(){} 18 void virtual OnKeyDown(){} 19 void virtual OnKeyUp(){} 20 void virtual OnLbuttonDown(){} 21 void virtual OnLbuttonUp(){} 22 void virtual OnMouseMove(){} 23 24 } 25 26 #endif