Создание кнопки 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()