
- •Часть IV
- •Глава 25
- •224 Глава 25
- •226 Глава 25
- •Глава 26
- •230 ____Глава 26
- •232 Глава 26
- •234 Глава 26
- •236 Глава 26
- •238 Глава 26
- •240 Глава 26
- •242 Глава 26
- •Глава 27
- •Virtual void InitMainWindow();//Замещаем функцию InitMainWindow
- •246 Глава 27
- •248 Глава 27
- •250 Глава 27
- •252 . Глава27
- •Глава 28 Диалоговые окна
- •256 Глава 28
- •258 Глава 28
- •260 Глава 28
- •262 Глава 28
- •264 Глава 28
- •266 Глава 28
- •268 Глава 28
- •Глава 29
- •270 Глава 29
- •272 Глава 29
- •274 Глава 29
- •276 Глава 29
- •278 Глава 29
- •280 Глава 29
- •282 Глава 29
278 Глава 29
CAPTION "Справка"
FONT 8, "MS Sans Serif"{
CTEXT "В программе демонстрируется организация декорированных окон",-1,8,7,100,36
CONTROL "",IDOK,"BorBtn",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_TABSTOP,40,49,37,25
}
IDB_POINTS BITMAP "29-3pt.bmp" IDB_CURVE BITMAP "29-3cur.bmp" IDB_HISTO BITMAP "29-3hist.bmp" IDB_HELP BITMAP "29-3hlp.bmp" IDB_BLUE BITMAP "29-3blu.bmp" IDB_GREEN BITMAP "29-3gr.bmp" STRINGTABLE{
CM_HELP "Вывод справки"
CM_EXIT "Завершение приложения"
CM_POINTS "График в виде точек"
CM_CURVE "График в виде кривой"
CM_HISTO "График в виде гистограммы"
CM_BLUE "График синего цвета"
CM_GREEN "График зеленого цвета"
}
//Файл 29-3.срр
#include <owl\framewin.h>
#include <owl\decframe.h>
#include <owl\dialog.h>
#include <owl\controlb.h>
#include <owl\toolbox.h>
#include <owl\statusba.h>
#include <owl\buttonga.h>
#include <owl\messageb.h>
#include "29-3.h"
#include <stdio.h>
enum CHOICE{POINTS=CM_POINTS,CURVE=CM_CURVE,HISTO=CM_HISTO}view;
enum COLOR{BLUE=CM_BLUE,GREEN=CM_GREEN}color;
int data[FILESIZE];//Массив для данных из файла
/*Класс приложения, производный от Tapplication*/
class MyApp:public TApplication{
public:
void InitMainWindow() ;//Замещаем функцию InitMainWindow
};
/*Класс главного окна, производный от TdecoratedFrameWlndow*/ class MyWindow:public TDecoratedFrame{
TControlBar* toolBar;
TToolBox* toolBox;
TMessageBar* statusLine; public:
MyWindow(TWindow*,char far*,TWindow*);
void GetWindowClass(WNDCLASS&);//Замещаем функцию GetWindowClass
};
/*Класс окна-клиента, производный от Twindow*/ class MyClient:public TWindow{ public:
MyClient():TWindow(0,""){};
void Paint(TDC&,bool,TRect&);//Замещаем функцию Paint
void CmHelp();//Набор функций откликов на сообщения от пунктов меню
void CmExit();//Они же используются как функции отклика
void CmPoints{);//на сообщения от кнопок инструментального планшета
void CmCurve();//и линейки инструментов
void CinHisto();
void CmBlue();
void CmGreen();
DECLARE_RESPONSE_TABLE(MyClient);//Объявляем таблицу отклика для окна-клиента
};
/*Таблица откликов класса MyClient*/ DEFINE_RESPONSE_TABLE1(MyClient,TWindow) .
EV_COMMAND(CM_HELP,CmHelp),
EV_COMMAND(CM_POINTS,CmPoints) ,
EV_COMMAND(CM_CURVE,CmCurve),
EV_COMMAND(CM_HISTO,CmHisto),
EV_COMMAND(CM_BLUE,CmBlue),
EV_COMMAND(CM_GREEN,CmGreen), END_RESPONSE_TABLE;
Окна и их оформление 279
/*Конструктор главного окна*/
MyWindow::MyWindow(TWindow* parent,char far* title.TWindow* client):
TDecoratedFrame(parent,title,client,TRUE){ AssignMenu("MainMenu");//Назначаем главное меню
view=POINTS; //Начальные значения переключателей-флагов вида графика соlor=BLUE//и цвета изображения
memset(data,0,sizeof(data));//Обнуляем массив данных toolBar=new TControlBar(this);
toolBar->Insert(*new TButtonGadget(IDB_POINTS,CM_POINTS)); toolBar->Insert(*new TButtonGadget(IDB_CURVE,CM_CURVE)); toolBar->Insert(*new TButtonGadget(IDB_HISTO,CM_HISTO)); toolBar->Insert(*new TSeparatorGadget(6)); toolBar->Insert(*new TButtonGadget(IDB_HELP,CM_HELP));
Insert (*toolBar, TDecoratedFrame: : Top);
toolBar->SetHintMode(TGadgetWindow::EnterHints);
toolBox=new TToolBox(this,1);
toolBox->Insert(*new TButtonGadget(IDB_BLUE,CM_BLUE)); toolBox->Insert(*new TButtonGadget(IDB_GREEN,CM_GREEN)); Insert (*toolBox,TDecoratedFrame::Left); statusLine=new TMessageBar(this); Insert(*statusLine,TDecoratedFrame::Bottom);
/*Функция отклика окна-клиента*/ void MyClient::CmHelp(){
new TDialog(this,Dig)->Execute();//Открываем модальный диалог } void MyClient::CmPoints(){
view=POINTS;//Устанавливаем значение флажка-переключателя Invalidate(); //Инициируем перерисовывание рабочего окна }
void MyClient::CmCurve(){ view=CURVE; Invalidate(); }
void MyClient::CmHisto(){ view=HISTO; Invalidate(); }
void MyClient::CmBlue(){
color=BLUE; Invalidate(); } void MyClient::CmGreen(){
color=GREEN;
Invalidate(); }
/*Функция Paint() класса MyClient*/ void MyClient::Paint(TDC&dc,bool,TRect&){ if(color==BLUE){
TPen myPen(TColor::LtBlue, 1); dc.SelectObject(myPen); TBrush myBrush(TColor::LtBlue); dc.SelectObject(myBrush); } else if(color==GREEN){
TPen myPen(TColor::LtGreen,1); dc.SelectObject(myPen); TBrush myBrush(TColor::LtGreen); dc.SelectObject(myBrush); }
TRect wndRect=GetClientRect();//Получим рабочую область рабочего окна int i;
switch(view){ case(POINTS): for(i=0;i<FILESIZE;i++)
dc.Ellipse(i*10+10-2,wndRect.bottom-data[i]-2,1*104-10+2,
wndRect.bottom-data[i]+2); break; case(CURVE):
dc.MoveTo(10,wndRect.bottom-data[0]); for(i=l;i<FILESIZE;i++)