на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Розробка системних об’єктно-орієнтованих програм мовою С++ в середовищі Windows
p align="left">afx_msg void OnHelp();

DECLARE_MESSAGE_MAP();

BEGIN_MESSAGE_MAP(CMyFrameWin, CFrameWnd)

ON_WM_CREATE()

ON_COMMAND(ID_OPEN,OnOpen)

ON_COMMAND(ID_HELP1,OnHelp)

END_MESSAGE_MAP();

void CMyFrameWin::OnRun()

void CMyFrameWin::OnAbout()

3.2 Таблиця акселератора

Для прискорення доступу до елементів меню за допомогою клавіатури, а також для виклику потрібних функцій, не пов'язаних з меню, в Windows використовується таблиця акселераторів. Вона знаходиться в ресурсах додатку і визначає відповідність між акселератором і значенням параметра WM_COMMAND, що передається у функцію, при натисненні комбінації клавіш[10].

Щоб комбінація клавіш стала працювати як акселератор, вона повинна бути описана в таблиці акселераторів і додаток повинен завантажити таблицю акселераторів з ресурсів.

Створення таблиці відбувається добавленням нового ресурсу Accelerator в пункті меню Edit Add Resource, як показано на рис. 2.

Для завантаження таблиці акселераторів використовується функція:

this->LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME));

Зовнішній вигляд вікна властивостей акселератора показано на рис. 5.

Рисунок 5 - Вікно властивостей акселератора для меню About

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

Зовнішній вигляд таблиці акселератора зображено на рис. 6.

Рисунок 6 - Таблиця акселератора для всієї програми

3.3 Контекстне меню програми

Контекстне меню створюється за допомогою класу CMenu:

CMenu menu;

Але CMenu по замовчуванню не створює меню. Для його створення необхідно скористатись функцією CreatePopupMenu().

menu.CreatePopupMenu();

Щоб додати елементи в контекстне меню, потрібно виконати наступне:

PopupMenu.CreatePopupMenu();

CPoint p;

GetCursorPos(&p);

PopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,p.x, p.y, this);

Метод LoadMenu зв'язує об'єкт з створеним раніше візуальним меню.

PopupMenu.LoadMenu(IDR_MENUPOPUP);

Стан елемента задається параметром nFlags, що може утримувати одно або декілька значень.

Контекстне меню створюється так само як головне меню добавленням нового ресурсу Menu пункті меню Edit Add Resource, як показано на рис. 2.

Зовнішній вигляд контекстного меню показано на рис. 7.

Рисунок 7 - Контекстне меню програми

4. ПАНЕЛЬ ІНСТРУМЕНТІВ ТА РЯДОК СТАНУ

4.1 Створення панелі інструментів

Панель інструментів являє собою набір растрових кнопок одного розміру(за замовчуванням їх розміри 15х16) і розподілювачів. Натиснення на кнопку панелі інструментів подібно вибору одного пункту меню. Частіше за все панель інструментів використовується разом з меню, дублюючи основні його пункти. На відміну від меню, вона більш зручна в роботі завдяки додатковим властивостям: організації підказок, встановленню різноманітних стилів і розмірів кнопок тощо.

Щоб створити панель інструментів необхідно натиснути правою кнопкою миші на папці Toolbar в вікні Resource View, а потім вибрати із контекстного меню Insert Toolbar, в результаті чого буде створена нова панель інструментів(створюється пуста панель інструментів). При її створені необхідно задати відповідний ідентифікатор ID, наприклад: IDR_MAINFRAME.

Після цього панель інструментів слід заповнити кнопками. Для цього існує спеціальний редактор. При створенні кнопки їй необхідно присвоїти ідентифікатор. В кожній кнопці даної програми прописані підказки у полі Prompt в діалоговому вікні властивостей кнопок, як показано на рис. 8.

Рисунок 8 - Властивості панелі інструментів

Рисунок 9 - Створення панелі інструментів

По закінченні створення панелі інструментів переходимо до створення програмного коду, що буде обробляти виклики з панелі інструментів. Потрібно додати в клас рамки вікна клас панелі інструментів:

CToolBar m_wndToolBar;

