/****************/ /* kolmio.cpp */ /****************/ // Ohjelma, joka aukaisee yhden ikkunan ja piirtää siihen rekursiivisen kolmion. // Esimerkki kuvan päiväittämisestä ja piirtämisen kestosta /vl-96 // Projektiin kolmio.cpp ja ALI\timer.c. MFC 4.1 // Tehtäviä: // #include #include #include #include #include "timer.h" #define PIENIN_KOLMIO 0.2 /* Säädä tällä kauanko koko kuvan piirt. kest. */ #define I(x,y) hdc,((int)(x)),((int)(y)) /****************************************************************************/ void kolmio(HDC hdc, double x, double y, double h) { double s2 = h / (sqrt(3)); MoveToEx(I(x,y),NULL); LineTo(I(x-s2,y-h)); LineTo(I(x+s2,y-h)); LineTo(I(x,y)); if ( h < PIENIN_KOLMIO ) return; kolmio(hdc,x-s2,y,h/2); /* Pienempi kolmio vasemmalle */ kolmio(hdc,x+s2,y,h/2); /* Pienempi kolmio oikealle */ kolmio(hdc,x,y-h,h/2); /* Pienempi kolmio yläpuolelle*/ } //------------------------------------------------------------------------------ class CMainWindow : public CFrameWnd { CDC *pHoldDC; // Siirron aikana käytössä oleva laiteyhteys CPoint old; public: CMainWindow() { Create(NULL,"Kolmio"); pHoldDC = NULL; } afx_msg void OnPaint() { char s[100]; CPaintDC dc(this); SetWindowText("Piirretään..."); start_timer(1); kolmio(dc,300,400,200); sprintf(s,"Kolmio: %5.2lf s.",stop_timer(1)); SetWindowText(s); } afx_msg void OnLButtonDown(UINT modKeys, CPoint point) { if ( pHoldDC != NULL ) return; SetCapture(); // Direct all subsequent mouse input to this window pHoldDC = new CClientDC(this); old = point; } afx_msg void OnLButtonUp(UINT modKeys, CPoint point) { if ( pHoldDC == NULL ) return; ReleaseCapture(); delete pHoldDC; pHoldDC = NULL; } afx_msg void OnMouseMove(UINT modKeys, CPoint point) { if ( pHoldDC == NULL ) return; pHoldDC->MoveTo(old); pHoldDC->LineTo(point); } DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd ) ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() //------------------------------------------------------------------------------ class CKolmioApp : public CWinApp { public: virtual BOOL InitInstance() { m_pMainWnd = new CMainWindow(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } }; //------------------------------------------------------------------------------ CKolmioApp KolmioApp; // constructor initializes and runs the app