Win32-приложение Картотека аудио дисков
Реферат - Компьютеры, программирование
Другие рефераты по предмету Компьютеры, программирование
?ь отчет “Данные добавлены”, изображенный на рисунке 15 (диалог не должен закрыться т.к. он предполагает множественное добавление информации);
В результате всех действий получим пример, изображенный на рисунке 7.
4.сохранение документа: Для сохранения документа необходимо в главном меню выбрать пункт “Файл”>“Сохранитькак” либо “Файл”>“Сохранить”. Кнопка с аналогичной функциональностью есть и в панели инструментов. После выбора пункта сохранения вызывается одноименный диалог, который позволяет задать новое имя документа и/или месторасположение. Его изображение показано на рисунке 9. В диалоге следует задать новое имя документа и его месторасположение и нажать на кнопку “Сохранить”.
5.выход из программы: Выход из программ можно осуществить путем выбора пункта главного меню “Файл”>“Выход”. Также выход осуществляется нажатием кнопки “X” в заголовке главного окна приложения.
6.запуск программы: смотреть действие 1.
7.открытие документа: Для открытия документа следует выбрать пункт главного меню “Файл”>“Открыть” либо воспользоваться аналогичной кнопкой в панели инструментов. В результате всех действий должен получиться результат, как и в “3.наполнение документа ”, который изображен на рисунке 7.
Заключение
Проделав значительную работу я изучил возможности работы с winapi (и в частности способы манипулирования данными в элементах управления). Изучил механизмы создания пользовательских классов и принципы наследования в языке C++.
Литература
- MSDN Library - техническая справка для разработчиков программного обеспечения. - MicroSoft Corp., 2004.
- Е. Демидович - Основы алгоритмизации и программирования на си. - Бестпринт, 2003.
- Страуструп - Язык программирования C++. - Бином, 2004.
ПриложениеA Листинг программы
Исходные тексты
#include "includes.h"
#include "main.h"
#define WX 600
#define WY 300
#define COLOR RGB(0xff,0xff,0xff)
#define WIN_STYLE WS_OVERLAPPED|WS_SYSMENU|WS_CAPTION|WS_BORDER|WS_MINIMIZEBOX
#define Error_title "Error"
#define AplicationTitle "Картотека дисков"
#define ClassName "MY_CLASS"
HINSTANCE ghInst;
/* ############################### */
/* ### ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ### */
/* ############################### */
char buf[10]; char* toString(int value,int radix=10){
itoa(value,buf,radix);
return buf;};
/* ######################################### */
/* ### ДИАЛОГИ - ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ### */
/* ######################################### */
bool getFileDlg(HWND hWnd,char *name,char *mask,int mask_size=0){
char szF[1024]="";
OPENFILENAME ofn;
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner=hWnd;
ofn.lpstrFile=szF;
ofn.nMaxFile=sizeof(szF);
ofn.lpstrFilter=mask;
ofn.nFilterIndex=2;
ofn.lpstrFileTitle=NULL;
ofn.nMaxFileTitle=0;
ofn.lpstrInitialDir=NULL;
ofn.Flags=OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn)==TRUE){
sprintf(name,"%s",ofn.lpstrFile);
return 1;}
sprintf(name,"%s","");
return 0;}
/* ##################################### */
/* ### ДИАЛОГИ - ОБРАБОТКА СООБЩЕНИЙ ### */
/* ##################################### */
LRESULT CALLBACK addTrackDlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int id=LOWORD(wParam);
static int ind=lParam,pos=0;
int i;
switch (uMsg)
{
case WM_INITDIALOG:
ind=lParam;
for (i=0;i<dwWkCount;i++)
if (WkRec[i].ind==ind)
pos = i;
SetDlgItemText(hwndDlg,IDC_EDIT_TRACK,WkRec[pos].cTrack);
SetDlgItemText(hwndDlg,IDC_EDIT_SINGER,WkRec[pos].cSinger);
SetDlgItemText(hwndDlg,IDC_EDIT_DATE,WkRec[pos].cDate);
return FALSE;
break;
case WM_COMMAND:
switch (id)
{
case IDC_OK:
GetDlgItemText(hwndDlg,IDC_EDIT_TRACK,WkRec[pos].cTrack,100);
GetDlgItemText(hwndDlg,IDC_EDIT_SINGER,WkRec[pos].cSinger,30);
GetDlgItemText(hwndDlg,IDC_EDIT_DATE,WkRec[pos].cDate,20);
EndDialog(hwndDlg,0);
break;
case IDC_CANCEL:
EndDialog(hwndDlg,1);
break;
}
break;
default:
return FALSE;
}
}
int GetMaxInd()
{
int maxind=0;
for (int i=0;i<dwWkCount;i++)
{
if (WkRec[i].iNum>maxind)
{
maxind=WkRec[i].iNum;
}
}
return maxind;
}
LRESULT CALLBACK addDiskDlgProc(HWND hwndDlg,UINT uMsg,
WPARAM wParam,LPARAM lParam)
{
int id=LOWORD(wParam);
static int ind=lParam,pos=0;
int i;
switch (uMsg)
{
case WM_INITDIALOG:
ind=lParam;
for (i=0;i<dwWkCount;i++)
if (WkRec[i].ind==ind)
pos = i;
SetDlgItemText(hwndDlg,IDC_EDIT_GROUP,WkRec[pos].cGroup);
SetDlgItemText(hwndDlg,IDC_EDIT_ALBUM,WkRec[pos].cDisc);
return FALSE;
break;
case WM_COMMAND:
switch (id)
{
case IDC_OK:
GetDlgItemText(hwndDlg,IDC_EDIT_GROUP,WkRec[pos].cGroup,50);
GetDlgItemText(hwndDlg,IDC_EDIT_ALBUM,WkRec[pos].cDisc,30);
WkRec[pos].iNum=GetMaxInd()+1;
EndDialog(hwndDlg,0);
break;
case IDC_CANCEL:
EndDialog(hwndDlg,1);
break;
}
break;
default:
return FALSE;
}
}
LRESULT CALLBACK AboutDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG: {return TRUE;};
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDOK:{
EndDialog(hDlg,0);
return TRUE;}}
break;
default:
return(FALSE);
}
return(TRUE);
}
UINT AddNewItem(UINT iType,UINT iParent)
{
//Создаем временную рабочую структуру
WorkRecord *temp;
temp=new WorkRecord[dwWkCount];
UINT max=WkRec[0].ind;
//Копируем во временную структуру рабочую. Находим последний индекс
// в рабочей структуре
for (int i=0;i<dwWkCount;i++)
{
if (max<WkRec[i].ind)
max=WkRec[i].ind;
temp[i]=WkRec[i];
}
// Пересоздаем рабочую структуру с новым размером
delete [] WkRec;
WkRec=new WorkRecord[++dwWkCount];
//Копируем записи из временной структуры в рабочую
for (i=0;i<dwWkCount-1;i++)
{
//ZeroMemory(&WkRec[i],sizeof(WorkRecord));
WkRec[i]=temp[i];
}
<