MFC tehtäviä perusteet vastaus2
Mureakuha
Tehtävä:
Kirjoita ohjelma, jossa on kaksi CButton-luokan painonappia. Push me -napin painaminen vaihtaa Beep me -napin tilaa. Se siis painuu pohjaan, jos se on alunperin ylhäällä ja nousee ylös, jos se on alunperin alhaalla. Beep me -napin painaminen aiheuttaa piippauksen tietokoneen sisäisellä piipparilla.
[muokkaa]
CPP
//*********************************************************************** // // nappi.cpp // //*********************************************************************** #include <afxwin.h> #include "nappi.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_BN_CLICKED (1, OnButton1Clicked) // Beep me -nappia painetaan ON_BN_CLICKED (2, OnButton2Clicked) // Push me -nappia painetaan END_MESSAGE_MAP () CMainWindow::CMainWindow () { CString strWndClass = AfxRegisterWndClass ( 0, myApp.LoadStandardCursor (IDC_ARROW), (HBRUSH) COLOR_WINDOW, myApp.LoadStandardIcon (IDI_APPLICATION)); CreateEx (0, strWndClass, "Nappi", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, NULL); } int CMainWindow::OnCreate (LPCREATESTRUCT lpcs) { 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"); CRect rect (10, 10, 482, 266); // CRect luokkaan tallennetaan kontrollia varten vasen ylänurkka ja oikea alanurkka m_ctlGroupBox.Create ("Nappi", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, (UINT) -1); // kehyskontrolli m_ctlGroupBox.SetFont (&m_fontMain, FALSE); rect.SetRect(130, 120, 230, 150); // vaihdetaan uudet arvot m_ctlPushButton1.Create ("Beep me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, (UINT) 1); // painonappi m_ctlPushButton1.SetFont (&m_fontMain, FALSE); rect.SetRect(235, 120, 335, 150); // ja vielä kerran m_ctlPushButton2.Create ("Push me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, (UINT) 2); // painonappi m_ctlPushButton2.SetFont (&m_fontMain, FALSE); return 0; } void CMainWindow::OnButton1Clicked () // Beep me -nappia painettu { MessageBeep (1); // piippaus } void CMainWindow::OnButton2Clicked () // Push me -nappia painettu { m_ctlPushButton1.SendMessage(BM_SETSTATE, !m_ctlPushButton1.SendMessage(BM_GETSTATE, 0, 0), 0); // tutkitaan ja vaihdetaan napin tila }
[muokkaa]
H
//*********************************************************************** // // nappi.h // //*********************************************************************** class CMyApp : public CWinApp { public: virtual BOOL InitInstance (); }; class CMainWindow : public CWnd { private: CFont m_fontMain; CButton m_ctlGroupBox; CButton m_ctlPushButton1; CButton m_ctlPushButton2; public: CMainWindow (); protected: afx_msg int OnCreate (LPCREATESTRUCT); afx_msg void OnButton1Clicked (); afx_msg void OnButton2Clicked (); 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
