MFC tehtäviä perusteet vastaus1

Mureakuha

Loikkaa: valikkoon, hakuun

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.

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
}

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

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

Henkilökohtaiset työkalut