Таблиця 7.5

Стилі вікон класу "кнопки"

Стиль Опис
BS_3STATE Створити прапорець, що має три стани - включеними, відключеними й недоступним (виділений сірими кольорами). Автоматично стан не міняє
BS_AUT03STATE Те ж, що й попереднє, за винятком того, що прапорець міняє свій стан, коли його вибирає користувач
BS_AUTOCHECKBOX Створюється CheckBox, що автоматично міняє свій стан при виборі користувачем
BS_AUTORADIOBUTTON Те ж, що й BS_RADIOBUTTON, за винятком того, що перемикач стає обраним, коли на ньому клацає користувач, а всі інші перемикачі в групі стають невибраними
BS_BITMAP Створити кнопку з растровим зображенням
BS_BOTTOM Розміщає текст у нижнього краю прямокутника, виділеного для розміщення кнопки
BS_CENTER Розміщає текст по горизонталі в центрі прямокутника, виділеного для розміщення кнопки
BS_CHECKBOX Створюється прапорець із написом (CheckBox), показаної праворуч, якщо не використається стиль BS_LEFTTEXT
BS_DEFPUSHBUTTON Створюється звичайна кнопка, що спрацьовує при натисканні "Enter" навіть тоді, коли не обрана. Ця кнопка має широку чорну рамку.
BS_FLAT Створити плоску кнопку, що не має тривимірного затінення.
BS_GROUPBOX Створити поле із заголовком, показаним у лівому верхньому куті.
BS_ICON Створити кнопку, на якій відображена піктограма.
BS_LEFT Розміщає текст у лівого краю прямокутника, виділеного для розміщення кнопки
BS_LEFTTEXT Текст міститься ліворуч від RadioButton'a або CheckBox'a, те ж, що й BS_RIGHTBUTTON
BS_MONO Кнопка може мати тільки один рядок тексту напису.
BS_MULTILINE При необхідності текст розбивається на кілька рядків
BS_NOTIFY Дозволяє посилку батьківському вікну нотификационных повідомлень BN_DBLCLK, BN_KILLFOCUS й BN_SETFOCUS
BS_OWNERDRAW За промальовування кнопки відповідає програма, а не система. Батьківське вікно приймає повідомлення WM_MEASUREITEM при створенні кнопки й повідомлення WM_DRAWITEM у будь-який час, коли потрібно вивести на екран кнопку. Цей стиль не слід поєднувати з будь-якими іншими стилями кнопки.
BS_PUSHBUTTON Створюється звичайна кнопка, що виводить повідомлення WM_COMMAND у батьківське вікно, коли відбувається її вибір.
BS_PUSHLIKE Робить CheckBox або RadioButton зовні схожими на PushButton
BS_RADIOBUTTON Створюється Radio Button, автоматично стан не міняється
BS_RIGHT Розміщає текст у правого краю прямокутника, виділеного для розміщення тексту
BS_RIGHTBUTTON RadioButton або CheckBox розміщаються праворуч від напису
BS_TEXT Усередині або поруч із кнопкою відображається текст
BS_TOP Розміщає текст у верхнього краю прямокутника, виділеного для розміщення кнопки
BS_USERBUTTON Застарілий стиль, необхідно використати BS_OWNERDRAW
BS_VCENTER Розміщає текст по вертикалі в центрі прямокутника, виділеного для розміщення кнопки

Таблиця 7.6

Стилі вікон класу "списки"

Стиль Опис
LBS_DISABLENOSCROLL Показувати на списку вертикальну лінійку прокручування, навіть якщо список не містить достатнє число елементів для прокручування. Лінійка прокручування недоступна доти, поки не з'явиться достатнє число елементів. За замовчуванням, якщо список не містить достатнього числа елементів, лінійка прокручування схована.
LBS_EXTENDEDSEL Дозволяє списку із множинним вибором використати для виділення клавішу Shift разом з мишею або інші клавіатурні комбінації
LBS_HASSTRING Застосовується зі списком, виведеним власником, для вказівки того, що в список повинні бути уведені рядки. Потім для одержання конкретного елемента в додатку можна використати повідомлення LB_GETTEXT.
LBS_MULTICOLUMN Створити багатостолбцевий список, що може прокручуватися по горизонталі. Для визначення ширини стовпців використається повідомлення LB_SETCOLUMNWIDTH.
LBS_MULTIPLESEL Дозволити вибирати кілька елементів, клацаючи на кожному елементі дли вибору або скасування вибору
LBS_NODATA Застосовується зі списком, виведеним користувачем, для вказівки того, що в списку немає даних. Цей стиль використається, коли загальне число елементів у списку перевищує 1000. Повинен також застосовуватися стиль LBS_OWNERDRAWFIXED, а стилі LBS_SORT або LBS_HASSTRINGS не можуть використатися.
LBS_NOINTEGRALHEIGHT Список створюється точно такого ж розміру, що зазначений у програмі, вирівнювання не виробляється
LBS_NOREDRAW Список не одержує повідомлень WM_PAINT при внесенні змін. Для зміни цього стилю може використатися повідомлення WM_SETREDRAW.
LBS_NOSEL Елементи списку видні, але виділення заборонене
LBS_NOTIFY Посилає повідомлення батьківському вікну про щиглика або подвійного щиглика клавішею миші
LBS_OWNERDRAWFIXED Батьківське вікно відповідально за промальовування елементів, всі елементи списку однакової висоти.
LBS_OWNERDRAWVARIABLE To же, що й попереднє, але елементи списку можуть бути різної висоти
LBS_SORT Автоматично сортувати рядка, що додають до списку за допомогою повідомлення LB_ADDSTRING.
LBS_STANDARD LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER
LBS_USETABSTOPS Список при висновку вхідних у нього рядків повинен розгортати символи табуляції. Передбачені за замовчуванням позиції табуляції розташовані із кроком в 32 одиниці виміру довжини діалогового вікна. Для установки інших позицій табуляції застосовується повідомлення LB_SETTABSTOPS
LBS_WANTKEYBOARDINPUT Власник списку одержує повідомлення WM_VKEYTOITEM щораз, коли користувач натискає яку-небудь клавішу й список одержує фокус уведення.

Таблиця 7.7

Стилі поля класу "комбінованих списків"

Стиль Опис
CBS_AUTOHSCROLL Дозволити горизонтальне прокручування в елементі керування редагуванням поля зі списком.
CBS_DISABLENOSCROLL Вертикальна лінійка прокручування повинна бути видимої, навіть якщо видні всі елементи в списку. Якщо лінійка прокручування не потрібна для відображення всіх елементів у списку, висновок її на екран відмінний. Звичайно лінійка прокручування відображається тільки якщо буде потреба.
CBS_DROPDOWN Створити поле зі списком, що випадає. Список стає видимим тільки будучи обраним
CBS_DROPDOWNLIST Створити поле зі списком, що випадає. Редагування не дозволене; відображається тільки обраний елемент.
CBS_HASSTRINGS Використається з полем зі списком, виведеним власником, для вказівки того, що до поля зі списком будуть додані рядки. Потім для вибірки конкретного елемента в додатку можна використати повідомлення CB_GETLBTEXT.
CBS_LOWERCASE Показати, що в елементі керування редагуванням дозволене уведення тільки символів нижнього регістра, що вводять символи верхнього регістра перетворяться в символи нижнього регістра.
CBS_NOINTEGRALHEIGHT Задається розмір поля зі списком. За замовчуванням система Windows визначає розмір поля зі списком так, щоб не можна було відобразити тільки частину елемента.
CBS_OEMCONVERT Уведений текст буде перетворений з набору символів Windows у набір символів OEM, а потім знову - у набір Windows. Це забезпечує правильне перетворення при використанні функції AnsiToOem.
CBS_OWNERDRAWFIXED Створити поле зі списком, виведене власником. Батьківське вікно одержує повідомлення WM_MEASUREITEM при створенні поля зі списком і повідомлення WM_DRAWITEM, коли потрібно вивести елемент
CBS_OWNERDRAWVARIABLE Tе ж, що й CBS_OWNERDRAWFIXED, за винятком того, що розмір кожного елемента в списку можна визначати окремо. Для елемента в поле зі списком викликається повідомлення WM_MEASUREITEM перед викликом повідомлення WM_DRAWITEM для цього елемента.
CBS _SIMPLE Створити просте поле зі списком, де список елементів завжди показаний і поточний вибір перебуває в елементі керування редагуванням
CBS_SORT Сортувати рядка, внесені в список з використанням повідомлення CB_ADDSTRING.
CBS_UPPERCASE Показати, що потрібно вводити в елементі керування редагуванням тільки символи верхнього регістра, преобразуя символи нижнього регістра в символи верхнього регістра в міру їхнього уведення.

Таблиця 7.8

Стилі поля класу "вікна редагування"

