Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPZ_13V_Мое.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
633.86 Кб
Скачать

4.2 Створення рядку стану

Рядок стану розташовується в нижній частині вікна. Його призначення – відображати опис команд і стан клавіш клавіатури, включаючи Caps Lock і Scroll Lock, та інформувати користувача про стан визначених атрибутів або параметрів програми[2].

Для створення рядка стану необхідно виконати такі кроки.

  1. В класі вікна програми оголосити змінну класу CStatusBar для об’єкта – рядка стану[1]:

CStatusBar m_wndStatusBar;

  1. Створити структуру з ідентифікаторами полів, що відображаються в рядку стану[1]:

static UINT indicators[] =

{ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,

ID_INDICATOR_SCRL};

  1. В функції OnCreate CMyFrameWin код для створення панелі

інструментів:

m_wndStatusBar.Create(this) m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))

5 Створення діалогових вікон

5.1 Основні етапи створення діалогу

Основним інструментом взаємодії користувача з Windows-програмою є діалогові вікна. Діалогове вікно має всі ознаки звичайного вікна, але є його особливим різновидом. Вікно можна переміщувати, закривати, а також передавати йому повідомлення. Перевага діалогового вікна в тому, що в ньому можна легко розмістити кнопки, прапорці, текстові поля та інші елементи керування.

По способу взаємодії з користувачем діалогові вікна бувають двох типів – модальні та немодальні [3]. В даній програмі використовуються модальні вікна – ці вікна виводяться поверх інших вікон, і поки користувач не закінчив з ним роботу, він не може працювати з іншими вікнами додатку. Всі повідомлення, що направленні вікнам одного з ним рівня або батьківським вікнам, перехоплюються ним [2].

Створення діалогового вікна починається з створення класу діалогу. Даний клас є похідним від класу CDialog. В цьому класі мають бути оголошені необхідні змінні-властивості класу діалогу, які відповідають різним ЕК діалогового вікна. Далі відбувається ініціалізація ЕК діалогового вікна – відбувається присвоєння змінним-властивостям тих значень, які мають бути відображені у відповідних ЕК при першому відображенні діалогового вікна. Ініціалізація ЕК відбувається за допомогою стандартного методу OnInitDialog(). Після цього створюється об’єкт власного класу діалогу методом DoModal() та його активація. Необхідно створити обробку введених користувачем даних в діалоговому вікні. Обробка відбувається після натиснення кнопки Ok та закриття діалогового вікна. Після цього відбувається передача даних із ЕК у змінні-властивості класу діалогу згідно з DDX-макросами методу DoDateExchange(). Якщо введені дані не потрібно зберігати або обробляти, тоді діалогове вікно закривається натисненням кнопки Cancel[1]. Введені за допомогою діалогового вікна дані далі можуть бути використані в функціях інших класів програми.

5.2 Створення діалогу для введення змінних

Діалогове вікно запускається по натисненню кнопки Dialog. Функція виклику діалогового вікна прописана в функції-обробнику OnDialog ():

void CMyFrameWin:: OnDialog ()

{

CMyDialog dialog;

dialog.DoModal();

}

Для введення коефіцієнтів в програмі використовується Edit, a для введення х – елемент ComboBox, який належить до класу CComboBox.

Рисунок 3 – Діалог для введення данних

Створення власного класу діалогу, похідного від бібліотечного класу:

class CMyDialog :public CDialog

{

public:

CMyDialog(CWnd *pParent = NULL);

enum { IDD=IDD_DIALOG1};

CEdit text1;

CEdit text2;

CEdit text3;

CComboBox textX;

protected:

virtual void DoDataExchange(CDataExchange *pDX);

virtual void OnOk();

virtual void OnCancel();

virtual BOOL OnInitDialog();

DECLARE_MESSAGE_MAP()

};

Ініціалізація діалогового вікна:

BOOL CMyDialog::OnInitDialog()

{

CDialog::OnInitDialog();

text1.SetWindowText("1");

text2.SetWindowText("1");

text3.SetWindowText("1");

textX.SetWindowText("1");

UpdateData(TRUE);

return TRUE;

}

В функції OnInitDialog() відбувається заповнення всіх ЕК числом 1, що реалізовано за допомогою функції SetWindowText().

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

void CMyDialog::DoDataExchange(CDataExchange *pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX,IDC_EDIT1,text1);

DDX_Control(pDX,IDC_EDIT2,text2);

DDX_Control(pDX,IDC_EDIT3,text3);

DDX_Control(pDX,IDC_COMBO1,textX);

}

DDX_Control – покажчик на об’єкт класу елементаму керування.

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

void CMyDialog::OnOk()

{

char tmp[100];

text1.GetWindowText(tmp,100);

a = atoi(tmp);

text2.GetWindowText(tmp,100);

b = atoi(tmp);

text3.GetWindowText(tmp,100);

c = atoi(tmp);

textX.GetWindowText(tmp,100);

x = atoi(tmp);

CDialog::OnOK();

}

За допомогою функції GetWindowText данні з поля textA, textB, textC та textX зчитуються в змінні типу char tmp. Потім за допомогою функції atoi змінні за допомогою функції atoі перетворюються в данні типу integer. Данні з полів textA, textB, textC та textX зберігаються в змінній a, b, c та x відповідно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]