/p>
int ns; /*номер увета светофора*/
int move; /*флаг движения паровоза*
/Член - функции класса СMainWnd :
CmainWnd(); - конструктор класса окна
afx_msg void OnBegin();обработчик события на выбор пункта меню «старт»
afx_msg void OnRed(); - обработчик события на выбор пункта меню «Red»
afx_msg void OnGreen(); - обработчик события на выбор пункта меню «Green»
afx_msg void OnBlue(); - обработчик события на выбор пункта меню «Blue»
afx_msg void OnPaint(); - ф-ия перерисовки
afx_msg void OnTimer( UINT nIDEvent ); - обраб-чик таймера
afx_msg void OnExit(); - обработчик события на выбор пункта меню «Exit»
afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags ); - реакция на нажатие клавиши клавиатуры
DECLARE_MESSAGE_MAP() - карта сообщений
2.2.3. Карта сообщений.
BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)
ON_COMMAND(IDM_EXIT,OnExit)
ON_COMMAND(IDM_BEGIN,OnBegin)
ON_COMMAND(IDM_RED,OnRed)
ON_COMMAND(IDM_GREEN,OnGreen)
ON_COMMAND(IDM_BLUE,OnBlue)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_CHAR()
END_MESSAGE_MAP()
2.3. Образ главного окна.
На рисунках 1, 2 представленыосновные образы окна приложения.
Рис. 1. Главное окно после выбора пункта «старт»
Рис. 2. Главное окно до выбора пункта «старт»
Приложение
Листинг файла main.cpp
/* в этом файле находятся описания всех функций */
#include <afxwin.h>
#include "main.h"
#include "menu1.h"
CMainWnd::CMainWnd() /*конструктор гл. окна*/
{
wnd.SetRect(0,0,400,355);//устан-ка размеров окна
Create(NULL,"parovoz",WS_DLGFRAME ,wnd,NULL,"MAINMENU");
game=false; /*нет игры*/
color=0; /*нач. цвет поезда*/
ns=0; /*нач. цвет светофора*/
br1[0].CreateSolidBrush(RGB(255,0,0));//создание кистей
br1[1].CreateSolidBrush(RGB(0,255,0));
br1[2].CreateSolidBrush(RGB(0,0,255));
sv[0].CreateSolidBrush(RGB(255,0,0));//создание кистей
sv[1].CreateSolidBrush(RGB(0,255,0));//светофора
sv[2].CreateSolidBrush(RGB(255,255,0));
sv[3].CreateSolidBrush(RGB(128,128,128));
br2.CreateSolidBrush(RGB(1,1,1));/*чёрный цвет*/
for(numball=0;numball<5;numball++)
{//обнуление признаков жизни дыма
live[numball]=0;
}
}
BOOL CApp:: InitInstance()/*ф-ия инициализации окна*/
{
m_pMainWnd=new CMainWnd; /*созд объекта окна*/
m_pMainWnd->ShowWindow(m_nCmdShow); /*показать окно*/
return true; /*удачное завершение*/
}
afx_msg void CMainWnd::OnPaint() /*ф-ия перерисовки*/
{
CPaintDC dc(this); /*созданиее контекста окна*/
dc.SelectObject(&br2); /*выбор кисти для светофора*/
dc.Rectangle(svet); //рисование корп. светофора
dc.Rectangle(noga); //рисование ноги
for(numball=0;numball<5;numball++)
{//рисование дыма
if(live[numball]==1)//если дым активен
{
dc.Ellipse(balls[numball]);
}
}
switch(ns) /*переключение между цветами светофора*/
{
case 0: /*если красный*/
{
dc.SelectObject(sv[0]);
dc.Ellipse(ball1);
dc.SelectObject(sv[3]);
dc.Ellipse(ball2);
dc.Ellipse(ball3);