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

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

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

?ь отчет “Данные добавлены”, изображенный на рисунке 15 (диалог не должен закрыться т.к. он предполагает множественное добавление информации);

  • выполнить многократное выполнение пунктов a, b, c и d с получение результата из пункта e в количестве четырех итераций с начальным значением 2, в качестве данных брать те же значения изменяя “X” на номер итерации.
  • в древовидной структуре выделить узел “Ария:Диск2”;
  • выполнить 2 и 3 пункты.
  • В результате всех действий получим пример, изображенный на рисунке 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];

    }

     <