Среда, Май 27, 2020

Создание кнопки MFC

#include<afxwin.h>
// Идентификаторы кнопок
#define IDC_BTNABOUT 100            // Кнопка "О кнопке"
#define IDC_BTNEXIT  101            // Кнопка "Выход"
//////////////////////////CApp/////////////////////////////////////
class CApp:public CWinApp
{
public:
    virtual BOOL InitInstance(void);
};
//////////////////////////CFrame//////////////////////////////////////
class CFrame:public CFrameWnd
{
public:
protected:
    afx_msg void OnPaint(void);
    afx_msg void OnKeyDown(UINT, UINT, UINT);
    DECLARE_MESSAGE_MAP();
public:
    virtual void CreateChildControls(void);
    CFrame(void);
    ~CFrame(void);
    CButton* m_pBtnExit;
    CButton* m_pBtnAbout;
    void OnBtnAboutClick(void);
    void OnBtnExitClick(void);
};
////////////////////////////////////////////////////////////////////////
CApp myApp;
//////////////////////////CApp//////////////////////////////////////////
BOOL CApp::InitInstance(void)
{
    
    CFrame *pFrame=new CFrame;
    ASSERT_VALID(pFrame);
    BOOL rc = pFrame->Create(NULL,"win",
        WS_SIZEBOX | WS_POPUPWINDOW | WS_DLGFRAME,CRect(200,50,900,700));
    if( !rc )
    {
        TRACE0( "\n Ошибка 1. Фрейм окна не был создан \n" );
        exit( 1 );
    }
    // Создание кнопок
    pFrame->CreateChildControls( );
    // Отображение окна
    pFrame->ShowWindow( SW_SHOW );
    this->m_pMainWnd=pFrame;
    return TRUE;
}

//////////////////////////CFrame//////////////////////////////////////
CFrame::CFrame(void)
    : m_pBtnExit(NULL)
    , m_pBtnAbout(NULL)
{
}
CFrame::~CFrame(void)
{
    if ( m_pBtnAbout )
    {
        delete m_pBtnAbout;
        m_pBtnAbout = 0;
    }
    if ( m_pBtnExit )
    {
        delete m_pBtnExit;
        m_pBtnExit = 0;
    }
}
void CFrame::OnPaint(void)
{
    CPaintDC pDC(this);
    pDC.TextOutA(0,0,"Пример вывода в окно строки");
}
void CFrame::OnKeyDown(UINT, UINT, UINT)
{
}

void CFrame::CreateChildControls(void)
{
    // Размещаем в динамической памяти и создаем кнопку "О кнопке"
    //   (выбрана по умолчанию)
    m_pBtnAbout = new CButton;
    ASSERT_VALID( m_pBtnAbout );    // Обработка ошибки размещения
    BOOL                rc = m_pBtnAbout->Create( "О кнопке",
        WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
        CRect( 424, 40, 513, 65 ), this, IDC_BTNABOUT );
    if( !rc )
    {
        TRACE0( "\n Ошибка 2. Кнопка \"О кнопке\" не была"
                " создана \n" );
        exit( 2 );
    }

    // Размещаем в динамической памяти и создаем кнопку "Выход"
    m_pBtnExit = new CButton;
    ASSERT_VALID( m_pBtnExit );     // Обработка ошибки размещения
    rc = m_pBtnExit->Create( "Выход", WS_VISIBLE | WS_CHILD
        | BS_PUSHBUTTON, CRect( 424, 8, 513, 33 ), this,
        IDC_BTNEXIT );
    if( !rc )
    {
        TRACE0( "\n Ошибка 3. Кнопка \"Выход\" не была"
                " создана \n" );
        exit( 3 );
    }

    return;
}
void CFrame::OnBtnAboutClick(void)
{
    // Звуковой сигнал
    BOOL                rc = MessageBeep( -1 );
    /*
    В этой функции можно использовать следующие значения аргумента:
    0xFFFFFFFF - standard beep using the computer speaker
                 (экв. -1),
    MB_ICONASTERISK - SystemAsterisk,
    MB_ICONEXCLAMATION - SystemExclamation,
    MB_ICONHAND - SystemHand,
    MB_ICONQUESTION - SystemQuestion,
    MB_OK - SystemDefault
    */
    if( !rc )
    {
        TRACE0( "\n Ошибка 4. Неверное завершение MessageBeep \n" );
        exit( 4 );
    }
    AfxMessageBox( "Активизирована кнопка \"О кнопке\"" );

    return afx_msg void( );
}
void CFrame::OnBtnExitClick(void)
{
    BOOL                rc = MessageBeep( -1 );
    if( !rc )
    {
        TRACE0( "\n Ошибка 5. Неверное завершение MessageBeep \n" );
        exit( 5 );
    }
    rc = DestroyWindow( );
    if( !rc )
    {
        TRACE0( "\n Ошибка 6. Окно не было разрушено \n" );
        exit( 6 );
    }

    return afx_msg void( );
}
BEGIN_MESSAGE_MAP(CFrame,CFrameWnd)
    ON_COMMAND( IDC_BTNABOUT, OnBtnAboutClick )      
    ON_COMMAND( IDC_BTNEXIT, OnBtnExitClick )
    ON_WM_PAINT()
    ON_WM_KEYDOWN()
END_MESSAGE_MAP()



НАЗАД                                                                         ДАЛЬШЕ


Back to Top