1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); //Class CObject class CObject{ protected: static char szAppName[]; HWND hwnd; MSG msg; WNDCLASSEX wndclass; public: void InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow); void Run();//Message WPARAM ExitInstance(); //exit //message handler virtual void OnCreate() = 0; virtual void OnDraw() = 0; virtual void OnDestroy() = 0; }; void CObject::InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow) { wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Hello Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); } void CObject::Run(){ while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } } WPARAM CObject::ExitInstance(){ return msg.wParam; } char CObject::szAppName[]="HelloWin"; CObject* pCObject; //class CView class CView:public CObject{ //override all message handler void OnCreate(); void OnDraw(); void OnDestroy(); }; void CView::OnCreate(){ } void CView::OnDraw() { HDC hdc; PAINTSTRUCT ps; RECT rect; hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc,"Hello Window",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); } void CView::OnDestroy() { PostQuitMessage(0); } CView app; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { switch(iMsg){ case WM_CREATE: pCObject->OnCreate(); //CObject* pCObject; return 0; case WM_PAINT: pCObject->OnDraw(); return 0; case WM_DESTROY: pCObject->OnDestroy(); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { pCObject = &app; // CView app; pCObject->InitInstance(hInstance,szCmdLine,iCmdShow); pCObject->Run(); return pCObject->ExitInstance(); } |