/**************************************************************************** PROGRAM: fhello.c PURPOSE: "Pienin Windows-ohjelma". Tulostaa näyttöön tekstin Hello World Toteutettu ilman switch-lausetta. Editor: Vesa Lappalainen typistänyt malliohjelmista. (mm. Jere Käpyaho, Tietokone 11/92, s. 102) ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ typedef LONG (*MSGHANDLER)(HWND,UINT,WPARAM,LPARAM); typedef struct { UINT message; MSGHANDLER handler; } MSGEntry; #define DEFRETURN (-1L) /***************************************************************************/ LONG HANDLER_WM_Paint(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { #pragma argsused PAINTSTRUCT ps; if ( BeginPaint(hWnd,&ps) ) TextOut(ps.hdc, 10, 10, "Hello World!",12); EndPaint(hWnd,&ps); return NULL; } /***************************************************************************/ LONG HANDLER_WM_Destroy(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { #pragma argsused PostQuitMessage(0); return NULL; } /***************************************************************************/ /* Viestien käsittelyfunktioiden taulukko */ MSGEntry MsgTbl[] = { {WM_PAINT, HANDLER_WM_Paint }, {WM_DESTROY, HANDLER_WM_Destroy }, {NULL, NULL } }; /***************************************************************************/ LONG CALLBACK _export MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int i; LONG ret; for (i=0; MsgTbl[i].handler; i++) if ( message == MsgTbl[i].message ) { ret = MsgTbl[i].handler(hWnd,message,wParam,lParam); if ( ret != DEFRETURN ) return ret; break; } return DefWindowProc(hWnd, message, wParam, lParam); } /***************************************************************************/ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { #pragma argsused WNDCLASS wc; /* Ikkunaluokka */ HWND hWnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ if (!hPrevInstance) { /* Onko muita esiintymiä käynnisssä? */ wc.style = NULL; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "WHelloWClass"; if (!RegisterClass(&wc)) return (FALSE); } hWnd = CreateWindow("WHelloWClass","Windows Hello",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); if (!hWnd) return (FALSE); ShowWindow(hWnd, nCmdShow); /* Näytetään ikkuna */ UpdateWindow(hWnd); /* Lähetetään WM_PAINT viesti */ while (GetMessage(&msg,NULL,NULL,NULL)) { TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ } return (msg.wParam); /* Palautetaan PostQuitMessage-funktion arvo */ }