Исходный текст программы с главным меню

На рис. 27.2. приведен результат работы приложения 27-2.

//Приложение 27-2. Обработка сообщений от пунктов меню

//Файл 27-2.rс #include "27-2.h" #include <owl\window.rh> MainMenu MENU{ POPUP "&Файл"{

MENUITEM "&О программе", CM_ABOUT

MENUITEM "&Выход", CM EXIT

} POPUP "&Графики"{

MENUITEM "&Синус", CM_SIN


248 Глава 27

MENUITEM "&Косинус", CM_COS } }

//Файл 27-2.h #define CM_ABOUT 101 #define CM_SIN 102 #define CM_COS 103

//Файл 27-2.cpp

#include <owl\framewin.h>

#include "27-2.h"

#include <math.h>

/*Класс приложения, производный от ТApplication*/

class MyApp:public TApplication{

public:

void InitMainWindow();//Замещаем функцию InitMainWindow

};

/*Класс главного окна, производный от TframeWindow*/ class MyWindow:public TFrameWindow{

double sine[640],cosine[640]; //Массивы данных для графиков

bool sinIs,cosIs; //Индикаторы наличия данных для графиков

void Paint(TDC&,bool,TRect&);//Замещаем функцию Paint

void CmAbout();// Функция обработки сообщения от пункта "О программе"

void Cmsin(); //Функция обработки сообщения от пункта "Синус"

void CmCos();// Функция обработки сообщения от пункта "Косинус" public:

MyWindow(TWindow*parent,const char far* title); //Конструктор

DECLARE_RESPONSE_TABLE(MyWindow); //Объявляем таблицу откликов

}; DEFINE_RESPONSE_TABLE1(MyWindow,TFrameWindow) //Описываем

EV_COMMAND(CM_ABOUT,CmAbout), //таблицу откликов

EV_COMMAND(CM_SIN,CmSin), //от пунктов

EV_COMMAND(CM_COS,CmCos), //меню

END_RESPONSE_TABLE; /7Завершаем таблицу откликов /*Конструктор класса MyWindow*/ MyWindow::MyWindow(TWindow*parent,const char far* title):TframeWindow

(parent,title){

AssignMenu("MainMenu"); //Установка меню главного окна по идентификатору

// "MainMenu"

sinIs=false; cosIs=false; //Начальные значения индикаторов: данные отсутствуют

}

/*Функции откликов на сообщения*/ void MyWindow::CmAbout(){

MessageBox("Демонстрация математических функций","О программе", MB_ICONINFORMATION);

} void MyWindow::CmSin(){

for(int i=0;i<640;i++) //В цикле по 640 точкам

sine[i]=sin((double)i/20); //вычисляем и сохраняем в sine[] значения синуса

sinIs=true; //Данные для графика синуса есть

Invalidate(); //Инициируем сообщение WM_PAINT

} void MyWindow::CmCos(){

for(int i=0;i<640;i++)//В цикле по 640 точкам

cosine[i]=cos((double)i/20); //вычисляем и сохраняем значения косинуса

cosIs=true; //Данные для графика косинуса есть

Invalidate(); //Инициируем сообщение WM_PAINT

}

/*Замащающая функция InitMainWindov())*/ void MyApp::InitMainWindow(){

MyWindow* myWin=new MyWindow(0,"Программа 27-2");

SetMainWindow(myWin);

EnableBWCC (); //Разрешаем загрузку и. использование BWCC.DLL }

/*Функция обработки сообщения WM_PAINT*/ void MyWindow::Paint(TDC&dc,bool,TRect&) {

int y0=150; //Сдвиг начала координат по оси у

dc.MoveTo(0,у0); //Смещаем текущую позицию к началу оси X

dc.LineTo(640,y0); //Проводим ось X

if(sinIs==true) //Если данные по синусу есть,

for(int i=0;i<640;i++) //то в цикле по 640 точкам


Обработка сообщений Windows 249

dc.SetPixel(i,y0-(int)(sine[i]*100),TColor::LtBlue); //выводим точки графика if(cosIs==true) //Если данные по косинусу есть,

for (int i = 0; i<640; i++) // то в цикле по 640 точкам dc.SetPixel(i,y0-(int)(cosine[i]*100),TColor::LtGreen);//выводим точки графика

} /*Главная функция приложения OwlMain*/

int OwlMain(int,char*[]){return myApp().Run();}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow