#include "framework.h"
#include "WindowsProject2.h"
#include"CApplication.h"CApplication g_App;
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR lpCmdLine,_In_ int nCmdShow)
{g_App.m_hInstance = hInstance;g_App.InitInstance();g_App.MessageLoop();return g_App.EXitInstance();
}
#pragma once
#include"Resource.h"
#include<Windows.h>
#include"CMainWindow.h"
class CApplication
{
public:static INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;}virtual BOOL InitInstance() {LoadStringW(m_hInstance, IDS_APP_TITLE, m_szTitle,MAXBYTE);LoadStringW(m_hInstance, IDC_WINDOWSPROJECT2, m_szWindowClass, MAXBYTE);WNDCLASSEXW wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = m_hInstance;wcex.hIcon = LoadIcon(m_hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT2));wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT2);wcex.lpszClassName = m_szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));RegisterClassExW(&wcex);HWND hWnd = CreateWindowW(m_szWindowClass, m_szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, m_hInstance, nullptr);if (!hWnd){return FALSE;}ShowWindow(hWnd, SW_SHOWNORMAL);UpdateWindow(hWnd);HACCEL hAccelTable = LoadAccelerators(m_hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT2));return TRUE;}static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){LRESULT Result = FALSE;switch (message){case WM_CREATE:if (m_pMainWindow == nullptr){m_pMainWindow = new CMainWindow(hWnd);}Result = m_pMainWindow->OnCreate(wParam, lParam);break;case WM_COMMAND:Result = m_pMainWindow->OnCommand(wParam, lParam);break;case WM_PAINT:Result = m_pMainWindow->OnPaint(wParam, lParam);break;case WM_DESTROY:Result = m_pMainWindow->OnDestory(wParam, lParam);break;case WM_KEYDOWN:Result = m_pMainWindow->OnKeydown(wParam, lParam);break;case WM_KEYUP:Result = m_pMainWindow->OnKeyUp(wParam, lParam);break;case WM_TIMER:Result = m_pMainWindow->OnTimer(wParam, lParam);break;case WM_CLOSE:Result = m_pMainWindow->OnClose(wParam, lParam);break;}if (!Result){return DefWindowProc(hWnd, message, wParam, lParam);}return Result;}virtual BOOL EXitInstance() {delete m_pMainWindow;return 0;}BOOL MessageLoop() {MSG msg;while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, m_hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return TRUE;}
public:HINSTANCE m_hInstance;WCHAR m_szTitle[MAXBYTE]; // 标题栏文本WCHAR m_szWindowClass[MAXBYTE]; // 主窗口类名HACCEL m_hAccelTable;static CWindow* m_pMainWindow;
};
#pragma once
#include "CWindow.h"
class CMainWindow :public CWindow
{
public:CMainWindow(HWND hWnd):CWindow(hWnd){ }virtual BOOL OnCreate(WPARAM wParam, LPARAM lparam);virtual BOOL OnDestory(WPARAM wParam, LPARAM lparam);virtual BOOL OnClose(WPARAM wParam, LPARAM lparam);
};
#include "CMainWindow.h"BOOL CMainWindow::OnCreate(WPARAM wParam, LPARAM lparam)
{MessageBox(NULL,"chong","hello", MB_OK);return TRUE;
}BOOL CMainWindow::OnDestory(WPARAM wParam, LPARAM lparam)
{PostQuitMessage(0);return TRUE;
}BOOL CMainWindow::OnClose(WPARAM wParam, LPARAM lparam)
{return FALSE;
}
#include "CApplication.h"
CWindow* CApplication::m_pMainWindow = nullptr;
#pragma once
#include<Windows.h>
class CWindow
{
public:CWindow(HWND hWnd){m_hWnd = hWnd;}virtual BOOL OnCreate(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnDestory(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnClose(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnKeydown(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnKeyUp(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnTimer(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnCommand(WPARAM wParam, LPARAM lparam){return FALSE;}virtual BOOL OnPaint(WPARAM wParam, LPARAM lparam){return FALSE;}
public:HWND m_hWnd;
};
CMianWindow继承的是CWindow基类
注意一下:static要在CPP里面实例化