MFC tehtäviä syventävät vastaus4

Mureakuha

Loikkaa: valikkoon, hakuun

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.

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) ;
}

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ä.

Alkuperäinen (c) Petteri Hämäläinen

Henkilökohtaiset työkalut