MFC tehtäviä perusteet vastaus1
Mureakuha
Tehtävä:
Kirjoita ohjelma, joka tulostaa lomakkeelle vasempaan reunaan, keskelle pystysuunnassa ruudun ja ikkunan koot. Tietojen täytyy pysyä näkyvissä koko ajan vaikka lomakkeen paikka tai koko muuttuisikin.
[muokkaa]
CPP
//*********************************************************************** // // koko.cpp // //*********************************************************************** #include <afxwin.h> #include "koko.h" CMyApp myApp; ///////////////////////////////////////////////////////////////////////// // CMyApp luokan aliohjelmien toteutus BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; } ///////////////////////////////////////////////////////////////////////// // CMainWindow luokan aliohjelmien toteutus BEGIN_MESSAGE_MAP (CMainWindow, CWnd) ON_WM_CREATE () // lomake luodaan ON_WM_PAINT () // lomake piirretään ON_WM_SIZE () // lomakkeen kokoa muutetaan END_MESSAGE_MAP () CMainWindow::CMainWindow () { CString strWndClass = AfxRegisterWndClass (NULL, myApp.LoadStandardCursor (IDC_ARROW), (HBRUSH) COLOR_WINDOW, myApp.LoadStandardIcon (IDI_APPLICATION)); CreateEx (NULL, strWndClass, "Ruudun koon tarkastelu", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, NULL ); } int CMainWindow::OnCreate (LPCREATESTRUCT lpcs) // lomakkeen luomistapahtuma { return 0; // kaikki hyvin, palautetaan 0 } void CMainWindow::OnPaint () // lomakkeen piirtotapahtuma { char bufferi[21]; // bufferia tarvitaan muunnoksessa int -> char CPaintDC dc (this); // piirtopintaolion luominen dc.SetBkMode(TRANSPARENT); // tekstin taustaväri läpinäkyväksi CRect rect; // luodaan CRect-luokan olio... GetClientRect (&rect); // ...johon tallennetaan lomakkeen koko 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 dc.TextOut (rect.left, rect.bottom/2-30, bufferi, 17); // piirretään teksti lomakkeelle wsprintf (bufferi, "%3d", ::GetSystemMetrics(SM_CYSCREEN)); // kopioidaan ruudun leveys bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " ruudun korkeus"); // liitetään teksti "ruudun leveys" numeron perään dc.TextOut (rect.left, rect.bottom/2-10, bufferi, 18); // piirretään teksti lomakkeelle 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 dc.TextOut (rect.left, rect.bottom/2+10, bufferi, 18); // piirretään teksti lomakkeelle wsprintf (bufferi, "%3d", rect.bottom); // kopioidaan ikkunan leveys bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " ikkunan korkeus"); // liitetään teksti "ikkunan leveys" numeron perään dc.TextOut (rect.left, rect.bottom/2+30, bufferi, 19); // piirretään teksti lomakkeelle } void CMainWindow::OnSize () // lomakkeen koonmuutostapahtuma { InvalidateRgn(NULL, TRUE); // pyyhitään ikkuna ja asetetaan sen työalue epäkelvoksi, WM_PAINT piirtää sen uudelleen }
[muokkaa]
H
//*********************************************************************** // // koko.h // //*********************************************************************** class CMyApp : public CWinApp { public: virtual BOOL InitInstance (); // ohjelman instanssin initialisaatioaliohjelma }; class CMainWindow : public CWnd { public: CMainWindow (); // ikkunan luontialiohjelma protected: afx_msg int OnCreate (LPCREATESTRUCT); // luomisaliohjelma afx_msg void OnPaint (); // piirtoaliohjelma afx_msg void OnSize (); // koonmuutosaliohjelma DECLARE_MESSAGE_MAP () };
Tämän dokumentin kopiointi, levittäminen sekä muokkaaminen on sallittua GNU Free Documentation Licensen version 1.2 tai uudemman Free Software Foundationin julkaiseman version mukaisesti, ilman muuttumattomuuslauseketta tai kansitekstejä. Tätä koskee vastuuvapaus.
Kopio lisenssistä (englanniksi) löytyy täältä.
Kopio lisenssistä (englanniksi) löytyy täältä.
Alkuperäinen (c) Petteri Hämäläinen
