MFC tehtäviä perusteet vastaus5

Mureakuha

Loikkaa: valikkoon, hakuun

Tehtävä:

Kirjoita ohjelma, jossa on CListBox- ja CComboBox-luokan kontrollit ja painonapit joilla tutkitaan näistä kontrolleista valitut tekstit. Kontrolleissa on kahdeksan tekstiriviä. Valitun rivin teksti tulostetaan CStatic-luokan kontrolliin nappia painettaessa.

CPP

//***********************************************************************
//
//  listcombo.cpp
//
//***********************************************************************
 
#include <afxwin.h>
#include "listcombo.h"
 
CMyApp myApp;
 
/////////////////////////////////////////////////////////////////////////
// CMyApp luokan aliohjelmien toteutus
 
BOOL CMyApp::InitInstance ()
{
  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_BN_CLICKED (1, OnButtonListClicked) // Tutki ListBox -nappia painetaan
  ON_BN_CLICKED (3, OnButtonComboClicked) // Tutki ComboBox -nappia painetaan  
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
    "ListBox & ComboBox", // ikkunan otsikko
    WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU, // 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 (LPCREATESTRUCT lpcs) // 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 ("",  WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, (UINT) -1); // luodaan kehyskontrolli
  m_ctlGroupBox.SetFont (&m_fontMain, FALSE); // asetetaan kehyskontrollin fontti
 
  rect.SetRect (250, 50, 350, 80); // vaihdetaan uudet arvot
  m_ctlPushButton1.Create ("Tutki ListBox",  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, (UINT) 1); // luodaan painonappi
  m_ctlPushButton1.SetFont (&m_fontMain, FALSE); // asetetaan painonapin fontti
 
  rect.SetRect (140, 50, 240, 120); // vaihdetaan uudet arvot
  m_ctlListBox.CreateEx (WS_EX_CLIENTEDGE, "listbox", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, rect.left, rect.top, rect.Width (), rect.Height (), m_hWnd, (HMENU) 2, NULL); // luetteloruutu
  m_ctlListBox.SetFont (&m_fontMain, FALSE); // asetetaan luetteloruudun fontti
  m_ctlListBox.AddString ("List 1"); // tekstirivien lisäys 
  m_ctlListBox.AddString ("List 2");
  m_ctlListBox.AddString ("List 3");
  m_ctlListBox.AddString ("List 4");
  m_ctlListBox.AddString ("List 5");
  m_ctlListBox.AddString ("List 6");
  m_ctlListBox.AddString ("List 7");
  m_ctlListBox.AddString ("List 8");
  m_ctlListBox.SetSel (0); // tehdään jokin oletusvalinta
 
  rect.SetRect (250, 140, 350, 170); // vaihdetaan uudet arvot
  m_ctlPushButton2.Create ("Tutki Combo",  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, (UINT) 3); // painonappi
  m_ctlPushButton2.SetFont (&m_fontMain, FALSE); // asetetaan painonapin fontti
 
  rect.SetRect (140, 140, 240, 220); // vaihdetaan uudet arvot
  m_ctlComboBox.Create (WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_SORT | CBS_DROPDOWNLIST, rect, this, (UINT) 4); // yhdistemäluetteloruutu
  m_ctlComboBox.SetFont (&m_fontMain, FALSE); // asetetaan yhdistemäluetteloruudun fontti
  m_ctlComboBox.AddString ("Combo 1"); // tekstirivien lisäys 
  m_ctlComboBox.AddString ("Combo 2");
  m_ctlComboBox.AddString ("Combo 3");
  m_ctlComboBox.AddString ("Combo 4");
  m_ctlComboBox.AddString ("Combo 5");
  m_ctlComboBox.AddString ("Combo 6");
  m_ctlComboBox.AddString ("Combo 7");
  m_ctlComboBox.AddString ("Combo 8");
  m_ctlComboBox.SetCurSel (0); // tehdään jokin oletusvalinta
 
  rect.SetRect (140, 224, 240, 240); // vaihdetaan uudet arvot
  m_ctlStatic.Create ("Tee valinta", WS_CHILD | WS_VISIBLE | SS_CENTER | SS_SUNKEN, rect, this, (UINT) 5); // luodaan etiketti
  m_ctlStatic.SetFont (&m_fontMain, FALSE); // asetetaan etiketin fontti
 
  return 0; // kaikki hyvin, palautetaan 0
}
 
void CMainWindow::OnButtonListClicked () // Tutki ListBox -nappia painettu
{
  CString valittuteksti; // merkkijonomuuttuja
  int valitturivi = m_ctlListBox.GetCurSel (); // kysytääm valittu rivi
  if (valitturivi != LB_ERR) // jos riviä ei ole valittu on valintana LB_ERR
    m_ctlListBox.GetText (valitturivi, valittuteksti); // haetaan teksti ComboBoxista
  m_ctlStatic.SetWindowText (valittuteksti); // asetetaan sama teksti Staticiin
}
 
void CMainWindow::OnButtonComboClicked () // Tutki Combo -nappia painettu
{
  CString valittuteksti; // merkkijonomuuttuja
  m_ctlComboBox.GetWindowText (valittuteksti); // haetaan teksti ComboBoxista
  m_ctlStatic.SetWindowText (valittuteksti); // asetetaan sama teksti Staticiin
}

H

//***********************************************************************
//
//  listcombo.h
//
//***********************************************************************
 
class CMyApp : public CWinApp
{
  public:
    virtual BOOL InitInstance (); 
};
 
class CMainWindow : public CWnd
{
  private:
    CFont m_fontMain; // fontti
    CButton m_ctlGroupBox; // kehyskontrolli
    CButton m_ctlPushButton1; // painonappi
    CButton m_ctlPushButton2; // painonappi
    CComboBox m_ctlComboBox; // yhdistemäluetteloruutu
    CListBox m_ctlListBox; // luetteloruutu
    CStatic m_ctlStatic; // etiketti
 
  public:
    CMainWindow ();
 
  protected:
    afx_msg int OnCreate (LPCREATESTRUCT); // luomisaliohjelma
    afx_msg void OnButtonListClicked (); // Tutki ListBox -nappi
    afx_msg void OnButtonComboClicked (); // Tutki Combo -nappi
    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