MFC tehtäviä vaikeat vastaus2
Mureakuha
Tehtävä:
Kirjoita ohjelma, jossa on tilarivi (CStatusBarCtrl luokka) yleinen kontrolli ja kehyskontrolli. Tilarivi on jaettu kolmeen osaan. Ensimmäiseen osaan tulostetaan ohjeteksti joka ei muutu ohjelman ajon aikana, toiseen ja kolmanteen osaan tulostetaan tiedot ikkunan koosta. Nämä tiedot täytyy päivittää kun ikkunan kokoa muutetaan. Samaten kehyksen koon täytyy seurata lomakkeen kokoa.
[muokkaa]
CPP
//*********************************************************************** // // tilarivi.cpp // //*********************************************************************** #include <afxwin.h> #include <afxcmn.h> // yleisten kontrollien otsikkotiedoston lisäys #include "tilarivi.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) // MESSAGE MAP alkaa ON_WM_CREATE () // lomake luodaan ON_WM_PAINT () // lomake piirretään ON_WM_SIZE () // lomakkeen kokoa muutetaan END_MESSAGE_MAP () // MESSAGE MAP loppuu CMainWindow::CMainWindow () { CString strWndClass = AfxRegisterWndClass ( NULL, // ikkunan tyyli myApp.LoadStandardCursor (IDC_ARROW), // ikkunan kursori (HBRUSH) COLOR_WINDOW, // ikkunan taustan väri myApp.LoadStandardIcon (IDI_APPLICATION) // ikkunan ikoni ); // rekisteröidään oma ikkunaluokka CreateEx ( NULL, // ikkunan lisätyyli strWndClass, // lomakkeen ikkunaluokka "Tilarivi", // ikkunan otsikko WS_OVERLAPPEDWINDOW, // ikkunan tyyli CW_USEDEFAULT, // x-positio aluksi CW_USEDEFAULT, // y-positio aluksi 500, // leveys aluksi 300, // korkeus aluksi NULL, // emoikkunan kahva NULL, // ikkunan valikon kahva NULL // lisätietoja ); // luodaan ikkuna } int CMainWindow::OnCreate () // lomakkeen luomistapahtuma { m_fontMain.CreateFont (10, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "MS Sans Serif"); // fontin luominen CRect rect(10, 10, 482, 266); // luodaan CRect-luokan olio jota käytetään kehyskontrollin luomisessa m_ctlGroupBox.Create ("Tilarivi", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, (UINT) -1); // luodaan kehyskontrolli m_ctlGroupBox.SetFont (&m_fontMain, FALSE); // asetetaan kehyskontrollin fontti m_wndStatusBar.Create (WS_CHILD | WS_VISIBLE | CCS_BOTTOM | SBARS_SIZEGRIP, rect, this, 1); // luodaan tilarivikontrolli m_wndStatusBar.SetText ("Seurataan ikkunan koon muutosta", 0, 0); // tulostetaan teksti ensimmäiseen osaan tilarivillä return 0; // kaikki hyvin, palautetaan 0 } void CMainWindow::OnSize (UINT tyyli, int cx, int cy) // lomakkeen koonmuutostapahtuma { m_ctlGroupBox.MoveWindow (10, 10, cx-20, cy-40, TRUE); // siirretään kehyskontrolli oikeaan paikkaan m_wndStatusBar.MoveWindow (NULL, NULL, NULL, NULL, TRUE); // siirretään tilarivikontrolli oikeaan paikkaan static char bufferi[20] ; // tilapäinen merkkijonomuuttuja int osat[3] = { cx-200, cx-100, cx }; // muutetaan tilarivien osien kokoja m_wndStatusBar.SetParts (3, osat); // asetaan ne voimaan wsprintf (bufferi, "%3d", cx); // kopioidaan ikkunan leveys bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " leveys"); // liitetään teksti "leveys" numeron perään m_wndStatusBar.SetText (bufferi, 1, 0); // tulostetaan teksti toiseen osaan tilarivillä wsprintf (bufferi, "%3d", cy); // kopioidaan ikkunan korkeus bufferiin ja muutetaan sen tietotyyppi chariksi strcat (bufferi, " korkeus"); // liitetään teksti "korkeus" numeron perään m_wndStatusBar.SetText (bufferi, 2, 0); // tulostetaan teksti kolmanteen osaan tilarivillä }
[muokkaa]
H
//*********************************************************************** // // tilarivi.h // //*********************************************************************** class CMyApp : public CWinApp // luokan CMyApp periyttäminen MFC:n ohjelman ohjelma-yliluokasta { public: // aliohjelmajäsenten esittely virtual BOOL InitInstance (); // ohjelman instanssin initialisaatioaliohjelma }; class CMainWindow : public CWnd // luokan CMainWindow periyttäminen MFC:n ikkuna-yliluokasta { private: // tietojäsenten esittely CFont m_fontMain; // fontti-olio CButton m_ctlGroupBox; // kehyskontrolli-olio CStatusBarCtrl m_wndStatusBar; // tilarivi public: // aliohjelmajäsenten esittely CMainWindow (); // ikkunan luontialiohjelma protected: // aliohjelmajäsenten esittely afx_msg int OnCreate (); // luomisaliohjelma afx_msg void OnSize (UINT, int, int); // koonmuutosaliohjelma DECLARE_MESSAGE_MAP () // MESSAGE MAP:n esittely makro };
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
