#include // otsikkotiedoston lisäys #include // otsikkotiedoston lisäys LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; // ikkunaproseduurin esittely HINSTANCE hInstance; // globaali ohjelman ilmentymän kahva int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "Ruudunkoko" ; // 'ohjelman nimi' HWND hwnd ; // kahvamuuttuja MSG msg ; // sanomastrukstuuri WNDCLASSEX wndclass ; // ikkunan luokkastruktuuri wndclass.cbSize = sizeof (wndclass) ; // struktuurin koko wndclass.style = CS_HREDRAW | CS_VREDRAW ; // ikkunan tyyli wndclass.lpfnWndProc = WndProc ; // ikkunaproseduurin nimi wndclass.cbClsExtra = 0 ; // ikkunan luokan sisältä ohjelman... wndclass.cbWndExtra = 0 ; // ...omaan käyttöön varattua tilaa wndclass.hInstance = hInstance ; // lomakkeen kahva wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; // ikoni wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; // kursori wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW ; // taustaväri wndclass.lpszMenuName = NULL ; // valikon kahva wndclass.lpszClassName = szAppName ; // ikkunan luokan nimi wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; // pieni ikoni RegisterClassEx (&wndclass) ; // ikkunan luokan rekisteröinti hwnd = CreateWindow (szAppName, // ikkunan luokan nimi "Ruudun koon tarkastelu", // ikkunan otsikko WS_OVERLAPPEDWINDOW, // ikkunan tyyli CW_USEDEFAULT, // x-positio aluksi CW_USEDEFAULT, // y-positio aluksi 500, // leveys aluksi 300, // korkeus aluksi NULL, // emoikkunan kahva NULL, // ikkunan valikon kahva hInstance, // ohjelman ilmentymän kahva NULL) ; // luontiparametrit ShowWindow (hwnd, iCmdShow) ; // ikkunan piirto UpdateWindow (hwnd) ; // ikkunan päivitys while (GetMessage (&msg, NULL, 0, 0)) // sanomasilmukan alku { TranslateMessage (&msg) ; // viestien käsittely ja... DispatchMessage (&msg) ; // ...ikkunaproseduurin kutsu } return msg.wParam ; // käyttöjärjestelmälle palautettava arvo } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hdc ; // piirtopinnan kahva struktuuri PAINTSTRUCT ps ; // maalausstruktuuri RECT rect; // RECT-struktuuria käytetään GetClientRect() funktiossa static char bufferi[20]; switch (iMsg) // sanomien käsittelyrakenne { case WM_PAINT : // maalaussanoman käsittely hdc = BeginPaint (hwnd, &ps) ; // aloitetaan piirto SetBkMode(hdc, TRANSPARENT); // tekstin taustaväri läpinäkyväksi GetClientRect (hwnd, &rect); // kysytään ruudun koko ja talletetaan se rect muuttujaan wsprintf (bufferi, "%3d", GetSystemMetrics(SM_CXSCREEN)); // kopioidaan ruudun leveys bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " ruudun leveys"); // liitetään teksti "ruudun leveys" numeron perään TextOut (hdc, rect.left, rect.bottom/2-30, bufferi, 17); // tulostetaan teksti bufferista vasempaan reunaan ja 30 ylöspäin keskikohdasta wsprintf (bufferi, "%3d", GetSystemMetrics(SM_CYSCREEN)); // kopioidaan ruudun korkeus bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " ruudun korkeus"); // liitetään teksti "ruudun korkeus" numeron perään TextOut (hdc, rect.left, rect.bottom/2-10, bufferi, 18); // tulostetaan teksti bufferista vasempaan reunaan ja 10 ylöspäin keskikohdasta wsprintf (bufferi, "%3d", rect.right); // kopioidaan ikkunan leveys bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " ikkunan leveys"); // liitetään teksti "ikkunan leveys" numeron perään TextOut (hdc, rect.left, rect.bottom/2+10, bufferi, 18); // tulostetaan teksti bufferista vasempaan reunaan ja 10 alaspäin keskikohdasta wsprintf (bufferi, "%3d", rect.bottom); // kopioidaan ikkunan korkeus bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " ikkunan korkeus"); // liitetään teksti "ikkunan korkeus" numeron perään TextOut (hdc, rect.left, rect.bottom/2+30, bufferi, 19); // tulostetaan teksti bufferista vasempaan reunaan ja 30 alaspäin keskikohdasta EndPaint (hwnd, &ps) ; // lopetetaan piirto return 0 ; // pois ikkunaproseduurista case WM_DESTROY : // lopetussanoman käsittely PostQuitMessage (0) ; // lopetusviesti Windowsille return 0 ; // pois ikkunaproseduurista } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; // sanomien oletuskäsittely }