Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Win32_f.doc
Скачиваний:
2
Добавлен:
03.05.2019
Размер:
899.07 Кб
Скачать

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();}