Автор работы: Пользователь скрыл имя, 18 Ноября 2012 в 22:18, курсовая работа
Целью данной работы является: изучение способов создания, изменения свойств и уничтожения перекрывающихся и всплывающих окон, создания элементов управления на пользовательском блоке диалога с помощью редактора ресурсов, а также программно; применение в приложении вторичных потоков, входная функция которых позволяет реализовать прорисовку графических примитивов; научиться передавать параметры во вторичный поток.
ВВЕДЕНИЕ 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
Министерство образования и науки, молодежи и СПОРТА украины
донецкий национальный технический университет
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ И ИНФОРМАТИКИ
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе по дисциплине
«Системное программирование»
Руководитель: Выполнил:
Доцент каф. ПМИ студент гр. ПСоз – 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 вызывается системой, в которую передаются четыре параметра:
Инициализация
Если кратко, то здесь производится регистрация класса окон, его создание и вывод на экран. Регистрация классов окон осуществляется функцией:
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
Как видите, в структуре нет ничего сложного. Если регистрация прошла успешно, о чём мы узнаем по нулевому возвращенному значению, значит можно создавать окно.
Перечислим некоторые типичные значения членов структуры:
Окно создаётся функцией 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. Можно
также использовать
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;
Прототип функции 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 передаёт способ начального отображения окна.*/
Информация о работе Изменения свойств и уничтожения перекрывающихся и всплывающих окон