/**************/ /* samplew2.c */ /***************************************************************************** PROGRAM: samplew2c PURPOSE: Runko yksinkertaisille Windows-ohjelmille. Kirjoitetaan tiedosto, jossa on funktiot MyMove (kun hiiri liikkunut) MyDown (kun hiiren näppäin alhaalla) MyUp (kun hiiren nappi päästetty ylös) ja MyDraw (vaikkapa tiedostoon myown.c) sekä merkkijono WindowName ja tehdään projekti, jossa on tiedostot samplew.c myown.c samplew.def ja käännetään! Siinä se! Tässä versiossa WMPAINT viestissä luodaan oma koko ikkunan täyttävä laiteyhteys. Näin MyDraw on periaatteessa hitaampi kuin varsinaisessa versiossa. Editor: Vesa Lappalainen 15.8.1992 *****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #define MAINWNAME "SampleWClass" /* Tunniste, jolla ikkunaluokka tunnetaan */ extern char *WindowName; extern void MyDraw(HWND hWnd, HDC hDC); extern void MyDown(HWND hWnd, WORD wParam, LONG lParam); extern void MyUp (HWND hWnd, WORD wParam, LONG lParam); extern void MyMove(HWND hWnd, WORD wParam, LONG lParam); /****************************************************************************/ LONG FAR PASCAL MainWndProc(HWND hWnd, unsigned message, WORD wParam, LONG lParam) { HDC hDC; switch (message) { case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( ( hDC = GetDC(hWnd) ) != NULL ) { MyDraw(hWnd,hDC); ReleaseDC(hWnd,hDC); } break; case WM_LBUTTONDOWN: /* Hiiren vasen nappi alas: */ MyDown(hWnd,wParam,lParam); return (NULL); case WM_LBUTTONUP: /* Hiiren vasen nappi ylös: */ MyUp(hWnd,wParam,lParam); return (NULL); case WM_MOUSEMOVE : /* Hiirtä siirretty: */ MyMove(hWnd,wParam,lParam); return (NULL); case WM_DESTROY: /* Viesti: ikkuna hävitetään */ PostQuitMessage(0); return (NULL); default: /* Antaa Windowsin käsitellä muut */ break; } return (DefWindowProc(hWnd, message, wParam, lParam)); } /****************************************************************************/ int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; /* Ikkunaluokka */ HWND hWnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ if (lpCmdLine); /* Hämäystä, jottei valitusta param. käytt. */ 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 = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = MAINWNAME; if (!RegisterClass(&wc)) return (FALSE); } hWnd = CreateWindow(MAINWNAME,WindowName,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 */ }