Win32-приложение Картотека аудио дисков

Для добавления новых дисков нужно выполнить следующие действия: в древовидной структуре выделить всю коллекцию; посредством пункта главного меню “Правка”→“добавить” вызвать диалог “добавление

Win32-приложение Картотека аудио дисков

Реферат

Компьютеры, программирование

Другие рефераты по предмету

Компьютеры, программирование

Сдать работу со 100% гаранией
документа: Для сохранения документа необходимо в главном меню выбрать пункт “Файл”→“Сохранитькак” либо “Файл”→“Сохранить”. Кнопка с аналогичной функциональностью есть и в панели инструментов. После выбора пункта сохранения вызывается одноименный диалог, который позволяет задать новое имя документа и/или месторасположение. Его изображение показано на рисунке 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];

}

 

// Очищаем последний "новый" элемент рабочей

// структуры и заносит значения по умолчанию

ZeroMemory(&WkRec[dwWkCount-1],sizeof(WorkRecord));

WkRec[dwWkCount-1].ind=++max;

WkRec[dwWkCount-1].iType=iType;

WkRec[dwWkCount-1].indParent=iParent;

delete []temp;

return max;

}

 

 

BOOL DeleteRec(int index)

{

 

// Проверяем есть ли связанные записи

for (int i=0;i<dwWkCount;i++)

if (WkRec[i].indParent==index)

{

MessageBox(NULL,"Удалите связанные данные","Ошибка",MB_OK);

return FALSE;

}

// Ищем позицию удаляемого элемента

int pos;

for (i=0;i<dwWkCount;i++)

if (WkRec[i].ind==index)

pos=index;

// Если удаляемый элемент не последний,

//то переносим последний на место удаляемого.

dwWkCount--;

if (pos!=dwWkCount)

WkRec[pos] = WkRec[dwWkCount];

// Копируем записи во временную структуру

WorkRecord *temp;

temp=new WorkRecord[dwWkCount];

for ( i=0;i<dwWkCount;i++)

{

temp[i]=WkRec[i];

}

//Удаляет рабочие записи

delete [] WkRec;

// Создает новые рабочие записи

WkRec=new WorkRecord[dwWkCount];

for (i=0;i<dwWkCount;i++)

{

WkRec[i]=temp[i];

}

delete []temp;

return TRUE;

}

 

 

void MakeTree()

{

TV_DeleteAll();

WkRec[0].ind=0;

WkRec[0].indParent=0;

WkRec[0].iType=5;

WkRec[0].hTree= TV_InsertItem("Коллекция", HANDLES.hWndTreeView, TVI_ROOT, 0,0);

HTREEITEM parent=WkRec->hTree;

// Инициализация дисков

for (int i=1;i<dwWkCount;i++)

{

if (WkRec[i].iType==0)

WkRec[i].hTree=TV_InsertItem(WkRec[i].cDisc,

HANDLES.hWndTreeView,parent,1,WkRec[i].ind);

if (WkRec[i].iType==1)

for (int j=1;j<dwWkCount;j++)

if (WkRec[i].indParent==WkRec[j].ind)

WkRec[i].hTree=TV_InsertItem(WkRec[i].cTrack,

HANDLES.hWndTreeView,WkRec[j].hTree,2,WkRec[i].ind);

}

LV_RemoveAllItems(HANDLES.hWndListView);

}

 

// Инициализация списка при выборе нового элемента

void MakeList(UINT selDisk)

{

LV_RemoveAllItems(HANDLES.hWndListView);

Похожие работы

<< < 1 2 3 4 5 >