LAB1 (Методические указания к лабораторным работам)

2018-01-09СтудИзба

Описание файла

Файл "LAB1" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование в среде windows" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование в среде windows" в общих файлах.

Онлайн просмотр документа "LAB1"

Текст из документа "LAB1"

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

Создание окна в Windows

Структура программы в Windows:


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

В программе С.

1.0 Написать WinMain

int PASCAL

WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpszCmdLine,

int nCmdShow)

{

// Тело функции

}

1.1 Зарегистрировать класс окна

WNDCLASS wc; // структура для регистрации класса окна

wc.style = 0; // Стиль окна

wc.lpfnWndProc = (WNDPROC) WndProc; // Указатель на функцию окна

wc.cbClsExtra = 0; // Размер дополнительной области данных

wc.cbWndExtra = 0; // Размер дополнительной области данных

wc.hInstance = hInstance; // Идентификатор приложения

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // Цвет фона окна

wc.lpszMenuName = (LPSTR)NULL; // Идентификатор меню

wc.lpszClassName = (LPSTR)szClassName;

aWndClass = RegisterClass(&wc); // Регистрация класса

    1. Создать окно.

hwnd = CreateWindow(

szClassName, // имя класса окна

szWindowTitle, // заголовок окна

WS_OVERLAPPEDWINDOW, // стиль окна

CW_USEDEFAULT, // задаем размеры и расположение

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

CW_USEDEFAULT,

CW_USEDEFAULT,

0, // идентификатор родительского окна

0, // идентификатор меню

hInstance, // идентификатор приложения

NULL); // указатель на дополнительные

// параметры

Стиль класса окна задается в виде отдельных битов, для которых в файле windows.h определены символические константы с префиксом CS_:

Стиль

Описание

CS_BYTEALIGNCLIENT

Внутренняя область окна (client area) должна быть выравнена по границе байта видеопамяти. Иногда используется для ускорения процесса вывода изображения

CS_BYTEALIGNWINDOW

Все окно (не только внутренняя область окна) должно быть выравнено по границе байта видеопамяти

CS_CLASSDC

Необходимо создать единый контекст отображения, который будет использоваться всеми окнами, создаваемыми на базе данного класса

CS_DBLCLKS

Функция окна будет получать сообщения при двойном щелчке клавишей мыши (double click)

CS_GLOBALCLASS

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

CS_HREDRAW

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

CS_NOCLOSE

В системном меню окна необходимо запретить выбор функции закрытия окна (строка Close будет отображаться серым цветом, и ее нельзя выбрать)

CS_OWNDC

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

CS_PARENTDC

Окно будет пользоваться родительским контекстом отображения, а не своим собственным. Родительский контекст - это контекст окна, создавшего другое окно (см. дальше)

CS_SAVEBITS

Для данного окна Windows должна сохранять изображение в виде битового образа (bitmap). Если такое окно будет перекрыто другим окном, то после уничтожения перекрывшего окна изображение первого окна будет восстановлено Windows на основании сохраненного ранее образа

CS_VREDRAW

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

    1. Организовать цикл сообщений.

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

где:

