- •4 Створення прикладних mfc-програм в середовищі Windows
- •4.1 Структура мінімальної прикладної mfc-програми
- •4.2 Обробка повідомлень в mfc-програмах
- •4.3 Розробка меню в mfc-програмах
- •4.3.1 Перший спосіб підключення меню в mfc-програмах
- •4.3.2 Другий спосіб підключення меню в mfc-програмах
- •4.3.3 Обробка повідомлень від команд меню
- •4.4 Підключення панелі інструментів і рядка стану
- •4.4.1 Створення панелі інструментів
- •4.4.2 Створення рядка стану
- •4.4.3 Приклад програми
- •4.5.1 Контексти пристроїв в mfc-програмах
- •4.5.2 Використання пера та пензля в mfc-програмах
- •Таблиця 4.3 - Класи графічних об’єктів
- •4.5.4 Рисування стандартних геометричних фігур
- •4.5.5 Приклад програми з векторною графікою
- •4.6 Растрова графіка в mfc-програмах
- •4.7 Програмування діалогу в mfc-програмах
- •4.7.1 Основні етапи створення діалогу в mfc-програмах
- •Таблиця 4.4 - ddx-макроси для найбільш поширених ек
- •4.7.2 Організацію обміну даними з полем введення Edit
- •4.7.3 Організація обміну даними зі списком ListBox
- •4.8 Використання dll-бібліотек в mfc-програмах
- •4.8.1 Призначення бібліотек dll
- •4.8.2 Створення власної бібліотеки dll
- •4.8.3 Підключення функцій бібліотеки dll до виконувального файлу
4.7.3 Організація обміну даними зі списком ListBox
і комбінованим списком ComboBox
Розглянемо введення однорозрядного числа з використанням змінних-властивостей m_sizeдля списку таm_comboдля комбінованого списку категоріїControl. Після першого відображення діалогового вікна на екрані обидва списки мають бути ініціалізовані числами від 2 до 6, причому спочатку має бути показаним другий елемент списку. Далі користувач вибирає один елемент списку, натискає кнопкуOkта закриває діалогове вікно. Результатом обробки вибраного числа повинно бути його виведення через вікно повідомленняMessageBox.
1.Створення власного класу діалогу, похідного від бібліотечного класу CDialog.
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd* pParent = NULL);
enum { IDD = IDD_MATRIXDIALOG };
CListBox m_size;
CComboBox m_combo;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
}; .
2. Ініціалізація ЕК діалогового вікна.
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
int i;
char str[10];
m_combo.AddString("2");
m_combo.AddString("3");
m_combo.AddString("4");
m_combo.AddString("5");
m_combo.AddString("6");
m_combo.SetCurSel(1);
for(i=2; i<7; i++)
{
wsprintf(str,"%d",i);
m_size.AddString(str);
}
m_size.SetCurSel(1);
UpdateData(FALSE);
return TRUE;
} .
3. Організація обміну даними з ЕК діалогового вікна.
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LISTBOX1, m_size);
DDX_Control(pDX, IDC_COMBO1, m_combo);
} .
4. Створення об’єкта власного класу діалогу та його активація.
CMyDialog dialog;
dialog.DoModal(); .
5. Обробка введених користувачем даних в діалоговому вікні.
void CMyDialog::OnOK()
{
m_combo.GetWindowText(s,80);
Number=m_size.GetCurSel();
m_size.GetText(Number,str);
UpdateData(TRUE);
CDialog::OnOK();
} .
6. Використання результатів введених даних.
MessageBox(str,"ListBox");
MessageBox(s,"ComboBox"); .
4.8 Використання dll-бібліотек в mfc-програмах
4.8.1 Призначення бібліотек dll
На відміну від виконувальних файлів формату EXE, динамічно підключувані бібліотеки (DLL), як правило, безпосередньо не виконуються і повідомлень не обробляють. Призначення бібліотекDLL– бути викликаними процесами (тобто програмами в стадії виконання) або іншими бібліотеками в потрібний момент. БібліотекаDLLбере участь в роботі лише тоді, коли викликається одна з її функцій.
Саме тому більшість системних файлів Windows, які мають бути доступними для всіх прикладних та системних процесів, реалізовані у форматіDLL:KERNEL32.DLL,GDI32.DLL,USER32.DLLта інші файли. Необхідно також відмітити, що динамічні бібліотеки не обов’язково містять програмний код. Наприклад, файли шрифтів (типу *.FON) також є динамічними бібліотеками, які містять лише один ресурс – опис шрифтів.
Отже, бібліотеки DLL– це програмний код або дані, які динамічно доступні всім процесам операційної системи.
Кожний процес має свій окремий адресний простір. Коли виникає необхідність роботи з якою-небудь бібліотекою DLL, процес копіює її в свій адресний простір. Однак сама бібліотекаDLLзалишається в одному й тому ж місці фізичної пам’яті. В значній економії пам’яті полягає найважливіша перевага динамічних бібліотек.