Изменения свойств и уничтожения перекрывающихся и всплывающих окон

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 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 это  программный интерфейс приложения. Другими словами, это те возможности,  которые предоставляет операционная  система Windows для использования  прикладными программами. Системные  функции, которые предоставляет  Windows программисту, называются ещё  функциями API. Программирование с  использованием только этих функций  называется API-программированием. В  данной статье мы дадим достаточно  широкое введение в 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. После  того как класс будет зарегистрирован, окно из данного класса может быть создано функцией CreateWindow. Разберём теперь структуру 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) - вызов данной функции приводит  к немедленной перерисовке окна  и посылке функции окна сообщения  WM_PAINT.

Цикл обработки сообщений

Цикл  обработки сообщений присутствует во всех приложениях Windows. Правда, не всегда этот цикл представлен явно в программе.

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 или нет. Если не отмечать флажок, то система создаст простейшее оконное приложение с минимальной  функциональностью, позволяющей, однако, развивать ваш проект и создавать  приложения любой степени сложности.

 

 

  1. Работа с окнами

 

    1. Условие

 

Написать программу, используя  средства Win32 API. Программа должна содержать функцию WinMain() и оконную процедуру. В функции WinMain() выполнить регистрацию оконного класса, создание окна и запуск цикла обработки сообщений. В оконной процедуре обработать сообщения от окна. Также в функции WinMain() создать подчинённое окно на основе того же класса, что и главное, и расположить его таким образом, что бы левый верхний угол подчинённого окна совпал с левым верхним углом главного. При нажатии на правую кнопку мыши перемесить подчинённое окно в соседний по ходу часовой стрелки угол главного окна.

 

    1. Описание программного кода

 

#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 передаёт способ начального отображения окна.*/

Информация о работе Изменения свойств и уничтожения перекрывающихся и всплывающих окон