Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_elektronnykh_ustroystv.doc
Скачиваний:
53
Добавлен:
28.05.2015
Размер:
1.44 Mб
Скачать

Контрольные вопросы

  1. Какую функцию выполняет драйвер видеокарты при выполнении в программе команды построения графического примитива, например, эллипса?

  2. Что такое контекст устройства? Какое его назначение?

  3. Можно ли просто изменить байты информации в видеопамяти и сразу увидеть результат на экране монитора в рамках ОС Windows?

  4. Последние версии ОС Windowsчасто используютDirectXс целью вывода информации на экран, например, в браузере, а не универсальные функцииGDI? С чем это связано?

  5. Что такое перо, что такое кисть в терминах GDI?

  6. Как в приведенном примере построения круговой диаграммы реализуется эффект «тени»?

  7. Где по умолчанию находится центр координат при выводе информации на экран? Какое направление осей координат? В каких единицах измеряются координаты?

  8. Зачем при выборе цвета кисти заливки замкнутой фигуры необходимо сохранять идентификатор предыдущей используемой кисти?

  9. Существуют ли отличия в программном выводе информации на экран монитора или на принтер? Почему?

  10. Как получить контекст принтера для печати на нем?

    1. Организация интерфейса пользователя

Современные операционные системы с графическим интерфейсом предоставляют приложениям богатый выбор элементов управления, с помощью которых организуется взаимодействие программы с пользователем:

  1. меню;

  2. диалоговые окна;

  3. кнопки;

  4. списки;

  5. полосы прокрутки;

  6. индикаторы;

  7. переключатели разных типов;

  8. и т.п.

Использование стандартных элементов позволяет любой программе выглядеть как все остальные программы под эту ОС.

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

  1. Разработка внешнего вида программы, заключающая в размещении элементов управления в окне программы, диалоговых окнах.

  2. Написание обработчиков команд элементов управления.

Первый шаг осуществляется с помощью специальных редакторов интерфейса, входящих в среду разработки программ. Разработчик создает меню, диалоговые окна, мышкой размещает элементы управления. Затем интерфейс несколькими командами (функциям Си) подключается к программе. После этого все элементы присутствуют в программе, однако при нажатии на них не происходит ничего.

Вторым шагом является написание обработчиков событий, которые генерируются при нажатии на соответствующие элементы управления, чтобы они “заработали”.

Такой подход называется визуальным программированием, от чего, например, и происходит название VisualStudio,VisualC++,VisualBasicи т.д.

На простом примере рассмотрим подключение меню к программе.

// Стандартный включаемый файл Windows

#include <windows.h>

#include «resource.h»

// Прототип функции обратного вызова для обработки сообщений

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

int g_iShape = 0;

// Функция вызывается автоматически, когда программа запускается

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{

HWND hWnd;

MSG msg;

WNDCLASSEX wndclass;

// Настройка класса окна

wndclass.cbSize = sizeof(WNDCLASSEX);

wndclass.style = CS_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;

wndclass.cbClsExtra = 0;

wndclass.cbWndExtra = 0;

wndclass.hInstance = hInstance;

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);

wndclass.lpszClassName = “Window Class”; // Имя класса

wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

// Регистрация класса окна

if (RegisterClassEx(&wndclass) == 0)

{

// Сбой программы, выход

return 0;

}

// Создание окна

hWnd = CreateWindowEx(

WS_EX_OVERLAPPEDWINDOW,

«Window Class», // Имя класса

«Приложение Windows», // Текст заголовка

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

320,

320,

NULL,

NULL,

hInstance,

NULL);

// Отображение окна

ShowWindow(hWnd, iCmdShow);

// Обработка сообщений, пока программа не будет прервана

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return (int)msg.wParam;

}

// Функция обратного вызова для обработки сообщений

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]