Изменения свойств и уничтожения перекрывающихся и всплывающих окон
Курсовая работа, 18 Ноября 2012, автор: пользователь скрыл имя
Краткое описание
Целью данной работы является: изучение способов создания, изменения свойств и уничтожения перекрывающихся и всплывающих окон, создания элементов управления на пользовательском блоке диалога с помощью редактора ресурсов, а также программно; применение в приложении вторичных потоков, входная функция которых позволяет реализовать прорисовку графических примитивов; научиться передавать параметры во вторичный поток.
Содержание
ВВЕДЕНИЕ 4
1 Работа с окнами 9
1.1 Условие 9
1.2 Описание программного кода 9
1.3 Пример работы программы 13
2 Работа со стандартными элементами управления 15
2.1 Условие 15
2.2 Описание программного кода 15
2.3 Пример работы программы 19
3 Интерфейс графических устройств 20
3.1 Условие 20
3.2 Описание программного кода 21
3.3 Пример работы программы 23
4 Блоки диалога 24
4.1 Условие 24
4.2 Пользовательский блок диалога 25
4.3 Стандартные блоки диалога 26
4.4 Пример работы программы 27
5 Вторичный поток 31
5.1 Условие 31
5.2 Описание программного кода 31
5.3 Пример работы программы 34
ВЫВОД 36
Список ИСПользуемой литературы 37
Приложение А. Исходный код к заданию №1 38
Приложение Б. Исходный код к заданию №2 40
Приложение В. Исходный код к заданию №3 43
Приложение Г. Исходный код к заданию №4 45
Приложение Д. Исходный код к заданию №5 48
Прикрепленные файлы: 1 файл
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА (Автосохраненный).docx
— 1.27 Мб (Скачать документ)Министерство образования и науки, молодежи и СПОРТА украины
донецкий национальный технический университет
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ И ИНФОРМАТИКИ
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе по дисциплине
«Системное программирование»
Руководитель: Выполнил:
Доцент каф. ПМИ студент гр. ПСоз – 10
Коломойцева И.А.. Степаненко А.
Донецк 2012
РЕФЕРАТ
стр. 50, рис.15 , табл. 2
Целью данной работы является: изучение способов создания, изменения свойств и уничтожения перекрывающихся и всплывающих окон, создания элементов управления на пользовательском блоке диалога с помощью редактора ресурсов, а также программно; применение в приложении вторичных потоков, входная функция которых позволяет реализовать прорисовку графических примитивов; научиться передавать параметры во вторичный поток.
В рамках данной работы было разработано несколько Windows приложений. Программы были написаны на Windows API — общего наименования целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Microsoft Windows. Основной режим работы приложений – графический.
WINDOWS API, VISUAL C++, ЯДРО, API-программы
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 4
1 Работа с окнами 9
1.1 Условие 9
1.2 Описание программного кода 9
1.3 Пример работы программы 13
2 Работа со стандартными элементами управления 15
2.1 Условие 15
2.2 Описание программного кода 15
2.3 Пример работы программы 19
3 Интерфейс графических устройств 20
3.1 Условие 20
3.2 Описание программного кода 21
3.3 Пример работы программы 23
4 Блоки диалога 24
4.1 Условие 24
4.2 Пользовательский блок диалога 25
4.3 Стандартные блоки диалога 26
4.4 Пример работы программы 27
5 Вторичный поток 31
5.1 Условие 31
5.2 Описание программного кода 31
5.3 Пример работы программы 34
ВЫВОД 36
Список ИСПользуемой литературы 37
Приложение А. Исходный код к заданию №1 38
Приложение Б. Исходный код к заданию №2 40
Приложение В. Исходный код к заданию №3 43
Приложение Г. Исходный код к заданию №4 45
Приложение Д. Исходный код к заданию №5 48
ВВЕДЕНИЕ
API это
программный интерфейс
Структура API-программ
Центральным понятием программирования в среде Windows является сообщение. Система посылает сообщение приложению, а то, в свою очередь, должно правильно отреагировать на него. Получателями сообщений являются функции окон приложения, на программирование которых и уходит большая часть времени при разработки API-приложений.
Классическая структура API-программы определяется четырьмя компонентами: инициализация; цикл ожидания, или цикл обработки сообщений; функция главного окна; другие функции. В простейшем случае последний компонент может отсутствовать. Два первых компонента располагаются в функции WinMain. Итак, все по порядку.
Функция WinMain
int WINAPI WinMain
(
HISTANCE hInstance,
HINSTANCE hPrevInctance,
LPSTR lpCmdLine,
int nCmdShow
)
Функция WinMain вызывается системой, в которую передаются четыре параметра:
- hInstance - дескриптор текущего экземпляра приложения.
- hPrevInctance - всегда равен NULL.
- lpCmdLine - указатель на командную строку запускаемой программы.
- nCmdShow - способ визуализации окна.
Инициализация
Если кратко, то здесь производится регистрация класса окон, его создание и вывод на экран. Регистрация классов окон осуществляется функцией:
ATOM RegisterClass(CONST WNDCLASS *lpwcx)
Пусть вас
не смущает тип ATOM, для нас это
просто int. Единственный параметр функции
указатель на структуру WNDCLASS. После
того как класс будет
typedef struct _WNDCLASS
{
UNIT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDClASS
Как видите, в структуре нет ничего сложного. Если регистрация прошла успешно, о чём мы узнаем по нулевому возвращенному значению, значит можно создавать окно.
Перечислим некоторые типичные значения членов структуры:
- Стили класса окон. Стиль окна определяется комбинацией нескольких предопределённых констант. Довольно часто он пологается нулю, что означает "стиль по умолчанию".
- Дескриптор иконки окна. Определяется с помощью функции LoadIcon. Первым параметром данной функции является дескриптор приложения, вторы - строка, определяющая имя иконки в ресурсах. Для того чтобы задать одну из стандартных иконок, первый параметр должен иметь значение NULL, а второй значение одной из следующих констант: IDI_APLICATION - стандартная иконка приложения; IDI_ASTERISK - иконка "информация"; IDI_EXCLAMATION - "восклицательный знак"; IDI_HAND - "знак Стоп"; IDI_QUESTION - "вопросительный знак".
- Дескриптор курсора. Для определения курсора используется API-функция LoadCursor. Функция похожа на функцию LoadIcon.
- Имя класса. Название класса - это просто строка, которая потом используется при создании окна.
Окно создаётся функцией CreteWindow. Вот прототип этой функции:
HWND CreateWindow
(
LPCTSTR lpClassName,
//указывает на имя
LPCTSTR lpWindowName, //название окна
DWORD dwStyle, //стиль окна
int x, //горизонтальная координата
int y, //вертикальная координата
int nWidth, //ширина окна
int nHeight, //высота окна
HWND hWndParent,
//дескриптор родителя или
HMENU hMenu, //дескриптор меню окна
HANDLE hINSTANCE, //дескриптор приложения
LPVOID lpParam //указатель на дополнительную информацию
)
Использование
данной функции мы разберём позднее.
Главное здесь то, что функция
возвращает дескриптор созданного окна,
при ошибке - 0.
Для того чтобы корректно отобразить окно
на экране, следует выполнить ещё две функции.
BOOL ShowWindow(HWND
hWnd, int nCmdShow) - эта функция отображает
окно на экране. Первый параметр
- дескриптор окна, второй - режим
отображения. В качестве этого
параметра обычно используют
параметр nWinMode функции WinMain. Можно
также использовать
- SW_HIDE - скрыть окно
- SW_MAXIMIZE - максимизировать окно
- SW_MINIMIZE - минимизировать окно и активировать самое верхнее окно
- SW_RESTORE - отобразить окно в нормальном состоянии
- SW_SHOW - активизировать окно с текущими размерами
- SW_SHOWMAXIMIZED - максимизировать окно и сделать его активным
- SW_SHOWMINIMIZED - минимизировать окно
- SW_SHOWNA - отобразить окно в его текущем состоянии. При этом активированное окно оставить активным.
- SW_SHOWNOACTIVATE - восстанавливает окно в его предыдущем состоянии. При этом активное окно остаётся активным.
- SW_SHOWNORMAL - активизировать и востановить окно в прежних размерах.
BOOL UpdateWindow(HWND
hWnd) - вызов данной функции приводит
к немедленной перерисовке
Цикл обработки сообщений
Цикл
обработки сообщений
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
В цикле
сообщения присутствует три функции.
Эти функции есть там всегда, но
кроме них в цикле могут
быть и другие. Функция GetMessage выбирает
из очереди сообщений приложения
очередное приложение. вместо этой
функции используют так же функции
PostMessage и PeekMessage.
Во всех трех функциях присутствует указатель
на строку MSG.
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG;
- hwnd - дескриптор окна.
- message - код сообщения.
- wParam - дополнительный параметр.
- lParam - дополнительный параметр.
- time - время посылки сообщения.
- pt - положение курсора мыши.
Прототип функции MessageBox.
BOOL GetMessageBox
(
LPMSG lpMsg;
HWND hWnd;
UINT wMsgFilterMin,
UINT wMsgFilterMax
)
Первый параметр функции - указатель на строку MSG, куда и будет помещена получаемая информация. Вторым параметром является дескриптор окна, которому предназначено сообщение. Если параметр равен NULL, то "отталкиваются" все сообщения, получаемые приложением. Два последних параметра определяют диапазон сообщений. Для того чтобы получать сообщения из всего диапазона, эти параметры должны быть равны 0.
Функция TransleteMessage преобразует сообщения WM_KEYDOWN и WM_KEYUP в WM_CHAR. Функция DispatchMessage просто переправляет сообщение оконной процедуре.
Оконная функция
Это еще один компонент отвечающий за обработку сообщений окна. Эта функция вызывается системой и имеет четыре параметра, совпадающих с первыми четырьмя членами структуры MSG. Искусство API-программирования заключается в основном в написании оконных функций. Вот пример оконной функции:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
}
Среда Visual C++ оказывает некоторую помощь желающим написать API-программы. Вы можете воспользоваться одной из двух возможностей. В списке проектов выбираем Win32 Project и далее следуем одним из двух путей: отменить флажок Empty project или нет. Если не отмечать флажок, то система создаст простейшее оконное приложение с минимальной функциональностью, позволяющей, однако, развивать ваш проект и создавать приложения любой степени сложности.
- Работа с окнами
- Условие
Написать программу, используя средства Win32 API. Программа должна содержать функцию WinMain() и оконную процедуру. В функции WinMain() выполнить регистрацию оконного класса, создание окна и запуск цикла обработки сообщений. В оконной процедуре обработать сообщения от окна. Также в функции WinMain() создать подчинённое окно на основе того же класса, что и главное, и расположить его таким образом, что бы левый верхний угол подчинённого окна совпал с левым верхним углом главного. При нажатии на правую кнопку мыши перемесить подчинённое окно в соседний по ходу часовой стрелки угол главного окна.
- Описание программного кода
#include <stdio.h>
#include <windows.h>
LONG WinProcMain(HWND, UINT, WPARAM, LPARAM);
BOOL RegWinClass(WNDPROC, LPCTSTR, UINT);
HWND hWnd;
static HWND hwndPopup;
MSG msg;
HINSTANCE hInst;
POINT LeftCorner;
RECT rect;
char ClassNameMain[]="MainWindow";
//----------------------------
/*Приложения всегда описывают функцию с именем WinMain. Она получает управление при запуске приложения, выполняет присущие функциям действия: регистрирует классы окон, создаёт окна, опрашивает очередь сообщений и распределяет свои сообщения.*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
/*Параметр hInstance от операционной системы получает дескриптор текущего экземпляра приложения. Параметр hPrevInstance в 16-ти разрядных приложениях на активный предыдущий экземпляр приложения или NULL. Параметр lpCmdLine указывает на строку с аргументами командной строки запуска приложения. Параметр nCmdShow передаёт способ начального отображения окна.*/