MFC tehtäviä syventävät vastaus4
Mureakuha
Tehtävä:
Kirjoita ohjelma, joka osaa muuntaa valuuttoja kuvan esittämällä tavalla. '-->'-nappi siirtää Valuutta 1:n edit-kontrolliin kirjoitetun valuuttamäärän Valuutta 2:n edit-kontrolliin valittuun valuuttamuotoon ja päinvastoin. Jos muunnos ei ole mahdollinen palautetaan pelkästään 0.
[muokkaa]
CPP
//*********************************************************************** // // valuutta.cpp // //*********************************************************************** #include <afxwin.h> #include "valuutta.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 () // lomakkeen luominen ON_WM_SIZE () // lomakkeen koon muutos ON_BN_CLICKED (1, OnButton1Clicked) // '-->'-nappia painetaan ON_BN_CLICKED (2, OnButton2Clicked) // '<--'-nappia painetaan END_MESSAGE_MAP () 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öi oman ikkunaluokan CreateEx ( NULL, // lomakkeen lisätyyli strWndClass, // lomakkeen ikkunaluokka "Valuutta", // lomakkeen otsikko WS_OVERLAPPEDWINDOW, // ikkunan tyyli CW_USEDEFAULT, // aloitus x-positio CW_USEDEFAULT, // aloitus y-positio 500, // alkuleveys 300, // alkukorkeus NULL, // emoikkunan kahva NULL, // lomakkeen valikon kahva NULL // lisätietoja ); // lomakkeen luominen } 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 m_Kurssit[0][0] = 1.00; // valuuttakurssit m_Kurssit[0][1] = 0.18; m_Kurssit[0][2] = 0.16; m_Kurssit[1][0] = 5.50; m_Kurssit[1][1] = 1.00; m_Kurssit[1][2] = 0.89; m_Kurssit[2][0] = 6.20; m_Kurssit[2][1] = 1.13; m_Kurssit[2][2] = 1.00; CRect rect; m_ctlButton1.Create ("-->", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, (UINT) 1); // painonappi m_ctlButton1.SetFont (&m_fontMain, FALSE); m_ctlButton2.Create ("<--", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, (UINT) 2); // painonappi m_ctlButton2.SetFont (&m_fontMain, FALSE); m_ctlGroupBoxV1.Create ("Valuutta 1", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, 3); // kehyskontrolli m_ctlGroupBoxV1.SetFont (&m_fontMain, FALSE); m_ctlEdit1.CreateEx (WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 0, 0, 0, 0, m_hWnd, (HMENU) 4); // muokkausruudun m_ctlEdit1.SetFont (&m_fontMain, FALSE); m_ctlRadio1V1.Create ("Markka", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP, rect, this, (UINT) 5); // valintanappikontrolli m_ctlRadio1V1.SetFont (&m_fontMain, FALSE); m_ctlRadio1V1.SetCheck (BST_CHECKED); m_ctlRadio2V1.Create ("Dollari", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, rect, this, (UINT) 6); // valintanappikontrolli m_ctlRadio2V1.SetFont (&m_fontMain, FALSE); m_ctlRadio3V1.Create ("Ecu", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, rect, this, (UINT) 7); // valintanappikontrolli m_ctlRadio3V1.SetFont (&m_fontMain, FALSE); m_ctlGroupBoxV2.Create ("Valuutta 2", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, 8); // luo kehyskontrolli m_ctlGroupBoxV2.SetFont (&m_fontMain, FALSE); m_ctlEdit2.CreateEx (WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 0, 0, 0, 0, m_hWnd, (HMENU) 9); // muokkausruudun m_ctlEdit2.SetFont (&m_fontMain, FALSE); m_ctlRadio1V2.Create ("Markka", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP, rect, this, (UINT) 10); // valintanappikontrolli m_ctlRadio1V2.SetFont (&m_fontMain, FALSE); m_ctlRadio1V2.SetCheck (BST_CHECKED); m_ctlRadio2V2.Create ("Dollari", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, rect, this, (UINT) 11); // valintanappikontrolli m_ctlRadio2V2.SetFont (&m_fontMain, FALSE); m_ctlRadio3V2.Create ("Ecu", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, rect, this, (UINT) 12); // valintanappikontrolli m_ctlRadio3V2.SetFont (&m_fontMain, FALSE); return 0; // kaikki hyvin, 0 palautuu } void CMainWindow::OnSize (UINT tyyli, int cx, int cy) // lomakkeen koonmuutostapahtuma { m_ctlButton1.MoveWindow (cx/2 - 20, int(cy * 0.50-40), 40, 40, TRUE) ; // siirtää kontrollin oikeaan paikkaan, int(...) on jotta ei saada varoitusta m_ctlButton2.MoveWindow (cx/2 - 20, int(cy * 0.50), 40, 40, TRUE) ; m_ctlGroupBoxV1.MoveWindow (10, 10, cx/2 - 40, cy - 20, TRUE) ; m_ctlEdit1.MoveWindow (20, int(cy * 0.2), cx/2 - 60, 19, TRUE) ; m_ctlRadio1V1.MoveWindow (30, int(cy * 0.4), cx/2 - 80, 14, TRUE) ; m_ctlRadio2V1.MoveWindow (30, int(cy * 0.6), cx/2 - 80, 14, TRUE) ; m_ctlRadio3V1.MoveWindow (30, int(cy * 0.8), cx/2 - 80, 14, TRUE) ; m_ctlGroupBoxV2.MoveWindow (cx/2 + 31, 10, cx/2 - 40, cy - 20, TRUE) ; m_ctlEdit2.MoveWindow (cx/2 + 43, int(cy * 0.2), cx/2 - 60, 19, TRUE) ; m_ctlRadio1V2.MoveWindow (cx/2 + 53, int(cy * 0.4), cx/2 - 80, 14, TRUE) ; m_ctlRadio2V2.MoveWindow (cx/2 + 53, int(cy * 0.6), cx/2 - 80, 14, TRUE) ; m_ctlRadio3V2.MoveWindow (cx/2 + 53, int(cy * 0.8), cx/2 - 80, 14, TRUE) ; } void CMainWindow::OnButton1Clicked () // '-->'-nappi { long Valuutta1, Valuutta2 ; // 0=Markka, 1=Dollari, 2=Ecu char bufferi[10] ; if (m_ctlRadio1V1.GetCheck () != 0) Valuutta1 = 0 ; // Onko Autoradio1V1 päällä? else if (m_ctlRadio2V1.GetCheck () != 0) Valuutta1 = 1 ; // Onko Autoradio2V1 päällä? else if (m_ctlRadio3V1.GetCheck () != 0) Valuutta1 = 2 ; // Onko Autoradio3V1 päällä? if (m_ctlRadio1V2.GetCheck() != 0) Valuutta2 = 0 ; // Onko Autoradio1V2 päällä? else if (m_ctlRadio2V2.GetCheck () != 0) Valuutta2 = 1 ; // Onko Autoradio2V2 päällä? else if (m_ctlRadio3V2.GetCheck () != 0) Valuutta2 = 2 ; // Onko Autoradio3V2 päällä? m_ctlEdit1.GetWindowText (bufferi, 10) ; // Luetaan Edit1 teksti long luku = atol(bufferi) ; // Muunnetaan se numeroksi if (luku <= 0 ) MessageBox ("Syötetty arvo ei ole muunnettavissa!", "Virhe", MB_OK | MB_SYSTEMMODAL) ; // Jos muunnos ei onnistunut luku = long(luku * m_Kurssit[Valuutta1][Valuutta2]) ; // Kerrotaan oikealla kurssilla, long(...) on jotta ei saada varoitusta ltoa(luku, bufferi, 10) ; // Muunnetaan numero tekstiksi m_ctlEdit2.SetWindowText (bufferi) ; // Kirjoitetaan teksit Edit2:n } void CMainWindow::OnButton2Clicked () // '<--'-nappi { long Valuutta1, Valuutta2 ; // 0=Markka, 1=Dollari, 2=Ecu char bufferi[10] ; if (m_ctlRadio1V1.GetCheck () != 0) Valuutta1 = 0 ; // Onko Autoradio1V1 päällä? else if (m_ctlRadio2V1.GetCheck () != 0) Valuutta1 = 1 ; // Onko Autoradio2V1 päällä? else if (m_ctlRadio3V1.GetCheck () != 0) Valuutta1 = 2 ; // Onko Autoradio3V1 päällä? if (m_ctlRadio1V2.GetCheck() != 0) Valuutta2 = 0 ; // Onko Autoradio1V2 päällä? else if (m_ctlRadio2V2.GetCheck () != 0) Valuutta2 = 1 ; // Onko Autoradio2V2 päällä? else if (m_ctlRadio3V2.GetCheck () != 0) Valuutta2 = 2 ; // Onko Autoradio3V2 päällä? m_ctlEdit2.GetWindowText (bufferi, 10) ; long luku = atol(bufferi) ; if (luku <= 0) MessageBox ("Syötetty arvo ei ole muunnettavissa!", "Virhe", MB_OK | MB_SYSTEMMODAL) ; luku = long(luku * m_Kurssit[Valuutta2][Valuutta1]) ; // long(...) on jotta ei saada varoitusta ltoa(luku, bufferi, 10) ; m_ctlEdit1.SetWindowText (bufferi) ; }
[muokkaa]
H
//*********************************************************************** // // valuutta.h // //*********************************************************************** class CMyApp : public CWinApp // CMyApp periytetään MFC:n ohjelma-yliluokasta { public: // aliohjelmajäsenten esittely virtual BOOL InitInstance (); // ohjelman instanssin initialisaatio }; class CMainWindow : public CWnd // CMainWindow periytetään MFC:n ikkuna-yliluokasta { private: // tietojäsenten esittely CFont m_fontMain; // fontti CButton m_ctlButton1; // painonappi CButton m_ctlButton2; // painonappi CButton m_ctlGroupBoxV1; // kehyskontrolli CEdit m_ctlEdit1; // muokkausruutu CButton m_ctlRadio1V1; // valintanappi CButton m_ctlRadio2V1; // valintanappi CButton m_ctlRadio3V1; // valintanappi CButton m_ctlGroupBoxV2; // kehyskontrolli CEdit m_ctlEdit2; // muokkausruutu CButton m_ctlRadio1V2; // valintanappi CButton m_ctlRadio2V2; // valintanappi CButton m_ctlRadio3V2; // valintanappi double m_Kurssit[3][3]; // kurssitaulukossa on valuuttakurssit public: // aliohjelmajäsenten esittely CMainWindow (); // ikkunan luontialiohjelma protected: // aliohjelmajäsenten esittely afx_msg int OnCreate (); // luomisaliohjelma afx_msg void OnSize (UINT, int, int); // koonmuutosaliohjelma afx_msg void OnButton1Clicked (); // afx_msg void OnButton2Clicked (); // DECLARE_MESSAGE_MAP () // MESSAGE MAP:n esittely };
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
