当自定义一个窗口类时,通常将类的某一个成员函数作为窗口过程。但在C++类中,所有的窗口过程或者回调函数只能是静态的。如此一来,在窗口过程或回调函数中被访问到的所有成员均被迫定义成静态的(因为静态函数只能调用同样为静态的函数或访问静态的变量),这往往不能满足我们的程序设计要求。下面我们以窗口过程为例介绍如何避免这种限制,即实现在静态的窗口过程函数中调用非静态的成员函数。
//in MainProgram.cpp
#include <windows.h>
#include "CustomWnd.h"
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
CCustomWnd wnd,wnd2;
wnd.Create();
wnd2.Create();
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//in CustomWnd.h
#pragma once
#include <windows.h>
#include <tchar.h>
#include <assert.h>
#define CLASSNAME _T("CUSTOM_CLASS_NAME")
#define WINDOWNAME _T("CustomWnd")
class CCustomWnd
{
public:
CCustomWnd(HWND hParentWnd=NULL);
~CCustomWnd(void);
private:
//the count of windows
static int cWnd;
private:
H