MFC tehtäviä perusteet vastaus2

Mureakuha

Loikkaa: valikkoon, hakuun

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.

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 
}

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

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

Henkilökohtaiset työkalut