MFC tehtäviä perusteet vastaus5
Mureakuha
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.
[muokkaa]
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 }
[muokkaa]
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ä.
Kopio lisenssistä (englanniksi) löytyy täältä.
Alkuperäinen (c) Petteri Hämäläinen
