MFC tehtäviä vaikeat vastaus2

Mureakuha

Loikkaa: valikkoon, hakuun

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.

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

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

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

Henkilökohtaiset työkalut