рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Дослідження структури windows-додатка

Дослідження структури windows-додатка - раздел Образование, Навчальної дисципліни Основи програмування та алгоритмічні мови   Ціль Лабораторної Роботи - Одержання Практичних Навичок У Поб...

 

Ціль лабораторної роботи - одержання практичних навичок у побудові базового додатка для Win32, дослідження параметрів віконних процедур.

Перед виконанням лабораторної роботи студент повинен знати: принципи й логіку роботи Windows-додатка; порядок і засоби формування структури класу вікна, реєстрації класу, написання віконної процедури, створення й відображення вікна, циклу обробки повідомлень.

Після виконання лабораторної роботи студент повинен уміти: розробляти базові процедурні Windows-додатки мовою C++.

Короткі теоретичні відомості

Розглянемо ситуацію, коли користувач додатка натискає клавішу, а система виробляє повідомлення про цю подію. Windows забезпечує підтримку клавіатури, що не залежить від типу пристрою (device-independent support). Для кожного типу клавіатури вона встановлює відповідний драйвер, тобто спеціальну програму, що служить посередником між клавіатурою й операційною системою. Клавіатурна підтримка Windows не залежить від мови спілкування із системою. Це досягається використанням спеціальної клавіатурної розкладки (layout), що користувач вибрав у цей момент. Кожній клавіші на рівні апаратур привласнене унікальне значення - ідентифікатор клавіші, що залежить від типу пристрою й називав скан-кодом.

Клавіатурний драйвер інтерпретує скан-код і перетворить його в

обумовлений Windows код віртуальної клавіші (virtual-key code), що не залежить від типу пристрою й ідентифікуючий функціональний зміст клавіші. Після цього перетворення скан-кода драйвер створює повідомлення, у яке включає: скан-код, віртуальний код й іншу супутню інформацію. Потім він поміщає повідомлення в спеціальну чергу системних повідомлень. Windows вибирає повідомлення із цієї черги й посилає в чергу повідомлень відповідного потоку (thread). Зрештою, цикл вибірки повідомлень даного потоку передає його відповідній віконній процедурі для обробки. Модель уведення із клавіатури в системі Windows представлена на Рис.6.1.

Рис.6.1. Модель уведення із клавіатури в системі Windows

 
 

 

Тут буфер клавіатури служить сполучною ланкою між прикладною програмою й одним із сервисiв ОС. Так само формують (або можуть формуватися) свої специфічні дані оброблювачі інших подій. При цьому використовується універсальна структура даних MSG (повідомлення), що описує будь-яку подію. Вона містить супровідну інформацію, достатню для того, щоб повідомленням можна було скористатися. Наприклад, для повідомлення від клавіатури це повинен бути код натиснутої клавіші, для повідомлення від миші - координати її покажчика, для повідомлення WM_SIZE - розміри вікна.

Кожен оброблювач події (драйвер) поміщає сформоване повідомлення в певну динамічну структуру даних у пам'яті. Інші апаратні й програмні оброблювачі точно так само формують свої повідомлення, ставлячи їх у чергу за вже існуючими. Так формується системна черга повідомлень.

Розглянута модель вироблення й проходження повідомлень допомагає зрозуміти структуру, прийняту для всіх Windows-додатків. Останні два блоки в розглянутій схемі (мал.1) визначають особливості будови будь-якого Windows-додатка. Найпростіше з них повинне складатися як мінімум із двох функцій:

- функції WinMain, з якої починається виконання програми і яка "закручує" цикл очікування повідомлень (message pump);

- віконної процедури, що викликає система, направляючи їй відповідні повідомлення.

Кожен додаток у системі, заснованої на повідомленнях, повинне вміти одержувати й обробляти повідомлення зі своєї черги. Основу такого додатка й системі Windows представляє функція WinMain, що містить стандартну послідовність дій. Однак обробляється більшість повідомлень вікном - об'єктом операційної системи Windows.

