/**************/ /* nayttote.c */ /***************************************************************************** PROGRAM: nayttote.c PURPOSE: Yksinkertainen näyttökortin testausohjelma.s Usage: nayttote [lkm] [xkoko] [ykoko] [max_time] oletukset lkm = 10 xkoko = 640 ykoko = 480 max_time = 100 (sek/yksi testi) Tähän versioon on lisätty viestijonon tarkistusaliohjelma, jonka avulla pitkät piirtosilmukat saadaan keskeytetyksi ja näin "moniajo" voi jatkua. Ohjelman kirjoittajan on lisättävä piirron pitkiin silmukoihin kutsu if ( CheckMessage() ) lopetetaan_piirto; Editor: Vesa Lappalainen 25.12.1992 *****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include #include #include "tulostus.h" #include "nayttotes.h" #include "checker.h" #define MAINWNAME "TestWMClass"/* Tunniste, jolla ikkunaluokka tunnetaan*/ #define WindowName "Näyttötesti versio 0.1/vl" #define CALLBACK_E CALLBACK _export /****************************************************************************/ LONG CALLBACK_E MainWndProcS(HWND hWnd, unsigned message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; CHECK_CHECKER_WIN(hwnd,message,wParam,lParam); switch (message) { case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( BeginPaint(hWnd,&ps) ) { MyDraw(hWnd,ps.hdc); CheckEndPaint(hWnd,&ps); } /* m */ 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(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; /* Ikkunaluokka */ HWND hWnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ int t = 0, mx=640, my=480, max_time=100; char s[100]; _fstrncpy(s,lpCmdLine,sizeof(s)); sscanf(s,"%d %d %d %d",&t,&mx,&my,&max_time); if (!hPrevInstance) { /* Onko muita esiintymiä käynnisssä? */ wc.style = NULL; wc.lpfnWndProc = MainWndProcS; 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, 0,0,mx,my, NULL,NULL,hInstance,NULL); if (!hWnd) return (FALSE); ShowWindow(hWnd, nCmdShow); /* Näytetään ikkuna */ UpdateWindow(hWnd); /* Lähetetään WM_PAINT viesti */ DoTests(hInstance,hWnd,t,mx,my,max_time); PostMessage(hWnd,WM_DESTROY,0,0); while (GetMessage(&msg,NULL,NULL,NULL)) { TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ CheckDelayMessages(hWnd); /* m */ } return (msg.wParam); /* Palautetaan PostQuitMessage-funktion arvo */ }