/**************/ /* kolmiomt.c */ /***************************************************************************** PROGRAM: kolmiomt.c PURPOSE: Yksinkertainen ohjelma, jossa mukana tulostus. Kirjoitetaan tiedosto, jossa on funktiot MyDraw (esimerkki tiedostossa kolmiom.c) ja tehdään projekti, jossa on tiedostot kolmiomt.c kolmiom.c tulostus.def ALI\tabhand.c ALI\tulostus.c ALI\checker.c ALI\tulostus.rc ALI\timer.c ja käännetään! Siinä se! Alla olevaan koodiin on kommentoitu t jos rivi on lisätty tulostuksen takia ja m jos lisätty moniajon takia. 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; ----------------------------------------------------------------------------- Tulostuksen takia on lisätty aliohjelmat: StartPrinting StopPrinting PrinterSetup Pelkän tulostamisen lisäämiseksi ei tarvitse lisätä välttämättä muuta kuin if ( ( hDCPrinter = StartPrinting(hWnd) ) != NULL ) { MyDraw(hWnd,hDCPrinter); StopPrinting(hDCPrinter); } Eli tulostuksen takia ei moniajorivejä tarvita, eikä kääntäen, mutta jollei moniajorivejä ole, tulee hankaluuksia joskus, kun ohjelma sammutetaan kesken tulostuksen (resursseja saattaa jäädä vapauttamatta). Jos halutaan moniajo, pitää tulostuksen takia moniajon tarkistuksessa valvoa myös GP.Printing -lippua, jottei rekursiivisesti kutsuta piirto-ohjelmaa! Tästä seuraa se, että myös WM_PAINT -viesti pitää muuttaa viivästytesti suoritettavaksi. Editor: Vesa Lappalainen 10.9.1992 ja tulostus 30.10.1992 & -94 taulukko *****************************************************************************/ #include #include #include "tabhand.h" #include "tulostus.h" #include "tulmenu.h" #include "checker.h" #include "samplewm.h" #include "timer.h" /****************************************************************************/ TblClassSWindowMAIN_C("TulostusWMClass","ikoni","Malli tulostus",MsgTbl,0); /****************************************************************************/ static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ { char s[100]; SetWindowText(msg->hWnd,"Piirretään..."); start_timer(1); MyDraw(msg->hWnd,msg->hDC); sprintf(s,"Aikaa meni: %4.2lf s.",stop_timer(1)); SetWindowText(msg->hWnd,s); return 0; } static EVENT WM_command_IDM_FILE_PRINT(tMSGParam *msg) /* t */ { HDC hDCPrinter; if ( ( hDCPrinter = StartPrinting(msg->hWnd,PSC_DISPLAY) ) == NULL ) return 1; MyDraw(msg->hWnd,hDCPrinter); StopPrinting(msg->hWnd,hDCPrinter); return 0; } static EVENT WM_command_IDM_FILE_PRINTER_SETUP(tMSGParam *msg) /* t */ { SetupPrinter(1); (void)msg; return 0; } static EVENT WM_create(tMSGParam *msg) { SetMenu(msg->hWnd,LoadMenu(GetWindowInstance(msg->hWnd),"printmenu")); return 0; } /****************************************************************************/ /* Viestien käsittelytaulukko */ /****************************************************************************/ tMSGEntry MsgTbl[] = { EV_HANDLE_WM_DESTROY, { WM_COMMAND , IDM_FILE_EXIT , DoC , EVENT_handler_WM_destroy }, { WM_PAINT , DoC , DoC , WM_paint, MAKE_DC }, /*a*/ { WM_COMMAND , IDM_FILE_PRINT , DoC , WM_command_IDM_FILE_PRINT }, /*a*/ { WM_COMMAND , IDM_FILE_PRINTER_SETUP , DoC , WM_command_IDM_FILE_PRINTER_SETUP }, /*a*/ { WM_CREATE , DoC , DoC , WM_create }, /*a*/ { 0 } }; /****************************************************************************/