Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_progr_Win / Lab9.doc
Скачиваний:
9
Добавлен:
23.03.2015
Размер:
1.11 Mб
Скачать

DialogBox(hInstance, "aboutbox", hwnd,AboutDiaProc);

break;

case IDM_TEXT:

break;

При обробці в WndProc повідомлення WM_CREATE, програма ATIDIA одержує дескриптор екземпляра програми і зберігає його в статичній змінній:

hInstance = ((LPCREATESTRUCT) lParam) -> hInstance;

Програма ATIDIA обробляє ті повідомлення WM_COMMAND, у яких молодше слово параметра wParam дорівнює IDM_ABOUT, IDM_TEXT, IDM_INTEGER, IDM_EXIT. Наприклад, коли програма одержує молодше слово параметра wParam рівне IDM_ABOUT, вона викликає функцію DialogBox:

DialogBox(hInstance, "ABOUTBOX", hwnd, AboutDiaProc);

Для цієї функції потрібно дескриптор екземпляра (збережений при обробці повідомлення WM_CREATE), ім'я вікна діалогу (як воно визначено у файлі опису ресурсів), дескриптор батьківського вікна діалогу (яким є головне вікно програми) і адреса процедури діалогу.

Вибір з меню пункту "About Box..." приводить до виводу на екран вікна діалогу About Dialog. Закрити це вікно діалогу можна, клацнувши на кнопці OK мишею, натиснувши клавішу <Spacebar> чи <Enter>. При натисканні клавіш <Spacebar> чи <Enter> у будь-якім вікні діалогу, у якому мається кнопка за замовчуванням, Windows посилає діалоговій процедурі повідомлення WM_COMMAND, у якому молодше слово параметра wParam дорівнює ідентифікатору заданої за замовчуванням кнопки.

Функція DialogBox, що викликається для виводу на екран вікна діалогу, не повертає керування в WndProc доти, поки вікно діалогу не буде закрито. Значенням функції, що повертається, DialogBox є другий параметр функції EndDialog, що викликається в процедурі діалогу. Потім WndProc може передати керування Windows.

  1. Аналогічно додаються і два інших діалоги з незначними відмінностями, обумовленими введенням інформації.

У першому випадку, коли вводитися текст використовується функція GetDlgItemText(). У загальному виді вона виглядає так:

UINT GetDlgItemText(

HWND hDlg, // дескриптор діалогового вікна

int nIDDlgItem, // ідентифікатор елемента керування

LPTSTR lpString, // адреса буфера для тексту

int nMaxCount // максимальний розмір рядка

);

У atidia ця функція зчитує уміст вікна редагування в глобальну перемінну textscreen, що потім виводитися в робочу область вікна.

В другому випадку, коли вводяться числові дані використовується функція GetDlgItemInt(). У загальному виді вона виглядає так:

UINT GetDlgItemInt(

HWND hDlg, // дескриптор діалогового вікна

int nIDDlgItem, // ідентифікатор елемента керування

BOOL *lpTranslated, // покажчик на булєву змінну, що показує чи коректно введені дані. Може мати значення NULL.

BOOL bSigned // показує яке значення лічене знакове чи беззнакове

);

У atidia ця функція використовується для чотирьох вікон редагування. Вона зчитує уміст вікна редагування в одну з глобальних перемінних up_lfx, up_lfy, lo_rtx, lo_rty, за значеннями яких потім малюється прямокутник.

Додайте до програми код, що містить дві діалогові процедури:

BOOL CALLBACK AboutDiaProc(HWND, UINT, WPARAM, LPARAM) ;

BOOL CALLBACK TextDiaProc(HWND, UINT, WPARAM, LPARAM) ;

BOOL CALLBACK IntDiaProc(HWND, UINT, WPARAM, LPARAM) ;

static char szAppName[] = "Dialogs" ;

static char textscreen[80] = "A line of text" ;

Соседние файлы в папке Lab_progr_Win