Вторник, Май 26, 2020

Диалог MFC

#include<afxwin.h>
#include "resource.h"
class CApp:public CWinApp
{
public:
    virtual BOOL InitInstance(void);
};
class CFrame:public CFrameWnd
{
    protected:
    afx_msg void OnPaint(void);
    afx_msg void OnKeyDown(UINT, UINT, UINT);
    DECLARE_MESSAGE_MAP();
public:
    afx_msg void OnFileExit();
    afx_msg void OnDialogStart();
};
class Dialog : public CDialog
{
    // Данные
private:
public:
    // Конструктор - передает идентификатор диалога в базовый
    //   класс
    Dialog( CWnd *pParent = 0 );
protected:
    // Перегружаем виртуальный метод для инициализации диалога
    virtual BOOL OnInitDialog( void );
    DECLARE_MESSAGE_MAP( );
};

// Конструктор
// Указатель на родительское окно (NULL - родительским является главное окно)
Dialog :: Dialog( CWnd  *pParent ) : CDialog( IDD_DIALOG1, pParent )
{ }
// Инициализация окна диалога
BOOL Dialog :: OnInitDialog( void )
{
    // Вызываем метод базового класса
    CDialog :: OnInitDialog( );
    return TRUE;
}

BOOL CApp::InitInstance(void)
{
    CFrame *pFrame=new CFrame;
    ASSERT_VALID(pFrame);
     // Загрузка ресурсов, регистрация класса окна и создание окна
    BOOL rc = pFrame->LoadFrame( IDR_MENU1 );
    if( !rc )
    {
        TRACE0( "\n Ошибка 1. Метод LoadFrame завершен с "
                "ошибкой \n" );
        exit( 1 );
    }

    // Отображение окна
    pFrame->ShowWindow( SW_SHOW );
    // Обновление окна (генерирует WM_PAINT)
    pFrame->UpdateWindow( );
    this->m_pMainWnd=pFrame;
    return TRUE;
}
CApp myApp;
void CFrame::OnPaint(void)
{
    CPaintDC pDC(this);
    pDC.TextOutA(0,0,"Сообщение в окно OnPaint");
}
void CFrame::OnFileExit()
{
     BOOL                rc = MessageBeep( -1 );
    if( !rc )
    {
        TRACE0( "\n Ошибка 2. Неверное завершение MessageBeep \n" );
        exit( 2 );
    }
    rc = DestroyWindow( );
    if( !rc )
    {
        TRACE0( "\n Ошибка 3. Окно не было разрушено \n" );
        exit( 3 );
    }

    return afx_msg void( );
}

void CFrame::OnKeyDown(UINT, UINT, UINT)
{
}
void CFrame::OnDialogStart()
{
    // Создаем объект диалога - автоматически вызывается конструктор
    Dialog Dlg;
    // Создается модальное диалоговое окно - оно будет
    //   автоматически закрыто после нажатия OK или Cancel
    Dlg.DoModal();
    // Перерисовываем родительское окно
    CWnd::Invalidate();
    return afx_msg void( );
}
BEGIN_MESSAGE_MAP(CFrame,CFrameWnd)
    ON_WM_PAINT()
    ON_WM_KEYDOWN()
    ON_COMMAND(ID_FILE_EXIT, &CFrame::OnFileExit)
    ON_COMMAND(ID_DIALOG_START, &CFrame::OnDialogStart)
END_MESSAGE_MAP()
// Определение таблицы сообщений (в данном случае она избыточна)
BEGIN_MESSAGE_MAP( Dialog, CDialog )
END_MESSAGE_MAP( )



НАЗАД                                                                         ДАЛЬШЕ


Back to Top