66567

Работа с графической средой ОС UNIX и Windows

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы – изучить архитектуру системы X Window, базовых механизмов отображения графической информации и способов управления графическими окнами в UNIX, основные компоненты оконного интерфейса в Windows.

Русский

2014-08-22

44 KB

0 чел.

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

—————————

Кафедра информационной безопасности компьютерных систем

ОТЧЕТ

по лабораторной работе №7 

«Работа с графической средой ОС UNIX и Windows»

по курсу «Операционные системы»

Студент:

Никитин А. С.

гр. 2088/1

Преподаватель:

Степанова Т. В.

Санкт-Петербург — 2011

1. Формулировка задания

Цель работы – изучить архитектуру системы X Window, базовых механизмов отображения графической информации и способов управления графическими окнами в UNIX, основные компоненты оконного интерфейса в Windows.

2. Использованные теоретические сведения

3. Результаты работы

3.1. Выполнение примеров

  1.  X Window. Выполнить компиляцию и запуск программы из примера 2. Выполнить перемещение и изменение размеров окон клиента средствами оконного менеджера во время их пребывания на экране, убедиться в изменении содержания окон после таких операций.
    Компиляция программы была выполнена командой gcc -I/usr/include -L/usr/lib -lX11
    main.c. После запуска были созданы два окна, которые можно было перемещать и изменять их размер. Содержание окон после операций изменяется.

3.2. Выполнение индивидуального задания

  1.  WINAPI. Создать оконное приложение, имеющие в рабочей области главного окна два поля ввода текста (EDIT) и кнопку (BUTTON). По нажатию кнопки текст из одного окна ввода (например, правого или верхнего, в зависимости от расположения) копирует в другое (левое или нижнее соответственно). Если текст не введён, должно появляться окно сообщения с информацией о том, что текст не введён.
    #include <windows.h>
    #include <stdio.h>

    HWND window, bg, in, out, btnCopy;

    TCHAR textS[128];
    WORD textL;

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
       WNDCLASSEXA wndClass;
       MSG message;
       wndClass.cbSize = sizeof(WNDCLASSEXA);
       wndClass.style = 0;
       wndClass.lpfnWndProc = WindowProc;
       wndClass.cbClsExtra = 0;
       wndClass.cbWndExtra = 0;
       wndClass.hInstance = hInstance;
       wndClass.hIcon = LoadIconA(0, IDC_NO);
       wndClass.hCursor = LoadCursorA(0, IDC_ARROW);
       wndClass.hbrBackground = (HBRUSH) COLOR_BTNTEXT;
       wndClass.lpszMenuName = "";
       wndClass.lpszClassName = "window";
       wndClass.hIconSm = LoadIconA(0, IDC_NO);
       RegisterClassExA(&wndClass);
       window = CreateWindowExA(0, "window", "Sample window", WS_SYSMENU, 300, 300, 400, 95, NULL, NULL, hInstance, NULL);
       bg = CreateWindowExA(0, "STATIC", "", WS_CHILD, 0, 0, 400, 200, window, NULL, hInstance, NULL);
       in = CreateWindowExA(0, "EDIT", "", WS_CHILD, 5, 5, 380, 15, window, NULL, hInstance, NULL);
       out = CreateWindowExA(0, "EDIT", "", WS_CHILD, 5, 50, 380, 15, window, NULL, hInstance, NULL);
       btnCopy = CreateWindowExA(0, "BUTTON", "Copy", WS_CHILD, 5, 25, 60, 20, window, NULL, hInstance, NULL);
       ShowWindow(window, SW_SHOW);
       ShowWindow(bg, SW_SHOW);
       ShowWindow(in, SW_SHOW);
       ShowWindow(out, SW_SHOW);
       ShowWindow(btnCopy, SW_SHOW);
       while (GetMessageA(&message, NULL, 0, 0)) {
           TranslateMessage(&message);
           DispatchMessageA(&message);
       }
       return message.wParam;
    }

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
       switch (uMsg) {
           case WM_COMMAND:
               if (HIWORD(wParam) == BN_CLICKED) {
                   if (lParam == (long) btnCopy) {
                       textL = SendMessageA(in, EM_LINELENGTH, 0, 0);
                       if (textL == 0) {
                           MessageBoxA(window, "Input field is empty", "Error", MB_OK);
                       } else {
                           SendMessageA(in, WM_GETTEXT, 128, (LPARAM) textS);
                           textS[textL] = 0;
                           SendMessageA(out, WM_SETTEXT, 0, (LPARAM) textS);
                       }
                   }
               }
           break;
           case WM_DESTROY:
               PostQuitMessage(0);
           break;
           default:
               return DefWindowProc(hWnd, uMsg, wParam, lParam);
       }
       return 0;
    }

3.3. Ответы на контрольные вопросы

  1.  Предложите несколько способов загрузки цветного изображения из файла операционной системы X-клиента в окно на экране X-сервера средствами библиотеки Xlib.
    Можно отобразить цветное изображение поточечно, используя XDrawPoint, можно использовать пиксельные карты и отображать изображение с помощью XCopyArea, а ещё более удобным способом будет использование XCreateImage и XPutImage, или XReadBitmapFile.
  2.  Какие действия обычно выполняет функция WinMain?
    Функция
    WinMain реализует инициализацию программы и цикл обработки сообщений.
  3.  Для чего необходимо регистрировать класс окна?
    Регистрация класса окна позволяет создавать новые классы, определяющие требуемое поведение окна, если такой класс не существует в системе.
  4.  Какие характеристики класса окон можно задать при его регистрации? Какие поля структуры, описывающей класс окна, являются наиболее важными?
    Стиль класса, указатель на оконную процедуру, указатель на экземпляр программы, которая содержит процедуру, указатель на пиктограмму окна, указатель на курсор, указатель на фоновую кисть, строка с названием класса. Наиболее важными являются указатель на процедуру, указатель на экземпляр, содержащий процедуру и название класса.

4. Выводы

Современные системы предоставляют широкий набор возможностей для создания графического интерфейса. В UNIX работа с интерфейсом заключается в обмене информацией между сервером и клиентом, а в Windows – в обмене сообщениями между окнами.

Приложение

Исходные тексты программ


 

А также другие работы, которые могут Вас заинтересовать

59283. ВЕРНІСАЖ ВЕСНЯНИХ КВІТІВ 30 KB
  А зараз відгадайте загадки Заспіва весна в ріжок Квітка робить перший крок Прошиває ковдру снігу І веде до нас відлигу Як зовуть цю ранню квітку Чи зустрінем ї влітку Підсніжник...
59284. ОЙ ВЕСНО, ВЕСНЯНОЧКО 41.5 KB
  Весна Так правильно. Що за три брати навесні землю прикрашають То коли приходить березень А коли гостює квітень А де шукати травень Весна гарна пора року. Красуня весна принесла із собою багато загадок: Коли це буває і як воно зветься Хмариночка плаче а поле сміється Весною...
59285. Поле чудес, Сценарій виховного заняття 30 KB
  Напевно ви теж хотіли б пограти у цю гру, що ми зараз і зробимо. А зараз нам потрібно вибрати трьох учасників гри. Для цього я для кожного ряду загадаю загадку. А хто найшвидше відгадає, той буде одним з учасників.
59286. У світі цікавого 28 KB
  Мета: закріпити знання з вивчених казок. Обладнання: Уривки казок малюнки до казок ребуси. Тепер перейдем до третього конкурсу відгадування казок. Ми читаємо уривки з казок а ви відгадуєте з якої це казки.
59287. Козацькі забави 37 KB
  У кінці змагань курінь-переможець нагороджується символами гетьманської влади та призами. Переможе той курінь чий захисник найдовше протримається захищаючи свою фортецю. Перемагає курінь члени якого здолали найбільше суперників.
59288. Слабка ланка 68 KB
  Назвіть 101ий елемент періодичної системи Мендєлєєва. Назвіть дану кислоту. Назвіть хімічний елемент який розташований у першому періоді і пешій групі головної підгрупи. Назвіть метал який пасивує нітратна кислота.
59289. Дружні стосунки між школярами. Які вони повинні бути 74 KB
  Мета. Виховувати дружні стосунки між школярами, розкрити перевагу добра над злом. Виховувати бажання жити в мирі й злагоді з рідними, близькими.
59290. Сценарій виховного заходу. Пори року 99.5 KB
  Не перелічити скільки разів зустрічаємо ми ніжну берізку і могутню ялину безмежні поля і дрімучі ліси озера і суворі скелі. Ось і писати треба так щоб на картині не було видно його але чутно було як співають птахи віють вітри дзюркотять струмки...
59291. НАШІ БАБУСІ 30 KB
  Діти сьогодні до нас завітали найулюбленіші для кожного з вас люди ваші бабусі. Ось вслухайтесь діти у саме слово: бабуся бабусенька бабунечка бабусечка бабця. А чому Діти. Тому що бабуся прожила на світі удвічі більше ніж наші мама і тато бачила в житті удвічі більше ніж наші мамо й тато...