/**************/ /* mopocad.c */ /****************************************************************************/ /* ** MopoCad eli alkeellinen piirto-ohjelma ** ** Projekti: mopocad.c, demo.def, ALI\tabhand.c ** ----------------------------------------------------------------------------*/ #include #include "tabhand.h" /****************************************************************************/ TblClassSWindowMAIN("TblMopoCadClass",NULL,"MopoCad",MsgTbl,0); /****************************************************************************/ #define MAXKOKO 10 static int lkm = 0; static POINTS pisteet[MAXKOKO]; /* Taulukkoon merkitään negatiivinen x-koordinaatti, jos ** pitää tehdä MoveTo eikä LineTo */ /****************************************************************************/ static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ { int i; for (i=0; ihDC,-1*pisteet[i].x,pisteet[i].y,NULL); else LineTo(msg->hDC,pisteet[i].x,pisteet[i].y); return 0; } static POINTS old = {0,0}; static pen_down = 0; /****************************************************************************/ static EVENT WM_lbuttondown(tMSGParam *msg) { old = MAKEPOINTS(msg->lParam); if ( lkm < MAXKOKO ) pisteet[lkm++]=old; pisteet[lkm-1].x *= -1; pen_down = 1; return 0; } /****************************************************************************/ static EVENT WM_lbuttonup(tMSGParam *msg) { (void)msg; pen_down = 0; return 0; } /****************************************************************************/ static EVENT WM_mousemove(tMSGParam *msg) /* # MAKE_DC # */ { POINTS pt = MAKEPOINTS(msg->lParam); if ( !pen_down ) return 0; MoveTo(msg->hDC,old.x,old.y); LineTo(msg->hDC,pt.x,pt.y); old = pt; if ( lkm < MAXKOKO ) pisteet[lkm++]=pt; return 0; } /****************************************************************************/ /* Viestien käsittelytaulukko */ /****************************************************************************/ tMSGEntry MsgTbl[] = { EV_HANDLE_WM_DESTROY, { WM_PAINT , DoC , DoC , WM_paint, MAKE_DC }, /*a*/ { WM_LBUTTONDOWN , DoC , DoC , WM_lbuttondown }, /*a*/ { WM_LBUTTONUP , DoC , DoC , WM_lbuttonup }, /*a*/ { WM_MOUSEMOVE , DoC , DoC , WM_mousemove, MAKE_DC }, /*a*/ { 0 } }; /****************************************************************************/