应用程序主函数的C++类封装
所谓面向对象思想,就是按照功能把程序分成一个一个对象(Object),然后用类来描述这些对象。对Windows程序的主函数进行分析,主函数的功能就是两个:创建窗口和消息循环。既然窗口是由主函数所创建的,那就意味着窗口就是一个对象(Object)。接下来,我们用C++类对原来的Windows程序进行重构。重构后,将会得到三个类:窗口类CFrameWnd、应用程序类CWinApp和命令目标类CCmdTarget。
1.窗口类
窗口对象所对应的类叫做窗口类。作为窗口类,它应该包含窗口句柄及与其相关的操作函数,即它应该以一个HWND类型的窗口句柄hWnd作为该类的数据成员,另外还要以窗口类注册、窗口创建和显示等函数作为它的函数成员。其类代码如下:
//窗口类CFrameWnd的声明
class CFrameWnd
{
public:
HWND hWnd; //数据成员
public:
int RegisterWindow(); //注册窗口类函数的声明
void Create( //窗口创建函数的声明
LPCTSTR lpClassName, LPCTSTR lpWindowName);
void ShowWindow(int nCmdShow);//显示窗口函数的声明
void UpdateWindow();
};
//窗口类的成员函数
//注册窗口类函数的实现
int CFrameWnd::RegisterWindow()
{
WNDCLASS wc; //定义窗口类的结构
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = lpszClassName;
wc.lpszMenuName = NULL;
wc.style = 0;
return RegisterClass(&wc); //注册窗口类
}
//窗口创建函数的实现
void CFrameWnd::Create(LPCTSTR lpClassName,
LPCTSTR lpWindowName)
{
RegisterWindow();
hInst = hInstance;
hWnd = CreateWindow(lpszClassName, lpWindowName, WS_OVERLAPPEDWINDOW,