Стиль Опис
ES_AUTOHSCROLL При необхідності текст у вікні редагування скроллируеться по горизонталі
ES_AUTOVSCROLL При необхідності текст у багатострочном вікні редагування скроллируется по вертикалі
ES_CENTER Текст у вікні редагування вирівнюється по правому краї
ES_LEFT Текст у вікні редагування вирівнюється по лівому краї
ES_LOWERCASE Текст, що вводить, перетвориться в малі літери
ES_MULTILINE Створюється багатострочне вікно редагування
ES_NOHIDESEL   При втраті вікном редагування фокуса уведення виділення з тексту не знімається
ES_NUMBER Дозволяється здійснювати уведення тільки цифр
ES_OEMCONVERT Символи, що вводять, з одного набору перетворяться в символи з іншого набору
ES_PASSWORD Всі вводити символи, що, відображаються у вигляді зірочок
ES_READONLY Текст у вікні редагування можна тільки переглядати, але не редагувати
ES_RIGHT Текст у вікні редагування вирівнюється по центрі
ES_UPPERCASE Текст, що вводить, перетвориться в прописні букви
ES_WANTRETURN При натисканні клавіші Enter у багатстрочному вікні система вставляє в текст символ повернення каретки

Таблиця 7.9

Стилі поля класу "смуг прокручування"

Стиль Опис
SBS_BOTTOMALIGN Установити нижній край лінійки прокручування урівень із нижнім краєм прямокутника, певного параметрами функції CreateWindow.
SBS_HORZ Створити горизонтальну лінійку прокручування.
SBS_LEFTALIGN Установити лівий край лінійки прокручування урівень із лівим краєм прямокутника, певного параметрами функції CreateWindow.
SBS_RIGHTALIGN Установити правий край лінійки прокручування урівень із правим краєм прямокутника, певного параметрами функції Create Window.
SBS_SIZEBOX Створити блок керування розміром. Якщо стилі SBS_SIZEBOXBOTTOMRIGHTALIGN або SBS_SIZEBOXTOPLEFTALIGN не зазначені, то висота, ширина й позиція блоку керування розміром мають значення, які визначені параметрами функції CreateWindow.
SBS_SIZEBOXBOTTOMRIGHTALIGN Сполучити нижній правий кут блоку керування розміром з нижнім правим кутом прямокутника, певного параметрами функції CreateWindow.
SBS_SIZEBOXTOPLEFTALIGN Сполучити лівий верхній кут блоку керування розміром з лівим верхнім кутом прямокутника, певного параметрами функції CreateWindow.
SBS_SIZEGRIP Те ж, що й SBS_SIZEBOX, але з активізованим краєм.
SBS_TOPALIGN Установити верхній край лінійки прокручування урівень із верхнім краєм прямокутника, певного параметрами функції CreateWindow.
SBS_VERT Створити вертикальну лінійку прокручування.

Таблиця 7.10

Стилі вікон класу "статичних елементів"

Стиль Опис
SS_BITMAP Створити статичний елемент керування з растровим зображенням, заданим параметром /psz/ndowName. Параметри nWidth й nНеight ігноруються й перераховуються з урахуванням розмірів растрового зображення.
SS_BLACKFRAME Створити прямокутник, для висновку якого на екран застосовується такі ж кольори, як і для рамок вікон.
SS_BLACKRECT Створити прямокутник, зафарбований такими ж кольорами, як і рамки вікон.
SS_CENTER Створити статичний елемент керування з вирівнюванням тексту по центрі й переносом слів на наступний рядок якщо буде потреба.
SS_ETCHEDFRAME Виводити на екран елемент керування з утопленою рамкою.
SS_ETCHEDHORZ Аналогічний стилю SS_ETCHEDFRAME, за винятком того, що втопленими будуть відображені тільки верхня й нижня сторони рамки.
SS_ETCHEDVERT Аналогічний стилю SS_ETCHEDFRAME, за винятком того, що втопленими будуть відображені тільки ліва й права сторони рамки
SS_GRAYFRAME Створити прямокутник, відображуваний такими ж кольорами, як й тло екрана (робітника стола).
SS_CRAYRECT Створити прямокутник, зафарбований такими ж кольорами, як фон екрана.
SS_ICON Створити статичний елемент керування, що відображає піктограму, зазначену параметром IpszWindowName. Параметри nWidth й niHeight ігноруються й перераховуються відповідно до розмірів піктограми.
SS_LEFT Створити статичний текстовий елемент керування, де заданий текст вирівняний по лівому краї й при необхідності розбитий на рядки.
SS_LEFTNOWORDWRAP Створити статичний текстовий елемент керування, де заданий текст вирівняний по лівому краї. Текст не розбивається на рядки, але символи табуляції розвертаються. Текст, що виходить за кінець рядка, відтинається.
SS_NOPREFIX Відключити інтерпретацію символу амперсанта (&) як ознаки оперативної клавіші
SS_NOTIFY Посилати батьківському вікну повідомні повідомлення STN_CLICKED й STN_DBLCLK, коли користувач клацає або двічі клацає на елементі керування
SS_OWNERDRAW За висновок на екран статичного елемента керування відповідає його власник.
SS_REALSIZEIMAGE Заборонити зміна розмірів статичного елемента керування відповідно до розмірів піктограми або растрового зображення.
SS_RIGHT   Створити статичний текстовий елемент керування, де текст вирівняний по правому краї й при необхідності розбитий на рядки.
SS_RIGHTJUST Нижній правий кут статичного елемента керування зі стилем SS_BITMAP або SS_ICON залишається нерухомим при зміні розмірів елемента керування. Змінюється тільки положення верхньої й лівої сторін відповідно до розмірів растрового зображення або піктограми.
SS_SIMPLE Створити простий статичний текстовий елемент керування з текстом, вирівняним по лівому краї
SS_SUNKEN Виводити частково втоплену рамку навколо статичного елемента керування
SS_WHITEFRAME   Створити прямокутник, що має при відображенні на екрані такі ж кольори, як і тло вікон.
SS_WHITERECT Створити прямокутник, зафарбований такими ж кольорами, як і тло вікна

 

ПРИКЛАД:

Обчислити вираження а й в (Рис. 7.6) при заданих x, y й z. Програму оформити у вигляді графічного додатка. Уведення й висновок інформації організувати за допомогою діалогових вікон.

 

Рис. 7.6.Вираження а й б

 

Меню головного вікна один пункт «Обчислити» і два випадаючих підпункти «Варіант А», «Варіант В» (Рис. 7.7).

 

Рис. 7.7.Структура меню

 

Під це меню віконна функція зміниться й прийме вид:

 

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

{

switch (message)

{

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDM_ABOUT1:

DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX1, hWnd, (DLGPROC)About1);

break;

case IDM_ABOUT2:

DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX2, hWnd, (DLGPROC)About2);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

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

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

}

return 0;

}

 

Діалогові вікна для організації уведення й висновку, а також обчислення виражень а й у мають вигляд Рис. 7.8.

 

Рис. 7.8.Діалогові вікна

 

Функції взаємодії з діалоговими вікнами й обчислення виражень а й у наведені нижче:

 

LRESULT CALLBACK About1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDOK:

{

char sz[15],sz[15];

double x,y,a;

GetDlgItemText(hDlg,IDC_EDIT2,sz,12) ;

x = atof(sz);

GetDlgItemText(hDlg,IDC_EDIT3,sz,12) ;

y = atof(sz);

x=abs(x);

x=pow(x,1./3);

x=pow(y, x);

a=sin(y-3.);

a=pow(a,3.);

a=a+x;

sprintf(sz,"%7.4f",a);

SetWindowText(GetDlgItem(hDlg,IDC_SUM),sz);

}

break;

case IDCANCEL:

{

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

}

break;

}

}

 

return FALSE;

}

LRESULT CALLBACK About2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDOK:

{

char sz[15],sz[15];

double x,y,z,b;

GetDlgItemText(hDlg,IDC_EDIT2,sz,12) ;

x = atof(sz);

GetDlgItemText(hDlg,IDC_EDIT3,sz,12) ;

y = atof(sz);

GetDlgItemText(hDlg,IDC_EDIT4,sz,12) ;

z = atof(sz);

b=y*(atan(z)-3.1415/6);

x=abs(x)+1./(y*y+1);

b=b/x;

sprintf(sz,"%7.4f",b);

SetWindowText(GetDlgItem(hDlg,IDC_SUM),sz);

}

break;

case IDCANCEL:

{

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

}

break;

}

}

 

return FALSE;

}

 

Фрагменти функцій About1 й About2 виділені жирним шрифтом для кожного варіанта будуть відрізнятися.

Прототипи діалогових функцій About1 й About2 мають вигляд:

 

LRESULT CALLBACK About1(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK About2(HWND, UINT, WPARAM, LPARAM);

 

Робота графічного додатка в комплексі представлена на Рис. 7.9.

Рис. 7.9. Графічний додаток