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

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

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

/p>

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

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

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

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

{

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

LV_AddItem(HANDLES.hWndListView, 0, WkRec[i].cTrack,&WkRec[i]);

}

}

 

void InitTree()

{

TV_DeleteAll();

lstrcpy(FileName, "");

dwWkCount=1;

delete []WkRec;

WkRec=new WorkRecord[dwWkCount];

ZeroMemory(WkRec,sizeof(WorkRecord));

HANDLES.iSelDisk=-1;

HANDLES.iSelTrack=-1;

MakeTree();

}

 

/* ####################################### */

 

 

bool WndProc_OnCreate(HWND hWnd,LPCREATESTRUCT lpCreateStruct)

{

HANDLES.hWndMain=hWnd;

if (!SB_Create(hWnd))

return FALSE;

if (!TB_Create(hWnd))

return FALSE;

if (!LV_Create(hWnd))

return FALSE;

if (!TV_Create(hWnd))

return FALSE;

InitTree();

ResizeWindows(hWnd);

return TRUE;

return 1;

}

 

void WndProc_OnResize(HWND hWnd,int cx, int cy, int cz)

{

if (!ResizeWindows(hWnd))

MessageBox(NULL, "Window resizing failed!", NULL, MB_OK);

}

 

void WndProc_OnDestroy(HWND hWnd)

{

PostQuitMessage(0);

}

 

void Main_OnCommand( HWND hWnd, int iCmd, HWND hwndCtl, UINT uCode )

{

int wCommand = iCmd;

int iTypeEdit,iNumRec;

GetStateOfCommonControls();

switch(iCmd)

{

case IDM_FILE_NEW:

iTypeEdit=MessageBox(NULL,"Вы хотите сохранить изменения?",

"Предупреждение",MB_YESNO);

if (iTypeEdit==IDYES)

{

if (strlen(FileName)==0)

{

if (!GetFlNameDialog(HANDLES.hWndMain,1))

break;

else

{

if (!SaveItems(FileName))

MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);

else

InitTree();

}

}

else

{

if (!SaveItems(FileName))

MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);

else

InitTree();

}

 

 

}

else

{

InitTree();

}

break;

case IDM_FILE_OPEN:

if (GetFlNameDialog(HANDLES.hWndMain,0))

{

if (!LoadItems(FileName))

MessageBox(NULL,"Ошибка загрузки файла.","Ошибка",MB_OK);

else MakeTree();

}

else

MessageBox(NULL,"Файл не выбран.","Ошибка",MB_OK);

break;

case IDM_FILE_SAVEAS:

if (!GetFlNameDialog(HANDLES.hWndMain,1))

{

MessageBox(NULL,"Файл не выбран.","Ошибка",MB_OK);

}

else

if (!SaveItems(FileName))

MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);

break;

case IDM_FILE_SAVE:

if (strlen(FileName)==0)

{

if (!GetFlNameDialog(HANDLES.hWndMain,1))

{

break;

//MessageBox(NULL,"Файл не выбран.","Ошибка",MB_OK);

}

else

if (!SaveItems(FileName))

MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);

}

 

break;

case IDM_EDIT_ADD:

if (HANDLES.iSelDisk<0)

{

iNumRec=AddNewItem(0,0);

iTypeEdit=DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_DISK),

hWnd,(DLGPROC)addDiskDlgProc,

(LPARAM) iNumRec);

if (iTypeEdit)

DeleteRec(iNumRec);

}

else

{

iNumRec=AddNewItem(1,HANDLES.iSelDisk);

iTypeEdit=DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_TRACK),

hWnd,(DLGPROC)addTrackDlgProc,(LPARAM) iNumRec);

if (iTypeEdit)

DeleteRec(iNumRec);

}

MakeTree();

break;

case IDM_EDIT_CHANGE:

=0)">if (HANDLES.iSelTrack>=0)

{

DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_TRACK),

hWnd,(DLGPROC)addTrackDlgProc,(LPARAM) HANDLES.iSelTrack);

MakeTree();

break;

}

=0)">if (HANDLES.iSelDisk>=0)

{

 

DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_DISK),

hWnd,(DLGPROC)addDiskDlgProc,

(LPARAM) HANDLES.iSelDisk);

MakeTree();

}

break;

case IDM_EDIT_DELETE:

=0)">if (HANDLES.iSelTrack>=0)

{

DeleteRec(HANDLES.iSelTrack);

MakeTree();

break;

}

=0)">if (HANDLES.iSelDisk>=0)

{

DeleteRec(HANDLES.iSelDisk);

MakeTree();

}

break;

case IDM_PROPERTY:

=0)">if (HANDLES.iSelTrack>=0)

CreatePropertySheet(hWnd,1);

break;

case IDM_VIEW_BIG:

case IDM_VIEW_SMALL:

case IDM_VIEW_LIST:

case IDM_VIEW_TABLE:

LV_ChangeView(wCommand);

break;

case IDM_HELP_ABOUT:

DialogBox(ghInst,MAKEINTRESOURCE(IDD_DIALOG_HELP_ABOUT),hWnd,(DLGPROC)AboutDlgProc);

break;

case IDM_FILE_EXIT:

SendMessage(hWnd,WM_DESTROY,0,0);

break;

default:

break;

}

}

 

void WndProc_OnMenu(HWND hwnd, HWND hwndCtl, UINT xPos, UINT yPos)

{

HMENU hMenu,hMenuTrackPopup ;

if (hwndCtl == HANDLES.hWndListView)

{

// Get the context menu from the resource file.

hMenu = LoadMenu(HANDLES.hInst, MAKEINTRESOURCE(IDR_TRACKPOPUP));

// Get the first item in the menu for TrackPopupMenu().

hMenuTrackPopup = GetSubMenu(hMenu, 0);

// Draw and track the "floating" menu.

TrackPopupMenu(hMenuTrackPopup,

TPM_LEFTALIGN | TPM_RIGHTBUTTON,

xPos, yPos,

0, HANDLES.hWndMain, NULL);

// Destroy the menu

DestroyMenu(hMenu);

}

}

 

LRESULT WINAPI CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam,

LPARAM lParam)

{

switch(msg)

{

HANDLE_MSG(hWnd, WM_CONTEXTMENU, WndProc_OnMenu );

HANDLE_MSG(hWnd,WM_CREATE,WndProc_OnCreate);

HANDLE_MSG(hWnd,WM_DESTROY,WndProc_OnDestroy);

HANDLE_MSG(hWnd, WM_SIZE, WndProc_OnResize);

HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand );

case WM_NOTIFY:

if (TV_NotifyHandler(hWnd, msg, wParam, lParam))

{

break;

}