З погляду користувача, вікно - це прямокутна область екрана, що відповідає якомусь додатку або його частині. Додаток може управляти декількома вікнами, серед яких звичайно виділяють одне головне вікно (Frame Window).

З погляду операційної системи, вікно - це в більшості випадків кінцевий пункт, якій направляються повідомлення.

З погляду програміста, вікно - це об'єкт, атрибути якого (тип, розмір, положення на екрані, вид курсору, меню, значок, заголовок) повинні бути спочатку сформовані, а потім зареєстровані системою.

Маніпуляція вікном здійснюється за допомогою спеціальної віконної функції, що має цілком певну, устояну структуру.

Функція WinMain() виконується першої в будь-якому додатку. Її ім'я зарезервоване операційною системою. Ім'я віконної процедури довільно й вибирається розроблювачами. Система Windows реєструє це ім'я, зв'язуючи його з додатком.

Таким чином, головною метою функції WinMain() є:

- реєстрація віконного класу;

- створення вікна;

- запуск циклу очікування повідомлень.

Далі розглянемо більш докладно структуру традиційного Windows-додатка, що повинне бути взяте за основу при рішенні свого варіанта завдання.

// Визначає крапку входу додатка

#include <windows.h>

//=== Глобальні змінні:

HINSTANCE hInst; //Дескриптор додатка

LPCTSTR lpszAppName = "MyApp"; //Покажчик на рядок, що містить

//ім'я вікна

LPCTSTR lpszTitle = "My Programm"; //Текст заголовка вікна

LPCTSTR lpszClassName = "Hello";

//=======Прототипи функцій, що входять у даний модуль

int APIENTRY WinMain( HINSTANCE hInstance,

HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

MSG msg;

HWND hWnd;

// Реєстрація віконного класу

WNDCLASSEX wc;

wc.style = CS_HREDRAW | CS_VREDRAW; //стиль вікна

wc.lpfnWndProc = (WNDPROC)WndProc; //віконна процедура

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance; //опис додатка

wc.hIcon = LoadIcon( hInstance, lpszAppName );//визначення іконки

wc.hCursor = LoadCursor(NULL, IDC_ARROW); //визначення курсору

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//установка тла

wc.lpszMenuName = lpszAppName; //визначення меню

wc.lpszClassName = lpszClassName; //імена класу вікна

wc.cbSize = sizeof(WNDCLASSEX); //розмір структури в байтах

wc.hIconSm = NULL; //дескриптор піктограми

 

if ( !RegisterClassEx( &wc ) )

return( FALSE );

// Запам'ятовування дескриптора (хэндла) додатка

hInst = hInstance;

//======= Створення головного вікна

hWnd = CreateWindow

(lpszClassName, //ім'я класу вікна

lpszTitle, //ім'я додатка

WS_OVERLAPPEDWINDOW, //стилі вікна

CW_USEDEFAULT, //положення по горизонталі верхнього лівого кута

CW_USEDEFAULT, //положення по вертикалі верхнього лівого кута

CW_USEDEFAULT, //ширина вікна

CW_USEDEFAULT, //висота вікна

NULL, //дескриптор батьківського вікна

NULL, //дескриптор меню вікна

hInstance, //дескриптор додатка

NULL //покажчик на додаткові параметри

);

if ( !hWnd )

return( FALSE );

//======= Показ вікно

ShowWindow( hWnd, nCmdShow );

//======= Відновлення вікна

UpdateWindow( hWnd );

//===== Цикл очікування й обробки повідомлень

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

{

TranslateMessage( &msg );

DispatchMessage( &msg );

}

return( msg.wParam );

}

// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)

// ПРИЗНАЧЕННЯ: Обробка повідомлень головного вікна.

// WM_CREATE - повідомлення ініціалізації при створенні вікна

// WM_COMMAND - обробка команд меню

// WM_DESTROY - посилка повідомлення про завершення й вихід

 

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

{

switch( uMsg )

{

case WM_CREATE: //повідомлення ініціалізації

 

break;

case WM_COMMAND : //повідомлення від меню, гарячих клавіш і т.д.

//====== Розшифровка вибору в меню:

switch( LOWORD( wParam ) )

{

case IDM_TEST :

{

//====== Сюди міститься код реакції на вибір пункту меню

}

break;

 

case IDM_EXIT :

DestroyWindow( hWnd );

break;

}

break;

case WM_DESTROY : // Повідомлення закриття вікна

PostQuitMessage(0);

break;

//обробка повідомлень, які не оброблені користувачем

default :

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

}

return (FALSE);

}

Особливість першої лабораторної роботи полягає у варіюванні параметрами функцій реєстрації й створення вікна, віконної процедури для рішення індивідуального завдання.

До таких параметрів ставляться:

1. Вид створюваного вікна на екрані монітора.

2. Стиль класу вікна.

3. Системні піктограми (іконки).

4. Системні курсори миші.

5. Стиль вікна.

Розглянемо їх докладніше.

1. Вид створюваного вікна описується в останньому параметрі функції WinMain(), а також у другому параметрі функції показу вікна ShowWindow(). Можливі значення задаються виходячи з таблиці 6.1.

 

 

Таблиця 6.1

Можливі значення другого параметра функції ShowWindow()

Параметр Значення Опис
SW_HIDE Вікно сховане
SW_SHOWNORMAL Вікно показане в його нормальних розмірах
SW_NORMAL
SW_SHOWMINIMIZED Вікно згорнуте й показане як піктограма
SW_SHOWMAXIMIZED Вікно розгорнуте
SW_MAXIMIZE
SW_SHOWNOACTIVE Вікно відображається в його розмірах і позиції, установлених безпосередньо перед поточними значеннями розмірів і позиції. Активне вікно залишається активним
SW_SHOW Вікно відображається в його поточних розмірах і позиції.
SW_MINIMIZE Вікно згорнуте й активізує вікно верхнього рівня в списку системи
SW_SHOWMINNOACTIVE Вікно згорнуте. Активне вікно залишається активним
SW_SHOWNA Вікно показане в його поточному стані. Активне вікно залишається активним
SW_RESTORE Активізувати й відобразити вікно. Якщо вікно згорнуте або розгорнуте, йому будуть повернуті його первісні розміри й позиція.
SW_SHOWDEFAULT Застосовується при запуску додатка за замовчуванням

 

2. Найменування стилів класу вікна починається з ідентифікаторів CS_. Для стилю вікна відведено 16 битов і тільки один із цих битов установлений в одиницю. Таким чином, стилі використаються як бітові прапори, тобто із цими стилями можна робити операції логічного додавання й логічного множення для одержання комбінованих стилів. Перелік прапорів наведений у табл.6.2.

 

 

Таблиця 6.2

– Конец работы –

Эта тема принадлежит разделу:

Навчальної дисципліни Основи програмування та алгоритмічні мови

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ... Методичні рекомендації до лабораторних робіт з навчальної дисципліни...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Дослідження структури windows-додатка

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

ЗАГАЛЬНІ ПОЛОЖЕННЯ
Методичні рекомендації призначені для виконання лабораторних робіт з першої частини навчальної дисципліни «Основи програмування та алгоритмічні мови». Перед виконанням кожної роботи необхі

Покажчики
Коли компілятор обробляє оператора визначення змінної, наприклад, int i =10, він виділяє пам'ять відповідно до типу (int) і ініціалізував її вка-заним значенням (10). Всі звернення в програмі до зм

Ініціалізація покажчиків
Покажчики найчастіше використовують при роботі з динамічною пам'яттю, званою деякими естетами купою (переклад з англійської мови слова heap). Це вільна пам'ять, в якій можна під час виконання прогр

