| 
              例如,下面的程序可以正常运行:#include <Windows.h>
 
 class MyClass : public WNDCLASSEX
 {
 protected:
 HWND hWnd;
 public:
 LPTSTR szTitle;
 
 MyClass();
 void Register();
 void Create(int nCmdShow);
 int Loop();
 
 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 };
 
 // 构造函数
 MyClass::MyClass()
 {
 cbSize = sizeof(WNDCLASSEX);
 cbClsExtra = 0;
 cbWndExtra = 0;
 hbrBackground = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
 hCursor = LoadCursor(NULL, IDC_ARROW);
 hIcon = LoadIcon(NULL, IDI_APPLICATION);
 hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 hInstance = hInstance;
 lpfnWndProc = WndProc; // 子类不能直接重写父类的lpfnWndProc, 否则创建窗口会失败
 lpszClassName = TEXT("MyClass");
 lpszMenuName = NULL;
 style = NULL;
 }
 
 void MyClass::Register()
 {
 if (!RegisterClassEx(this))
 exit(0);
 }
 
 void MyClass::Create(int nCmdShow)
 {
 hWnd = CreateWindow(TEXT("MyClass"), szTitle, WS_OVERLAPPEDWINDOW, 100, 100, 640, 480, NULL, NULL, hInstance, NULL);
 if (!hWnd)
 exit(0);
 ShowWindow(hWnd, nCmdShow);
 UpdateWindow(hWnd);
 }
 
 int MyClass::Loop()
 {
 MSG msg;
 while (GetMessage(&msg, NULL, 0, 0))
 {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 return msg.wParam;
 }
 
 LRESULT CALLBACK MyClass::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
 switch (uMsg)
 {
 case WM_DESTROY:
 PostQuitMessage(0);
 break;
 default:
 return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
 return FALSE;
 }
 
 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
 {
 MyClass cls;
 cls.szTitle = TEXT("窗口标题");
 cls.Register();
 cls.Create(nCmdShow);
 return cls.Loop();
 }
 
 |