- •Часть 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
258 Глава 28
MENUITEM "Сохранить...",CM_SAVE MENUITEM SEPARATOR MENUITEM "Выход",CM_EXIT }
}
INPUTDLG DIALOG 7,37,222,130
STYLE DS_MODALFRAME|WS_POPUP| WS_VISIBLE|WS_CAPTION|WS_SYSMENU CLASS "bordlg"
CAPTION "Форма для заполнения карточек" FONT 8, "MS Sans Serif"{
EDITTEXT IDC_NAME,69,12,137,12
RTEXT "Фамилия",-1,11,15, 53, 9
EDITTEXT IDC_JOB,69,35,137,12 Ч
RTEXT "Должность",-1,10,38, 54, 9
EDITTEXT IDC_YEAR,69,58,37,12
RTEXT "Год рождения",-1,11, 61, 54, 9
CONTROL "M",IDC_M,"BUTTON",BS_AUTORADIOBUTTON,123, 58, 20,12
CONTROL "Ж",IDC_F,"BUTTON",BS_AUTORADIOBUTTON, 162, 58,20,12
CONTROL "Добавить",IDC_ADD,"BorBtn",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,40, 93, 37, 25
CONTROL "Закрыть",IDOK,"BorBtn",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,145,93,37, 25
CONTROL '",-1,"BorShade",BSS_HDIP|BSS_LEFT|WS_CHILD|WS_VISIBLE,6,80,206,2
}
//Файл 28-2.cpp
#include <owl\framewin.h>
#include <owl\dialog.h>
#include <owl\edit.h>
#include <owl\checkbox.h>
#include <owl\opensave.h>
#include "28-2.h"
#include <stdio.h>
/*Глобальная переменная*/
TSB tsbArray [MAXENTRIES];//Массив карточек
/*Класс приложения, производный от Tapplication*/
class MyApp:public TApplication{
public:
void InitMainWindowt);//Замещаем функцию InitMainWindow
/*Класс главного окна, производный от TframeWindow*/
class MyWindow:public TFrameWindow{
public:
MyWindow(TWindow*parent,char far*title);
void Paint(TDC&,bool,TRect&);//Замещаем функцию Paint ()
void CmInput();//Функция отклика на пункт "Ввод данных"
void CmOpen();//Функция отклика на пункт "Открыть"
void CmSave();//Функция отклика на пункт "Сохранить"
DECLARE_RESPONSE_TABLE(MyWindow);
};
/*Класс окна диалога, производный от Tdialog*/ class MyDialog:public TDialog{
int index;//Номер текущей карточки
TSB tsb;//Структурная переменная для буфера обмена
public:
MyDialog(TWindow*,TResId);
void CmAdd() ;
DECLARE_RESPONSE_TABLE(MyDialog) ;
};
/*Таблица откликов класса MyWindow*/ DEFINE_RESPONSE_TABLE1(MyWindow,TFrameWindow)
EV_COMMAND(CM_INPUT,CmInput),
EV_COMMAND(CM_OPEN,CmOpen),
EV_COMMAND(CM_SAVE,CmSave), END_RESPONSE_TABLE; /*Конструктор главного окна*/ MyWindow::MyWindow(TWindow*parent,char far*title):TFrameWindow(parent,title) {
AssignMenu("MainMenu");
}
/*Функция откликов класса MyWindow*/ void MyWindow::CmInput(){
memset(&tsbArray,0,sizeof(TSB)*MAXENTRIES);//Очистим массив карточек
new MyDialog(this,INPUTDLG)->Execute();//Выполняем диалог
Invalidate();//Активизируем сообщение WM_PAINT для перерисовки главного окна
Диалоговые окна 259
}
void MyWindow::CmOpen(){
TOpenSaveDialog::TData fileData(OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|
OFN_HIDEREADONLY,"Базы данных (*.dbf)| *.dbf|"); int result= new TFileOpenDialog(this,fileData)->Execute(); if(result==IDCANCEL)return;
char* ptr=strchr(fileData.FileName,'\0');//Получим указатель на конец имени if(result!=IDOK|jstrcmpi(ptr-3,"DBF")){//Если файл не открылся или не .DBF MessageBox("Неверное имя файла","Info",МВ_ОК); return; }
FILE* fp=fopen(fileData.FileName,"rb"); if(!fp)return;
fread(tsbArray,sizeof(TSB),MAXENTRIES,fp); fclose(fp); Invalidate(); } void MyWindow::CmSave(){
TOpenSaveDialog::TData fileData(OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Базы данных (*.dbf)|*.dbf|);
int result= new TFileSaveDialog(this,fileData)->Execute(); if(result==IDCANCEL)return;
char* ptr=strchr(fileData.FileName,'\0');//Получим указатель на конец имени if(result!=IDOK||strcmpi(ptr-3,"DBF")){//Если файл не открылся или не .DBF MessageBox("Неверное имя файла","Info",МВ_ОК); return; }
FILE* fp=fopen(fileData.FileName,"wb"); if(!fp)return;
fwrite(tsbArray,sizeof(TSB),MAXENTRIES,fp); fclose(fp); }
/*Функция Paint()*/
void MyWindow::Paint(TDC&dc,bool,TRect&){ char s[80];
for(int i=0;i<MAXENTRIES;i++){ strcpy(s,tsbArray[i].nameEdit); strcat(s," ");
strcat(s,tsbArray[i].jobEdit); strcat(s," ");
strcat(s,tsbArray[i].yearEdit); strcat(s," "); if(tsbArray[i].mEdit==true)
strcat(s,"м"); else if(tsbArray[i].fEdit==true)
strcat(s,"ж");
dc.TextOut(5,i*20,s); } }
/*Конструктор класса MyDialog*/
MyDialog::MyDialog(TWindow*parent,TResId resId):TDialog(parent,resId){ new TEdit(this,IDC_NAME,sizeof(tsb.nameEdit)); new TEdit(this,IDC_JOB,sizeof(tsb.jobEdit)); new TEdit(this,IDC_YEAR,sizeof(tsb.yearEdit)) ; new TCheckBox(this,IDC_M); new TCheckBox(this,IDC_F);
TransferBuffer=&tsb;//Назначили tsb буфером обмена memset(&tsb,0,sizeof(TSB)); index=0;//Начинаем с карточки #0 }
/*Таблица откликов класса MyDialog*/ DEFINE_RESPONSE_TABLE1(MyDialog,TDialOg)
EV_COMMAND(IDC_ADD,CmAdd), END_RESPONSE_TABLE;
/*Единственная функция отклика класса MyDialog*/ void MyDialog::CmAdd(){ TransferData(tdGetData);
memmove(&tsbArray[index++] ,&tsb, sizeof (TSB)) ; memset(&tsb,0,sizeof(TSB)); TransferData(tdSetData); GetWindowPtr(GetParent())->Invalidate();}