typedef struct tagMSG { /* msg */

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

BOOL GetMessage(lpmsg, hwnd, uMsgFilterMin, uMsgFilterMax)

MSG FAR* lpmsg;

HWND hwnd;

UINT uMsgFilterMin;

UINT uMsgFilterMax;

BOOL TranslateMessage(lpmsg)

const MSG FAR* lpmsg; /* адрес MSG */

LONG DispatchMessage(lpmsg)

const MSG FAR* lpmsg; /* адрес MSG */

    1. Произвести визуализацию окна.

ShowWindow(hWndMain,iCmdShow);

UpdateWindow(hWnd);

1.5 Написать обработчик.

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

{

switch (iMessage)

{

case WM_DESTROY:

PostQuitMessage(0);

break;

………………………………..

default:

return DefWindowProc(hWnd, iMessage, wParam, lParam);

}

return 0;

}

Сообщения.

Большинство сообщений создают драйверы устройств ввода/вывода, таких, как клавиатура, мышь или таймер. Драйверы создают сообщения при поступлении аппаратных прерываний. Например, когда вы нажимаете и затем отпускаете клавишу, драйвер обрабатывает прерывания от клавиатуры и создает несколько сообщений. Аналогично сообщения создаются при перемещении мыши или в том случае, когда вы нажимаете кнопки на корпусе мыши. Можно сказать, что драйверы устройств ввода/вывода транслируют аппаратные прерывания в сообщения. В операционной системе Windows обычные приложения никогда не обращаются напрямую к аппаратуре и не работают с системными областями памяти, такими, как таблицы дескрипторов прерываний или видеопамять. Все это делают драйверы и виртуальные драйверы. Поэтому ограничения, накладываемые на обычные приложения Windows, никак не сказываются на функциональных возможностях самого приложения.

Прежде всего, сообщения попадают в системную очередь сообщений Windows. Системная очередь сообщений одна. Далее из нее сообщения распределяются в очереди сообщений приложений. Для каждого приложения создается своя очередь сообщений.

Очередь сообщения приложений может пополняться не только из системной очереди. Любое приложение может послать сообщение любому другому сообщению, в том числе и само себе.

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

Сообщение, в основном, состоит из полей wParam и lParam. В сообщении, формируемом при нажатии любой кнопки мыши, младшее слово lParam содержит X – координату курсора, а старшее – Y – координату. Семь младших бит поля wParam содержит состояние кнопок мыши и клавиш Shift и Ctrl. Если кнопка или клавиша нажата, то соответствующий бит находится в состоянии 1.

Курсор

Идентификатор

Применение

IDC_ARROW

Стандартный курсор в виде стрелки

IDC_IBEAM

Текстовый курсор

IDC_WAIT

Курсор в виде песочных часов. Используется при выполнении длительных операций

IDC_CROSS

Курсор в виде перекрестия

IDC_UPARROW

Курсор в виде вертикальной стрелки

IDC_SIZE

Индикация изменения размера

IDC_ICON

Пустая пиктограмма

IDC_SIZENWSE

Индикация изменения размера

IDC_SIZENESW

Индикация изменения размера

IDC_SIZEWE

Индикация изменения размера

IDC_SIZENS

Индикация изменения размера

Контрольное задание

Сформировать окно в WINDOWS.

Дополнить программу обработкой сообщения о нажатии правой или левой клавиши мыши. При этом выдавать сообщение о нажатии клавиши.

Вывод информации может быть осуществлён с помощью функции

int WINAPI MessageBox(HWND hwndParent, LPCSTR lpszText,

LPCSTR lpszTitle, UINT fuStyle);

Напомним, что эта функция создает на экране диалоговую панель с текстом, заданным параметром lpszText и заголовком, заданным параметром lpszTitle. Если заголовок указан как NULL, используется заголовок по умолчанию - строка "Error".

Параметр hwndParent указывает идентификатор родительского окна, создающего диалоговую панель. Этот параметр можно указывать как NULL, в этом случае у диалоговой панели не будет родительского окна. Вы можете вызвать функцию MessageBox из функции диалога, в этом случае первый параметр должен содержать идентификатор окна диалоговой панели.

Последний параметр fuStyle определяет стиль и внешний вид диалоговой панели. Вы можете использовать одну из следующих констант, определяющих количество кнопок, расположенных на диалоговой панели и надписи на этих кнопках.

Константа

Описание

MB_ABOTRETRYIGNORE

Диалоговая панель содержит три кнопки с надписями "Abort", "Retry", "Ignore"

MB_OK

Диалоговая панель содержит одну кнопку "OK"

MB_OKCANCEL

Две кнопки с надписями "OK", "Cancel"

MB_RETRYCANCEL

Две кнопки с надписями "Retry", "Cancel"

MB_YESNO

Две кнопки с надписями "Yes", "No"

MB_YESNOCANCEL

Три кнопки с надписями "Yes", "No", "Cancel"

К этим константам при помощи логической операции ИЛИ можно добавлять другие константы.

В опросы.

  1. Рассказать обо всех событиях, происходящих после нажатия

  2. Как запретить или разрешить создание копий приложения?

  3. Кто и когда вызывает WndProc ?

  4. Изменить цвет фона, форму курсора.

  5. Изменить начальное положение окна, его размеры.

NN

Исходное положение окна

Размер

Цвет фона

Курсор

щелчок мыши (левая)

щелчок мыши

(правая)

1

В центре

10*10 см

черный

Сообщение о нажатии

Нет реакции

2

В левом верхнем углу

20*20 см

белый

Закрыть окно

Нет реакции

3

В правом верхнем углу

min

красный

Нет реакции

Сообщение о нажатии

4

Во весь экран

-

синий

Сообщение о нажатии

Нет реакции

5

пиктограмма

-

зеленый

Закрыть окно

Нет реакции

6

В центре

10*10 см

черный

Нет реакции

Закрыть окно

7

В левом нижнем углу

20*20 см

белый

Сообщение о нажатии

Нет реакции

8

В правом нижнем углу

10*10 см

красный

Закрыть окно

Нет реакции

9

Во весь экран

-

синий

Нет реакции

Закрыть окно

10

пиктограмма

-

зеленый

Сообщение о нажатии

Нет реакции

11

В центре

20*20 см

черный

Закрыть окно

Нет реакции

12

В левом верхнем углу

10*10 см

белый

Нет реакции

Сообщение о нажатии

13

В правом верхнем углу

20*20 см

красный

Сообщение о нажатии

Нет реакции

14

Во весь экран

-

синий

Закрыть окно

Нет реакции

15

пиктограмма

-

зеленый

Нет реакции

Закрыть окно

16

В центре

10*10 см

черный

Сообщение о нажатии

Нет реакции

17

В левом нижнем углу

20*20 см

белый

Закрыть окно

Нет реакции

18

В правом нижнем углу

10*10 см

красный

Нет реакции

Сообщение о нажатии

19

Во весь экран

-

синий

Сообщение о нажатии

Нет реакции

20

пиктограмма

-

зеленый

Закрыть окно

Нет реакции

21

В центре

10*10 см

черный

Нет реакции

Закрыть окно

22

В левом верхнем углу

20*20 см

белый

Сообщение о нажатии

Нет реакции

23

В правом нижнем углу

10*10 см

красный

Закрыть окно

Нет реакции

24

Во весь экран

min

синий

Нет реакции

Сообщение о нажатии

25

пиктограмма

зеленый

Сообщение о нажатии

Нет реакции

26

В центре

10*10 см

черный

Закрыть окно

Нет реакции

27

В левом верхнем углу

20*20 см

белый

Нет реакции

Закрыть окно

28

В правом верхнем углу

min

красный

Сообщение о нажатии

Нет реакции

Литература.

Фролов А.В., Фролов Г.В. Программирование для Windows NT.- М.:ДИАЛОГ МИФИ, 1996.

Верма Р.Д. Справочник по функциям WIN32 API.- М.:Горячая линия - Телеком, 2005.- 551 с. : ил.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее