Програма 1 част 1Цели на упражнението Подробно запознаване с процесите на регистриране на клас и създаване на прозорец



Дата09.03.2017
Размер33.81 Kb.
#16524
ТипЗадача

Упражнение 2, стр. от

Упражнение 2

Изследване на задължителните елементи в Windows програма

1 част

1Цели на упражнението


  • Подробно запознаване с процесите на регистриране на клас и създаване на прозорец.

2Задачи


Задача 1 Да се създаде "Typical 'Hello World' Application"

Указания:



  • Стартирайте Visual C++

  • Изберете File | New

  • От появяващия се диалог изберете Projects, а в него – Win32 Application. При това може автоматично да се създаде нова работна среда (workspace). В полето Project name трябва да се въведе име на проекта, което става име и на изпълнимата програма. В полето Location може да се посочи директория, където да се разположат всички файлове на работната среда.

  • От следващия екран изберете A typical Hello World application

  • След натискане на Finish автоматично ви се генерира работеща, макар и елементарна програма.


Задача 2 Да се разгледа подробно програмата. Да се проследи пътят на изпълнение. Да се потърси помощна информация за основните функции и структури от API – RegisterClassEx(...), WNDCLASSEX, CreateWindow(...), GetMessage(...), DispatchMessage(...)
Задача 3 Да се модифицира прозореца, създаван от програмата, като последователно се променят следните му свойства:

  • Да не се вижда в taskbar-а (вижте CreateWindowEx(...) и WS_EX_TOOLWINDOW).

  • Да не може да се затваря по стандартните начини (вижте WNDCLASSEX и CS_NOCLOSE).

  • Да няма заглавен ред и съответно minimize / maximize бутони (вижте CreateWindow(...) и WS_OVERLAPPEDWINDOW, WS_MINIMIZEBOX и др.).

  • Да няма рамка (вижте CreateWindow() и WS_BORDER). Използвайте WS_POPUP вместо WS_OVERLAPPED / WS_OVERLAPPEDWINDOW.

  • Да няма меню (вижте WNDCLASSEX и lpszMenuName).

  • Да бъде прозрачен (по-точно при първоначалното си показване да „взема” за съдържание това, върху което се показва) – вижте hbrBackground в WNDCLASSEX.

  • Да се стартира максимизиран (вижте ShowWindow(...) и възможните стойности на втория параметър).

Общи указания:



  1. Някои от посочените свойства се задават в полета на WNDCLASSEX.

  2. Други се определят от стила на прозореца – третият параметърът (style) при извикването на CreateWindow(...).

  3. Вместо CreateWindow(...) може да се използва CreateWindowEx(...). Тази функция има един параметър в повече, първият параметър (styleex), и дава допълнителни възможности. Например замяната на

CreateWindow(...); с

CreateWindowEx(WS_EX_TOOLWINDOW, ...);

води до това, че прозореца на програмата не се вижда в taskbar-а


  1. За стиловете на класа и прозореца (а и в много други случаи в Windows API) се използва следния подход: стилът е 32-битово цяло число, в което всеки бит има определена стойност. Например някои от стиловете на прозорец са дефинирани така (в winuser.h):

#define WS_OVERLAPPED 0x00000000L

#define WS_POPUP 0x80000000L

#define WS_CHILD 0x40000000L

#define WS_VISIBLE 0x10000000L

#define WS_DISABLED 0x08000000L

#define WS_CAPTION 0x00C00000L /*WS_BORDER|WS_DLGFRAME*/

#define WS_BORDER 0x00800000L

#define WS_DLGFRAME 0x00400000L

#define WS_SYSMENU 0x00080000L

#define WS_THICKFRAME 0x00040000L

#define WS_MINIMIZEBOX 0x00020000L

#define WS_MAXIMIZEBOX 0x00010000L

#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \

WS_CAPTION | \

WS_SYSMENU | \

WS_THICKFRAME | \

WS_MINIMIZEBOX | \

WS_MAXIMIZEBOX)
#define WS_POPUPWINDOW (WS_POPUP | \

WS_BORDER | \

WS_SYSMENU)
#define WS_CHILDWINDOW (WS_CHILD)
Пояснения:


  • WS_OVERLAPPEDWINDOW, WS_POPUPWINDOW и WS_CHILDWINDOW са трите стандартни вида прозорци. Последният стил например се използва за бутони, edit-полета и т.н., вложени в диалогов прозорец. Диалоговият прозорец от своя страна обикновено е WS_POPUPWINDOW. Другите, не диалогови прозорци, например прозорецът на Hello World програмата, обикновено са WS_OVERLAPPEDWINDOW.

  • Споменатите три стила са съставни. Обърнете внимание въобще как се комбинират стиловете. Всеки елементарен стил е с един бит, вдигнат в единица. Съчетаването на няколко стила става с операция "побитово ИЛИ", например ако прозорецът трябва да е POPUP и да има рамка:

DWORD style=WS_POPUP | WS_BORDER;

Ако по-късно трябва да се добави и бутон за минимизиране, това може да стане така:

style = style | WS_MINIMIZEBOX

или още повече в духа на езика C:

style |= WS_MINIMIZEBOX
Нека сега е необходим стандартен прозорец, но примерно без рамка. Тогава може да се използва съставен стил, като от него се изключи, т.е. нулира един от битовете. Тук пък се използва операция "побитово И" с отрицанието на излишния флаг:

DWORD style = WS_OVERLAPPEDWINDOW;

style = style & ~WS_BORDER

или


style &= ~WS_BORDER

Задача 4 Прозорецът на програмата да се направи неправоъгълен.

Указания


  1. Създайте нова Typical Hello world програма.

  2. Постигането на неправоъгълна форма на прозорците е много лесно. За целта се работи с т. нар. области (region). Най-елементарната функция за създаване на област е:

HRGN CreateEllipticRgn ( int nLeft, int nTop,

int nRight, int nBottom);

Функцията създава елиптична област, вписана в правоъгълника, указан чрез параметрите, както следва:

Вижте в Help-а повече информация за функцията. Вижте и "Region functions" за още възможности за работа с области.



  1. След като областта е създадена, остава само да се извика друга стандартна API функция за работа с прозорци:

BOOL SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw);

Достатъчно е това да се направи еднократно; очевидно трябва да е след създаването на прозореца. Преценете къде в кода да добавите извиквания на двете API функции.
Каталог: download -> SisProgramirane -> Uprajnenia
download -> Задача Да се напише програма която извежда на екрана думите „Hello Peter. #include void main { cout }
download -> Окс“бакалавър” Редовно обучение I до III курс
download -> Конспект по дисциплината „Екскурзоводство и анимация в туризма" Специалност: "Мениджмънт в туризма"
download -> Дипломна работа за придобиване на образователно-квалификационна степен " "
download -> Рентгенографски и други изследвания на полиестери, техни смеси и желатин’’ за получаване на научната степен „Доктор на науките”
Uprajnenia -> 1Цели на упражнението
Uprajnenia -> 1Цели на упражнението
Uprajnenia -> 1Цели на упражнението


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница