Главная страница
Навигация по странице:

  • Задание на лабораторную работу

  • 1) Определить главные составляющие приложения, необходимые для его функционирования в соответствии с заданием. Главные составляющие

  • 3, 4) Спроектировать реакцию приложения на производимые пользователем действия и возникающие события в приложении. Реализовать приложение с использованием W inAPI

  • на языке С с учетом предыдущих этапов проектирования.

  • Контрольные вопросы Структура Windows -приложения: основные структурные части и их назначение.

  • Оконная функция Windows -приложения: синтаксис, состав, механизм взаимодействия приложения с операционной системой.

  • Функция окна Windows -приложения: синтаксис, параметры функции обратного вызова, механизм взаимодействия приложения с пользователем.

  • Понятие адресного пространства Windows -приложения, структура адресного пространства, понятие процесса и потока.

  • Лабораторные работы по информатике. Разработка приложения с использованием инструментария Winapi


    Скачать 0.6 Mb.
    НазваниеРазработка приложения с использованием инструментария Winapi
    АнкорЛабораторные работы по информатике
    Дата18.06.2021
    Размер0.6 Mb.
    Формат файлаdoc
    Имя файла10384061_858038100805Ol_.doc
    ТипЛабораторная работа
    #218727



    Содержание


    1. Введение 3

    1. Лабораторная работа «Разработка приложения с использованием инструментария WinAPI» 4

    2. Лабораторная работа «Обработка ошибок в Windows» 15

    3. Лабораторная работа «Создание и использование динамически подключаемых библиотек в Windows» 16

    4. Лабораторная работа «Проектирование пользовательского интерфейса с использованием простой транзитивной сети» 17

    5. Лабораторная работа «Проектирование пользовательского интерфейса с использованием рекурсивной транзитивной сети» 18

    6. Лабораторная работа «Проектирование пользовательского интерфейса с использованием сетей Петри» 19

    7. Лабораторная работа «Проектирование пользовательского интерфейса с использованием продукционных правил» 20



    1.Введение


    Данные методические указания содержат описание лабораторных работ по дисциплине «Проектирование пользовательского интерфейса». Лабораторные работы направлены на закрепление теоретических знаний и приобретение практических навыков проектирования и реализации пользовательского интерфейса.

    1.Лабораторная работа «Разработка приложения с использованием инструментария WinAPI»


    Задание на лабораторную работу

    Реализовать windows-приложение, реализующее следующую реакцию на действия пользователя: при клике на левую кнопку мыши создается дочернего окно приложения по отношению к главному, которое отображается в месте клика мыши и в рабочей области которого отображаются координаты клика мыши относительно главного окна; при клике на правую кнопку мыши дочернее окно перемещается в противоположный квадрант главного окна относительно клика мыши.
    Ход работы:

    1. Определить главные составляющие приложения, необходимые для его функционирования в соответствии с заданием.

    2. Определить все возникающие и требующие обработки сообщения Windows в приложении, определить идентификаторы данных сообщений.

    3. Спроектировать реакцию приложения на производимые пользователем действия и возникающие события в приложении.

    4. Реализовать приложение с использованием WinAPI на языке С с учетом предыдущих этапов проектирования.
    Контрольные вопросы

    1. Структура Windows-приложения: основные структурные части и их назначение.

    1. Оконная функция Windows-приложения: синтаксис, состав, механизм взаимодействия приложения с операционной системой.

    1. Функция окна Windows-приложения: синтаксис, параметры функции обратного вызова, механизм взаимодействия приложения с пользователем.

    2. Понятие адресного пространства Windows-приложения, структура адресного пространства, понятие процесса и потока.


    1) Определить главные составляющие приложения, необходимые для его функционирования в соответствии с заданием. Главные составляющие:

    • Оконная функция WinMain, необходимая для регистрации класса окна, создания главного окна программы и запуска цикла обработки сообщения;

    • Функции окна WndPopup и WndProc, необходимые для обработки сообщений;

    • Функция RegClass необходимая для регистрации WNDCLASS;

    • Структура контекста устройства приложения HDC;

    • Структура PAINTSTRUCT содержащая информацию для приложения

    • Структура RECT определяющая координаты углов треугольника

    2) Определить все возникающие и требующие обработки сообщения Windows в приложении, определить идентификаторы данных сообщений. Для выполнения поставленной задачи необходимо обработать следующие сообщения:

    • Сообщение перемещения окна. Идентификатор WM_MOVE;

    • сообщение изменения размеров окна. Идентификатор WM_SIZE;

    • сообщение нажатия левой кнопки мыши. Идентификатор WM_LBUTTONDOWN;

    • сообщение нажатия правой кнопки мыши. Идентификатор WM_RBUTTONDOWN;

    • сообщение закрытия окна. Идентификатор WM_DESTROY;

    • сообщение окрашивания окна. Идентификатор WM_PAINT.

    3, 4) Спроектировать реакцию приложения на производимые пользователем действия и возникающие события в приложении. Реализовать приложение с использованием WinAPI на языке С с учетом предыдущих этапов проектирования.

    Исходный код:

    #include

    BOOL RegClass(WNDPROC, LPCTSTR, UINT);

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    LRESULT CALLBACK WndPopup(HWND, UINT, WPARAM, LPARAM);

    INSTANCE hInstance;

    char szMainName[] = "MainClass";

    char szPopupClass[] = "PopupClass";

    char szTitle[] = "Laboratornaya1";

    static HWND hwnds;

    char posMouse[20];

    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,

    LPSTR lpszCmdLine, int nCmdShow)

    {

    MSG msg;

    HWND hwnd;

    hInst = hInstance;

    if (!RegClass(WndProc, szMainName, COLOR_DESKTOP))

    return FALSE;

    if (!RegClass(WndPopup, szPopupClass, COLOR_BTNFACE))

    return FALSE;

    hwnd = CreateWindow(szMainName, szTitle,

    WS_OVERLAPPEDWINDOW|WS_VISIBLE,

    0, 0, 1400, 700,

    0, 0, hInstance, NULL);

    if (!hwnd) return FALSE;

    while (GetMessage(&msg, 0, 0, 0))

    {

    TranslateMessage(&msg);

    DispatchMessage(&msg);

    }

    return msg.wParam;

    }

    int RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)

    {

    WNDCLASS wc;

    wc.style = CS_HREDRAW | CS_VREDRAW;

    wc.cbClsExtra = wc.cbWndExtra = 0;

    wc.lpfnWndProc = Proc;

    wc.hInstance = hInstance;

    wc.hIcon = LoadIcon(NULL, IDI_INFORMATION);

    wc.hCursor = LoadCursor(NULL, IDC_CROSS);

    wc.hbrBackground = (HBRUSH)(brBackground);

    wc.lpszMenuName = (LPCTSTR)NULL;

    wc.lpszClassName = szName;

    return RegisterClass(&wc);

    }

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

    {

    static short left, top, Width, Height;

    static short cxClient, cyClient;

    RECT rc;

    switch(msg)

    {

    case WM_MOVE:

    {

    GetWindowRect(hwnd, &rc);

    if (IsWindow(hwnds))

    MoveWindow(hwnds,

    (rc.left + rc.right)/2,

    (rc.top + rc.bottom)/2,

    Width, Height, TRUE);

    return 0;

    }

    case WM_SIZE:

    {

    GetWindowRect(hwnd, &rc);

    cxClient = LOWORD(lParam);

    cyClient = HIWORD(lParam);

    Width = cxClient/2;

    Height = cyClient/2;

    if (IsWindow(hwnds))

    MoveWindow(hwnds,

    (rc.left + rc.right)/2,

    (rc.top + rc.bottom)/2,

    Width, Height, TRUE);

    return 0;

    }

    case WM_LBUTTONDOWN:

    {

    GetWindowRect(hwnd, &rc);

    cxClient = LOWORD(lParam);

    cyClient = HIWORD(lParam);

    _itoa(cxClient, posMouse, 10);

    strcat(posMouse, " ");

    char y[10];

    _itoa(cyClient, y, 10);

    strcat(posMouse, y);

    if (hwnds != NULL)

    return 0;

    hwnds = CreateWindow(szPopupClass, "ChildWindow",

    WS_POPUPWINDOW | WS_CAPTION | WS_VISIBLE,

    (rc.left + rc.right)/2,

    (rc.top + rc.bottom)/2,

    Width, Height, hwnd, 0, hInstance, NULL);

    break;

    }

    case WM_RBUTTONDOWN:

    {

    GetWindowRect(hwnd, &rc);

    cxClient = LOWORD(lParam);

    cyClient = HIWORD(lParam);

    if (cxClient < (rc.left + rc.right)/2)

    {

    if (cyClient < (rc.top + rc.bottom)/2)

    MoveWindow(hwnds,

    (rc.left + rc.right)/2, (rc.top + rc.bottom)/2,

    Width, Height, TRUE);

    Else

    MoveWindow(hwnds,

    (rc.left + rc.right)/2, rc.top + 15,

    Width, Height, TRUE);

    }

    else if (cxClient >= (rc.left + rc.right)/2)

    {

    if (cyClient < (rc.top + rc.bottom)/2)

    MoveWindow(hwnds,

    rc.left + 5, (rc.top + rc.bottom)/2,

    Width, Height, TRUE);

    Else

    MoveWindow(hwnds,

    rc.left + 5, rc.top + 15,

    Width, Height, TRUE);

    }

    return 0;

    }

    case WM_DESTROY: { PostQuitMessage(0); return 0; }

    }

    return DefWindowProc(hwnd, msg, wParam, lParam);

    }

    LRESULT CALLBACK WndPopup(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

    {

    HDC hDC;

    PAINTSTRUCT ps;

    RECT rc;

    switch(msg)

    {

    case WM_PAINT:

    {

    hDC = BeginPaint(hwnds, &ps);

    GetClientRect(hwnds, &rc);

    SetTextColor(hDC, RGB(255, 0, 0));

    SetBkColor(hDC, RGB(255, 255, 255));

    SetTextColor(hDC, TA_CENTER);

    TextOut(hDC, (rc.left + rc.right)/2,

    (rc.top + rc.bottom)/2, posMouse, strlen(posMouse));

    EndPaint (hwnd, &ps);

    return 0;

    }

    case WM_DESTROY: { hwnds = NULL; break;}

    }

    return DefWindowProc(hwnd, msg, wParam, lParam);

    }


    Главное окно программы



    Появление окна с координатами клика мышки
    Контрольные вопросы

    1. Структура Windows-приложения: основные структурные части и их назначение.

    Структура Windows-приложения состоит из оконной функции WinMain() и функции окна WndProc().

    Функция WinMain() нужна для регистрации класса окна, создания главного окна приложения и создания цикла обработки сообщений

    Функция окна WndProc() нужна для связывания сообщений с соответствующими функциями обработки сообщений и непосредственно вызова этих функций обработки сообщения.


    1. Оконная функция Windows-приложения: синтаксис, состав, механизм взаимодействия приложения с операционной системой.

    Синтаксис:

    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
    Внутри функции WinMain() необходимо провести следующее:


    1. Зарегистрировать класс окна с помощью функции RegClass().

    2. Создать окно приложения с помощью функции CreateWindow().

    3. Создать цикл обработки сообщений while, получающий сообщения с помощью функции GetMessage() и проводящий обработку сообщений с помощью функций TranslateMessage() и DispatchMessage().

    Цикл отображен на рисунке ниже.




    1. Функция окна Windows-приложения: синтаксис, параметры функции обратного вызова, механизм взаимодействия приложения с пользователем.

    Синтаксис:

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

    Параметры функции окна WndProc():

    1. Дескриптор окна адресата hwnd, обрабатывающее сообщениеж

    2. Передаваемое сообщение msg;

    3. Первый параметр сообщения wParam;

    4. Второй параметр сообщения lParam.

    Функция окна вызывается непосредственно самой ОС. Тип возвращаемого значения функции окна жестко заданы в отличие от имени функции окна, которое может быть выбрано произвольно. Имя функции окна должно быть зарегистрировано в Windows. Это происходит при регистрации структры окна.

    Функция окна получает сообщение и соответственно реагирует на него. Каждое окно определяет свою собственную функцию, которая принимает поступившие сообщения и проводит соответствующую обработку. Для непосредственной обработки сообщений используется оператор switch, с помощью ветвей которого устанавливается, какое сообщение было принято, и вызывается соответствующая функция обработки поступившего сообщения. Все сообщения, которые не связаны с собственными функциями обработки сообщений, должны быть переданы функции DefWindowsProc().


    1. Понятие адресного пространства Windows-приложения, структура адресного пространства, понятие процесса и потока.

    Процесс – экземпляр выполняемой программы. Процесс состоит из двух компонентов:

    • объект ядра;

    • адресного пространства.

    Каждому процессу выделяется собственное виртуальное адресное пространство. Для 32-разрядных процессов его размер составляет 4 Гб. Соответственно 32-битный указатель может быть любым числом от 0x00000000 до OxFFFFFFFF. Всего, таким образом, указатель может принимать 4 294 967 296 значений, что как раз и перекрывает четырех гигабайтовый диапазон. Для 64-разрядных процессов размер адресного пространства равен 1б экзабайтам, поскольку 64-битный указатель может быть любым числом от 0x00000000 00000000 до OxFFFFFFFF FFFFFFFF и принимать 18446 744 073 709 551 616 значений, охватывая диапазон в 16 экзабайтов.

    Виртуальное адресное пространство каждого процесса разбивается на такие разделы как:

    • раздел для выявления нулевых указателей:

    • раздел для совместимости с программами DOS и 16-разрядной Windows;

    • раздел для кода и данных пользовательского режима;

    • закрытый раздел размером 64 кб;

    • раздел для файлов, проецируемых в память;

    • раздел для кода и данных режима ядра.

    Поток – базовая единица выполнения в Windows. Каждый процесс состоит из одного или нескольких потоков.

    2.Лабораторная работа «Обработка ошибок в Windows»


    Задание на лабораторную работу

    Реализовать Windows-приложение, обрабатывающее следующие ошибки:

    1. Ошибка регистрации класса окон;

    2. Ошибка создания окна приложения;

    3. Любая пользовательская ошибка приложения на выбор.

    Ограничение: запрещается использовать функцию SetLastError().
    Ход работы:

    1. В соответствии с механизмом обработки ошибок в Windows определить участки кода приложения, где необходимо реализовать отлов и обработку возникающих ошибок.

    2. Реализовать обработку ошибок в Windows, выводя на экран сообщения со следующей информацией: код ошибки, описание ошибки на системном языке, описание ошибки на национальном языке.
    Контрольные вопросы

    1. Понятие ошибки в Windows: код ошибки, структура кода, хранение кодов ошибок в Windows и функции их обработки.

    1. Структура информации в файле WinError.h, механизм обработки ошибок в Windows.

    3.Лабораторная работа «Создание и использование динамически подключаемых библиотек в Windows»


    Задание на лабораторную работу

    Реализовать Windows-приложение, использующее динамически подключаемую библиотеку: приложение работает с графической информацией, позволяет рисовать разные типы фигур (линия, прямоугольник, круг) с использованием мыши. Требование: реализовать и использовать минимум три фигуры и три разных цвета. В библиотеке реализовать минимум три любые функции, разрешается выбрать любой способ связывания библиотеки и windows-приложения.
    Ход работы:

    1. Определить функции, которые необходимо реализовать в динамически подключаемой библиотеке. Создать заголовочный файл библиотеки и файл исходного кода библиотеки.

    2. Создать исполняемый модуль библиотеки, проведя сборку, линковку и компиляцию исходных файлов.

    3. Определить какой будете использовать метод связывания динамически подключаемой библиотеки и windows-приложения.

    4. Реализовать windows-приложение, использующее созданную библиотеку (и вызывающее реализованные функции из библиотеки) и выбранный метод связывания.
    Контрольные вопросы

    1. Понятие динамически подключаемой библиотеки в windows. Особенности использования, преимущества использования динамически подключаемых библиотек в windows.

    2. Этапы создания динамически подключаемых библиотек в windows.

    3. Методы связывания библиотек и windows-приложений. Особенности загрузки библиотек в адресное пространство процесса в зависимости от метода связывания.

    4. Методы выгрузки библиотек.

    4.Лабораторная работа «Проектирование пользовательского интерфейса с использованием простой транзитивной сети»


    Задание на лабораторную работу

    Реализовать Windows-приложение, позволяющее динамически собирать SQL-запрос к БД и выполнять данные запросы к БД с выводом результата запроса на экран. Приложение должно работать в двух режимах: в режиме таблицы и в режиме запроса (с возможностью формирования сложных условий в разделе where запроса).
    Ход работы:

    1. Спроектировать экранную форму (окно/окна) windows-приложения, определяя подробно функционал каждой части.

    2. Разработать простую транзитивную сеть логики диалога, описывающую функционирование приложения.

    3. Разработать механизм поддержки простой транзитивной сети, реализовать алгоритм функционирования простой транзитивной сети, учитывая разработку алгоритмов доступа к БД.
    Контрольные вопросы

    1. Простая транзитивная сеть: графическое представление, механизм функционирования сети. Структура модуля логики диалога в Windows.

    2. Конечный автомат как принцип функционирования простой транзитивной сети.

    3. Алгоритм реализации и функционирования простой транзитивной сети.

    5.Лабораторная работа «Проектирование пользовательского интерфейса с использованием рекурсивной транзитивной сети»


    Задание на лабораторную работу

    Реализовать Windows-приложение, позволяющее динамически собирать SQL-запрос к БД и выполнять данные запросы к БД с выводом результата запроса на экран. Приложение должно работать в двух режимах: в режиме таблицы и в режиме запроса (с возможностью формирования сложных условий в разделе where запроса). Для выполненных запросов организовать архив с возможностью выбора сохраненного запроса и его повторного выполнения.
    Ход работы:

    1. Спроектировать экранную форму (окно/окна) windows-приложения, определяя подробно функционал каждой части, в том числе и архива SQL-запросов.

    2. Разработать рекурсивную транзитивную сеть логики диалога, описывающую функционирование приложения.

    3. Разработать механизм поддержки рекурсивной транзитивной сети, реализовать алгоритм функционирования рекурсивной транзитивной сети, учитывая разработку алгоритмов доступа к БД и функционирование архива запросов к БД.
    Контрольные вопросы

    1. Рекурсивная транзитивная сеть: графическое представление, механизм функционирования сети, понятие подсети. Математическая модель рекурсивной транзитивной сети.

    2. Конечный автомат как принцип функционирования рекурсивной транзитивной сети. Использование стека для конечного автомата и реализация стекового конечного автомата.

    3. Алгоритм реализации и функционирования рекурсивной транзитивной сети.

    6.Лабораторная работа «Проектирование пользовательского интерфейса с использованием сетей Петри»


    Задание на лабораторную работу

    Реализовать многопоточное Windows-приложение с двумя потоками:

    1. Первый поток загружает последовательно графическую информацию в рабочую область главного окна

    2. Второй поток отображает бегущую строку в полосе статусе главного окна.

    Для каждого из потоков создать кнопку по принципу конкурентного диалога: нажатие на первую кнопку приостанавливает/возобновляет первый поток, вторая кнопка производит те же действия со вторым потоком.

    Пользовательский интерфейс спроектировать и реализовать с использованием сети Петри для конкурентного диалога.
    Ход работы:

    1. Спроектировать экранную форму (окно/окна) windows-приложения, определяя подробно функционал каждой части.

    2. Разработать сеть Петри логики диалога, описывающую функционирование приложения.

    3. Реализовать сеть Петри для пользовательского интерфейса разрабатываемого приложения.
    Контрольные вопросы

    1. Сеть Петри: графическое представление, механизм функционирования сети.

    2. Конечный автомат как принцип функционирования сети Петри.

    3. Алгоритм реализации и функционирования сети Петри.

    7.Лабораторная работа «Проектирование пользовательского интерфейса с использованием продукционных правил»


    Задание на лабораторную работу

    Реализовать Windows-приложение для игры «Морской бой», пользовательский интерфейс для которого спроектировать и реализовать с использованием продукционных правил (продукционных правил, ориентированных на события; продукционных правил, ориентированных на состояния; смешанных продукционных правил).
    Ход работы:

    1. Спроектировать экранную форму (окно) windows-приложения для игры «Морской бой».

    2. Разработать все виды продукционных правил для реализации логики диалога приложения.

    3. Реализовать в приложении любой один из разработанных видов диалогов для данного приложения.
    Контрольные вопросы

    1. Продукционные правила: виды, назначение, использование, механизм функционирования.

    2. Алгоритм реализации и функционирования продукционных правил.



    написать администратору сайта