Понедельник, Май 25, 2020

Дочернее окно MFC

#include<afxwin.h>
// Идентификаторы кнопок
#define IDC_BTNWND 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_pBtnWnd;
    void OnBtnWndClick(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_pBtnWnd(NULL)
{
}
CFrame::~CFrame(void)
{
    if ( m_pBtnWnd )
    {
        delete m_pBtnWnd;
        m_pBtnWnd = 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_pBtnWnd = new CButton;
    ASSERT_VALID( m_pBtnWnd );    // Обработка ошибки размещения
    BOOL rc = m_pBtnWnd->Create( "Окно",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
        CRect( 424, 40, 513, 65 ), this, IDC_BTNWND );
    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::OnBtnWndClick(void)
{
    BOOL rc = MessageBeep( -1 );
    if( !rc )
    {
        TRACE0( "\n Ошибка 4. Неверное завершение MessageBeep \n" );
        exit( 4 );
    }
    CFrame *pF=new CFrame;
    rc=pF->Create(NULL,"Это окно было создано по кнопке \"Окно\"",
        WS_SIZEBOX | WS_POPUPWINDOW | WS_DLGFRAME,
        CRect( 20, 60, 430, 190 ) );
    if( !rc )
    {
        TRACE0( "\n Ошибка 5. Фрейм дочернего окна не был создан \n" );
        exit( 5 );
    }
    pF->ShowWindow(SW_SHOW);
    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_BTNWND, OnBtnWndClick )      
    ON_COMMAND( IDC_BTNEXIT, OnBtnExitClick )
    ON_WM_PAINT()
    ON_WM_KEYDOWN()
END_MESSAGE_MAP()



 

НАЗАД                                                                         ДАЛЬШЕ


Back to Top