- •Затверджую
- •Індивідуальне завдання
- •Анотація
- •Аналіз індивідуального завдання
- •Загальна структура проекту
- •Розробка меню програми
- •Панель інструментів та рядок стану
- •Створення діалогових вікон
- •Створення та підключення бібліотеки dll
- •Реалізація математичної функції мовою assembler
- •Керівництво системного програміста
- •Керівництво оператора
- •Висновки
- •Література
- •Додатки
Панель інструментів та рядок стану
Створення панелі інструментів
Панель інструментів – це сукупність растрових кнопок одного розміру і розподілювачів. Натиснення на кнопку панелі інструментів подібно вибору одного пункту меню. Частіше за все панель інструментів використовується разом з меню, дублюючи основні його пункти. На відміну від меню, вона більш зручна в роботі завдяки додатковим властивостям: організації підказок, встановленню різноманітних стилів, розмірів кнопок, тощо [3].
Для створення панелі інструментів необхідно натиснути правою кнопкою миші на папці Toolbar в вікні Resource View, а потім вибрати із контекстного меню Insert Toolbar, в результаті чого буде створена нова пуста панель інструментів. При її створені необхідно задати відповідний ідентифікатор ID:
IDR_MAINFRAME
Після цього панель інструментів слід заповнити кнопками, для цього в Visual Studio 2008 існує спеціальний редактор. При створенні кожної кнопки, їй потрібно присвоїти свій ідентифікатор, так як в даній програмі кнопки панелі інструментів повторюють пункти меню, то використовуються ті ж самі ідентифікатори, що й для пунктів меню.
По закінченні формування графічної частини меню, слід перейти до написання програмного коду, що буде обробляти дану панель інструментів. Слід додати в клас рамки вікна клас панелі інструментів:
CToolBar m_wndToolBar;
Код для створення панелі інструментів в функції OnCreate():
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD
| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS
| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
}
де, TBSTYLE_FLAT – стиль кнопки; WS_CHILD, WS_VISIBLE, CBRS_TOP, CBRS_GRIPPER, CBRS_TOOLTIPS, CBRS_FLYBY, CBRS_SIZE_DYNAMIC – стилі панелі інструментів [4].
Створення рядку стану
Рядок стану розташовується в нижній частині вікна. Його призначення – відображати опис команд і стан клавіш клавіатури, включаючи Caps Lock і Scroll Lock, також інформувати користувача про стан визначених атрибутів або параметрів програми.
Для створення рядка стану необхідно виконати такі дії.
В класі вікна програми створити екземпляр класу CStatusBar:
CStatusBar m_wndStatusBar;
Створити структуру з ідентифікаторами полів, що відображаються в рядку стану:
static UINT indicators[] =
{ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,
ID_INDICATOR_SCRL};
В функції OnCreate()створити панель інструментів:
m_wndStatusBar.Create(this) m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))
Створення діалогових вікон
Основні етапи створення діалогових вікон
Основним інструментом взаємодії користувача з Windows-програмою є діалогове вікно. Діалогове вікно має всі ознаки звичайного вікна, але є його особливим різновидом. Вікно можна переміщувати, закривати, а також передавати йому повідомлення. Перевага діалогового вікна в тому, що в ньому можна легко розмістити кнопки, прапорці, текстові поля та інші елементи керування (ЕК).
По способу взаємодії з користувачем діалогові вікна бувають двох типів – модальні та немодальні. В даній програмі використовуються модальні вікна, ці вікна виводяться поверх інших вікон, і поки користувач не закінчив роботу з ним, він не може працювати з іншими вікнами додатку. Всі повідомлення, що направленні вікнам одного з ним рівня або батьківським вікнам, перехоплюються ним [5].
Створення діалогового вікна починається зі створення класу діалогу. Даний клас є похідним від класу CDialog. В цьому класі мають бути оголошені необхідні змінні-властивості класу діалогу, які відповідають різним ЕК діалогового вікна. Далі відбувається ініціалізація ЕК діалогового вікна – присвоєння змінним-властивостям тих значень, які мають бути відображені у відповідних ЕК при першому відображенні діалогового вікна. Ініціалізація ЕК відбувається за допомогою стандартного методу OnInitDialog(). Після цього створюється об’єкт власного класу діалогу методом DoModal() та його активація. Необхідно створити обробку введених користувачем даних в діалоговому вікні. Обробка відбувається після натиснення кнопки Ok та закриття діалогового вікна. Після цього відбувається передача даних із ЕК у змінні-властивості класу діалогу згідно з DDX-макросами методу DoDateExchange(). Якщо введені дані не потрібно зберігати або обробляти, тоді діалогове вікно закривається натисненням кнопки Cancel. Введені за допомогою діалогового вікна дані далі можуть бути використані в функціях інших класів програми.
Створення діалогу для введення змінних
Діалогове вікно запускається по натисненню кнопки Calc. Функція виклику діалогового вікна описана в функції-обробнику OnCalc():
void CMyFrameWin:: OnCalc()
{
CMyDialog dialog;
if(dialog.DoModal() == IDOK){
…
}
Для введення х та a в програмі використовуються елемент ComboBox, який належить до класу CComboBox.
Рисунок 6 – Діалог для введення даних
Створення власного класу діалогу, похідного від бібліотечного класу:
class CMyDialog :public CDialog
{
public:
CMyDialog(CWnd *pParent = NULL);
enum { IDD=IDD_DIALOG1};
CComboBox textX;
CComboBox textA;
protected:
virtual void DoDataExchange(CDataExchange *pDX);
virtual void OnOk();
virtual void OnCancel();
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
};
Ініціалізація діалогового вікна:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
textA.SetWindowText("0");
textX.SetWindowText("0");
UpdateData(TRUE);
return TRUE;
}
В функції OnInitDialog() відбувається заповнення ЕК початковими значеннями, це реалізовано за допомогою функції SetWindowText(), х та a заповнюються числом 0.
Організація обміну даними з елементами керування діалогового вікна здійснюється таким чином:
void CMyDialog::DoDataExchange(CDataExchange *pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_COMBO_A,textA);
DDX_Control(pDX,IDC_COMBO_X,textX);
}
DDX_Control – покажчик на об’єкт класу елемента керування.
Обробка введених користувачем даних в діалоговому вікні здійснюється за допомогою наступної функції:
void CMyDialog::OnOk()
{
char tmp[100];
textA.GetWindowText(tmp,100);
a = atof(tmp);
textX.GetWindowText(tmp,100);
x = atoi(tmp);
UpdateData(TRUE);
CDialog::OnOK();
}
За допомогою функції GetWindowText дані з полів textA та textX зчитуються в змінну типу char. Потім за допомогою функцій atoi() та atof() перетворюються в данні int і float [6, 7].