Операції з покажчиками
З покажчиками можна виконувати наступні операції: разадресация, або непряме звернення до об'єкту (*), привласнення, складання з константою, віднімання, інкремент (++), декремент (--), порівняння, п

Рядки символів як масиви
Рядок має тип “масив з символів”. Рядок завершується нульовим символом. Наприклад, рядок QWERTY має тип char [7], порожній рядок “ має тип char[1]. Рядкова константа - це послідовні

Рядкові бібліотечні функції
Функції для роботи з рядками описані в заголовному файлі string.h. Деякі з них: char *stpcpy(char *dest, const char *src); Копіює символи рядка, поки не скопіює нульовий символ. П

Відкриття і закриття потоку
Схема роботи з потоком така ж, як і з файлом: відкрити потік, виконати читання і/або запис, закрити потік. Відкриває потік функція FILE* fopen( const char *filename,// ім

Введення і виведення рядків
Читання рядка з потоку виконується функцією char *fgets( char *s, // покажчик на буфер, що приймає рядок int n, // гранична кількість читаних символів (звичайно розмір бу

Форматоване виведення
Розглянуті вище функції виводять інформацію в потік без або майже без перетворення. Функція fprintf перетворить дані, що виводяться, в послідовність символів, керуючись рядком формату. int

Форматоване введення
Для форматованого введення з потоку застосовують функцію int fscanf (FILE *stream, const char *format [, address, ...] ) - повертає число полів введення тих, що

Варіант 20
Написати програму, яка: · Виводить текст на екран дисплея; · Визначає найбільшу кількість підряд пропусків, що йдуть, в тексті; · По натисненню довільної клавіші по черзі

Стадії і команди препроцесорної обробки
У інтегроване середовище підготовки програм на С++ в компілятор мови як обов'язковий компонент входить препроцесор. Призначення препроцесора - обробка початкового тексту програми до її компіляції.

Включення текстів з файлів
Для включення тексту з файлу використовується команда #include, що має дві форми запису: #include <имя_файла> // Ім'я в кутових дужках #include "имя_файла" // Ім'я

Умовна компіляція
Умовна компіляція забезпечується в мові С++ набором команд, які, по суті, управляють не компіляцією, а препроцесорною обробкою: #if константний вираз #ifdef ідентифікатор

Макропідстановки засобами препроцесора
Макрос, за визначенням, є засіб заміни однієї послідовності символів іншої. Для виконання замін повинні бути задані відповідні макроозначення. Просте макроозначення ми вже ввели, розглядаючи директ

Теоретичний матеріал
  Структури - це складені типи даних, побудовані з використанням інших типів. Вони є об'єднаний загальним ім'ям набір даних різних типів. Саме тим, що в ст

Масиви структур.
Методика створення масивів структур - така сама, як і при створенні масивів. Наприклад, що б створити масив з 100 екземплярів BestStudent структури Student, необхідний наступний запис: Stu

Варіант 3
Відомість використання машинного часу на обчислювальному центрі: № з/п Кафедра Використання машиного часу (год) Відхилення

Варіант 4
Відомість споживання електроенергії на заводах міста: № з/п Завод Потреба електроенергії, кВт/ч Відхилення від плана

Варіант 5
Відомість руху матеріалів на складах підприємства за звітний період: № п/п Склад Рух материалів за період, грн остаток на к

Варіант 8
Відомість відвідин занять студентами: № з/п Прізвище Пропущено годин Відхилення від плану за планом

Варіант 10
Відомість обліку часу роботи верстатів підприємства: № з/п Тип станка Час роботы (год) Відхилення від плану

Варіант 11
Відомість випуску деталей робітниками цеху: № з/п Прізвище Кількість деталей (шт.) Брак виготовлено

Варіант 13
Відомість нарахування зарплати співробітникам підприємства: № з/п Прізвище Нараховано (грн) Виплати

Варіант 17
Відомість оплати ремонту обладнання підприємства за звітний період: № зп Обладнання Вид ремонту Вартість комплектуючих

Варіант 20
Відомість телефонних переговорів абонента за звітний період: № зп Абонент № телефона Тривалість переговорів (хв.)

Короткі теоретичні відомості
  STL - це бібліотека стандартних шаблонів. Вона містить, наприклад, що часто зустрічаються способи організації даних - так називані контейнери: динамічні масиви, двонаправленi списки

Варіант 20
Скласти програму, яка містить поточну інформацію про заявки на туристичні тури. Кожна заявка включає: · пункт призначення; · номер туру; · прізвище і ініціали за

Перелік бітових прапорів стилю класу вікна
Прапор Опис CS _VREDRAW Перемалювати вікно при зміні висоти вікна CS_HREDRAW Перемал

Список визначених системних піктограм
Іконка Опис IDI_APPLICATION Піктограма додатка, задана за замовчуванням IDI_ASTERISK

Список визначених ідентифікаторів курсору
Курсор Опис IDC_APPSTARTING Стандартна стрілка й пісковий годинник. IDC_ARROW Станда

Перелік бітових прапорів стилю вікна
Прапор Опис WS_BORDER У вікна є тонка обмежуюча рамка WS_CAPTION WS_BORDER | WS_DLGF

Варіант № 20
Вікно повинне: · бути згорнутим; · мати власний контекст; · завантажувати іконку у вигляді молодого півмісяця; · мати курсор у вигляді двухконечной стрілки з нап

Дослідження взаємодії додатка з користувачем
  Ціль лабораторної роботи: Досліджувати можливості функцій Win32 API по створенню візуального інтерфейсу додатка, одержати практичні навички написання й настроювання програм, які міс

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

Створення меню
Що таке меню. Меню - це список команд й опцій програми. У ряді випадків пункти меню можуть бути представлені растровими зображеннями. Вибрати елемент меню можна за допомогою миші, клавіатури або пе

Діалогові вікна
Використання меню варто розглядати як найпростіший спосіб уведення інформації користувачем. Більше зробленим методом передачі даних у програму є застосування діалогових вікон. Можливість уведення д

Розробка діалогового вікна
Для діалогового вікна необхідно скористатися відповідним редактором. Редактор діалогових вікон викликається в процесі реалізації ланцюжка дій ( Рис. 7.4).  

Компонування діалогового вікна
За допомогою миші розмістите поле й напис у потрібнім місці й задайте їхній розмір. Щиглик мишею усередині макета діалогового вікна дозволить відредагувати заголовок вікна або текстовий рядок, що н

Бітові прапори, що визначають поводження й вид елемента меню
Прапор Опис MF_BITMAP Замість рядка в якості меню застосовується bitmap MF_BYCOMMAND

Можливі типи рядка стану
Тип Опис SBT_NOBORDERS Панель прорисовується без обмежувальних ліній SBT_POPOUT Пане

Перелік бітових прапорів стилю вікна
Прапор Опис WS_BORDER У вікна є тонка обмежуюча рамка WS_CAPTION WS_BORDER | WS_DLGF

Стилі діалогового вікна
Прапор Ефект DS_ABSALIGN Позиціювати діалогове вікно щодо лівого верхнього кута екрана DS_SYSMODA

Таблиця 7.5
Стилі вікон класу "кнопки" Стиль Опис BS_3STATE Створити прапорець, що має три стани

Варіант № 3
Головне меню містить три групи команд: · Головне меню містить розділ "Фігури" з іменами геометричних фігур: коло, квадрат, трикутник, прямокутник і шестикутник. При виборі назви

Варіант № 11
Головне меню містить три групи команд: · Розділ "Файл" головного меню містить рядка "Створити", "Відкрити", "Демо-версiя" й "Вихід". При в

Варіант № 13
Головне меню містить три групи команд: · Робочу область вікна додатка повністю займає тимчасове вікно з порожнім головним меню. Головне меню вікна додатка із тримає розділ "Файл"

Варіант № 17
Головне меню містить три групи команд: · Головне меню містить розділ "Файл" з рядками "Створити", "Відкрити", "Видалити" й "Вихід". При ви

Варіант № 18
Робочу область вікна додатка, повністю займає тимчасове вікно з порожнім головним меню. Головне меню вікна додатка містить розділ "Файл" з рядками "Відкрити" й "Закрити&quo

Варіант № 20
· Тип елемента керування: Combobox. Мінімальне число пунктів меню - 5, максимальне число пунктів меню - 11. · Перша сторінка блокнота містить назви книг, друга - на звання глав обраної кни

Короткі теоретичні відомості й історичний аспект
  Середовище .NET Framework   .NET Framework — центральна частина Visual C++ 2005, як і всіх інших засобів розробки .NET компанії Microsoft. Середовище .NET Fra

Специфіка C++/CLI: фундаментальні типи даних
Фундаментальні типи ISO/ANSI C++ можна використати у своїх програмах C++/CLI, і з арифметичними операціями вони працюють точно так само, як й у рідному C++. Крім того, в C++/CLI визначені два додат

Фундаментальні типи C++/CLI
Фундаментальний тип Розмір (у байтах) Клас значень CLI bool System: -.Boolean

Створення простого керованого консольного додатка.
Для створення консольного додатка на керованому C++ варто виконати наступну послідовність операцій:   1. Запустите на виконання Visual Studio. NET (2005 або більше нової)

Стандартний ввід-вивід
Клас System::Console забезпечує підтримку стандартного вводу-висновку. Метод ReadLine класу System::Console зчитує уведену із клавіатури рядок як текстову. String^ line = Console::ReadLine

Часто використовувані специфікатори формату
Специфікатор формату Опис C або з Виводить значення в грошовому форматі. dабо d Виво

Часто використовувані специфікатори формату
Специфікатор формату Опис C або з Виводить значення в грошовому форматі. dабо d Виво

Дескриптори, що відслідковують
Дескриптори, що відслідковують, (tracking handle) мають подібність із рідними покажчиками C++, однак є й істотні відмінності. Дескриптор зберігає адреса, і адреса, що у ньому втримується, автоматич

Оголошення дескрипторів, що відслідковують
Для специфікації дескриптора типу, необхідно помістити символ : (часто називаний "капелюхом") слідом за ім'ям типу. Наприклад, от як можна оголосити відслідковує дескриптор, що, по імені

Масиви CLR
Масиви CLR відрізняються від масивів рідного C++. Пам'ять для масиву CLR виділяється в керованій купі, але це ще не все. Масиви CLR мають убудовану функціональність, який немає в масивів рідного C+

Багатомірні масиви
У програмах на C++/CLI можна створювати масиви із двома й більше вимірами; максимальна кількість вимірів масиву - 32, чого цілком достатньо в більшості випадків. Кількість вимірів масиву вказується

Багатомірні масиви
У програмах на C++/CLI можна створювати масиви із двома й більше вимірами; максимальна кількість вимірів масиву - 32, чого цілком достатньо в більшості випадків. Кількість вимірів масиву вказується

Цикл foreach
При обробці масивів і рядків дуже часто, використають оператори циклів. Всі оператори циклів, які застосовуються в мові ISO/ANSI C++, також використаються й у и в C++/CLI. Але мова C++/CLI пропонує

Варіант 20
В одномірному масиві, що складається з п речовинних елементів, обчислити: o добуток позитивних елементів масиву; o суму елементів масиву, розташованих до мінімального елемента.

Навчальне видання
  Методичні рекомендації до лабораторних робіт з навчальної дисципліни «Основи програмування та алгоритмічні мови» Частина 2 для студентів напряму

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги