/****************/ /* MopoCad.CPP */ /****************/ // Esimerkki Windows++ APF:n käytöstä. // Ohjelmalla piirretään viivaa kun hiiri pidetään pohjassa. // Borland C++:ssa pitää olla // Compiler: Smart Callbacks, Large Model define: USEDLL // Linker: Case-sensitive exports // Jos olisi käytetty oikeita nimiä, olisi menu ja sen // käsitely Exitin ja Aboutin kohdalta tullut automaattisesti. // Samoin About dialogi olisi toiminut automaattisesti. // Pääikkunan ei olisi tarvinnut koko command-metodia. #include #include #include "..\mopocad.rh" /********************* Luokat: *********************************************/ APPCLASS TMainWindow : public WPMainWin { GPShapeList shapes; WPPoint old; // edellinen piste int ButtonDown; // Onko hiiren nappi alhaalla void DeleteAllPoints() { shapes.deleteAll(); } void ClearWindow() { DeleteAllPoints(); invalidate(TRUE); } public: TMainWindow(); ~TMainWindow() { DeleteAllPoints(); } void paint(WPPaintStruct &ps) { shapes.paint(ps); } BOOL command(int id, WORD msg); BOOL mouse(int msg, WPPoint p, WORD flags); }; APPCLASS TDLG_AboutDlg : public WPDialogModal { // Tässä esim. tarpeeton public: TDLG_AboutDlg(char *name,WPWin *pwin): WPDialogModal(name, pwin) { createWin();} //~TDLG_ABoutDlg(); BOOL command(int id, WORD msg); }; /********************* TDLG_AboutDlg metodit: ******************************/ BOOL TDLG_AboutDlg::command(int id, WORD) { switch ( id ) { case IDCANCEL: case IDOK: destroyWin(); return TRUE; } return TRUE; } /********************* TMainWindow metodit *********************************/ TMainWindow::TMainWindow( ) : WPMainWin("WPPMopoCad") { App.loadAccel("Pika"); createArgs.wndcls.hIcon = App.loadIcon("Ikoni"); createArgs.wndcls.lpszMenuName = "Paamenu"; createArgs.wndcls.style |= CS_OWNDC; createWin("MopoCad"); ButtonDown = FALSE; } BOOL TMainWindow::command(int id, WORD msg) { switch (id) { case CM_FILE_EXIT: close(); return TRUE; case CM_HELP_ABOUT: TDLG_AboutDlg about("DLG_ABOUT",this); return TRUE; } return WPMainWin::command(id,msg); } BOOL TMainWindow::mouse(int msg,WPPoint p, WORD) { WPWinDC hdc = this; switch (msg) { case WM_LBUTTONDOWN: if ( ButtonDown ) return TRUE; ButtonDown = TRUE; SetCapture(getHwnd()); hdc.moveTo(p); old = p; return TRUE; case WM_LBUTTONUP: if ( !ButtonDown ) return TRUE; ButtonDown = FALSE; ReleaseCapture(); return TRUE; case WM_MOUSEMOVE: if ( !ButtonDown ) return TRUE; hdc.lineTo(p); shapes.add(new GPLine(WPRect(old,p))); old = p; return TRUE; case WM_RBUTTONDOWN: if ( ButtonDown ) return TRUE; ClearWindow(); return TRUE; } return FALSE; } /********************* Pääohjelma ******************************************/ void WPApp::main() { mainWin = new TMainWindow; run(); }