В функції CMyFrameWin::OnCreate(LPCREATESTRUCT lpCreateStruct) напишемо код для створення панелі інструментів:

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.2 Рядок стану

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

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

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

CStatusBar m_wndStatusBar;

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

static UINT indicators[] =

{

ID_SEPARATOR,

ID_INDICATOR_NUM,

ID_INDICATOR_CAPS,

ID_INDICATOR_SCRL,

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

!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

Зовнішній вигляд рядка стану зображено на рис. 9.

Рисунок 9 - Зовнішній вигляд рядка стану

5. СТВОРЕННЯ ДІАЛОГОВИХ ВІКОН

5.1 Етапи розробки діалогових вікон

Діалогове вікно має всі ознаки звичайного. Його можна переміщувати, закривати, а також передавати йому повідомлення. Перевага діалогового вікна в тому, що в ньому можна легко розмістити кнопки, текстові поля та інші елементи керування.

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

Використовуючи стандартний метод опису діалогу було написано два діалогових вікна: Input і About.

5.2 Створення діалогу

Створення діалогово вікна відбувається добавленням нового ресурсу Dialog пункті меню Edit Add Resource, як показано на рис. 2.

Діалогове вікно оформляється за допомогою панелі інструментів Toolbox і властивостей даного елементу панелі інструментів, рис. 10.

Рисунок 10 - Панель інструментів Toolbox і вікно властивостей кнопки “OK”

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

void CMyFrameWin::OnInput()

CMyDialog dialog;

dialog.DoModal();

Після цього створюється об'єкт власного класу діалогу методом DoModal() та його активація. Необхідно створити обробку введених користувачем даних в діалоговому вікні. Обробка відбувається після натиснення кнопки Ok та закриття діалогового вікна.

void CMyDialog::OnOK()

char str[80];

edit1.GetWindowText(str,80);

for(int i=0;i<=strlen(str);i++)

T=T+str[i];

for(int i=0;i<80;i++)

CDialog::OnOK();

void CMyDialog::OnCancel()

CDialog::OnCancel();

Після цього відбувається передача даних із ЕК у змінні-властивості класу діалогу згідно з DDX-макросами методу DoDataExchange().

void CMyDialog::DoDataExchange(CDataExchange* pDX)

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_EDIT1, edit1);

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

Якщо введені дані не потрібно зберігати або обробляти, тоді діалогове вікно закривається натисненням кнопки Cancel[1]. Введені за допомогою діалогового вікна дані далі можуть бути використані в функціях інших класів програми. Діалогове вікно даної програми зображене на рисунку 11.

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

В функції OnInitDialog() проведено початкову ініціалізацію для поля edit1, а саме за допомогою методу SetWindowText(CString("0")) значення, яке може вводитись користувачем, в даному випадку початкове значення 0.

За допомогою функції GetWindowText данні з поля Edit зчитуються в змінні типу char - str. Потім за допомогою функції atof перетворюються в дані типу float.

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

Рисунок 12 - Зовнішній вигляд діалогу при натисканні на кнопку «Info»

6. РЕАЛІЗАЦІЯ МАТЕМАТИЧНОЇ ФУНКЦІЇ МОВОЮ ASSEMBLER

При програмуванні математичного співпроцесора може бути використано або програмування співпроцесора для роботи з числами з фіксованою комою, або програмування співпроцесора - з числами з плаваючою комою. В даній програмі використовується програмування співпроцесора для роботи з плаваючою комою. Він має вісім регістрів, які організовані у вигляді стека.(рисунок 13)[8].

Рисунок 13 - Організація стека математичного співпроцесора

Основні команди, що використовуються при програмуванні:

- Finit - команда ініціалізації;

- Fcom src - порівняти значення першого регістру з другим;

- Fld src - завантажити регістр;

- Fst dst - зберегти значення у регістр;

- Fadd dst, src - додати до першого регістра другий;

- Fmul dst, src - помножити перший регістр на другий і зберегти результат в першому;

- Fdiv dst, src - поділити перший регістр на другий і зберегти результат в першому[6].

Всі данні необхідні для обчислення, ініціалізація програми, та вивід данних здійснюється за допомогою C++:

Розглянемо частину коду яка виконує обчислення коли х=4:

_asm

{

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.