Взаємодія Visual C + + і форми CBuilder

У першому прикладі цієї глави ми вивчили основні моменти, що дозволяють використовувати форми CBuilder в додатках MFC Це, звичайно, дуже важливо, але є важливіші завдання, ніж простий висновок форми на екран У нашому теперішньому прикладі ми навчимося здійснювати взаємодію між MFC і формами CBuilder Ми створимо простеньку форму, щось на зразок листка із записника, в яку користувач зможе занести адреса якого-небудь свого

знайомого Додаток MFC створить обєкт, який буде переданий в цю форму, де буде використаний для того, щоб передати інформацію з форми в додаток

Для написання цього додатка нам знову потрібно створити в CBuilder DLL, що містить форму для введення адрес Виконайте це самостоятель але Форма, яку ви повинні створити, показана на рис 123 Коли ви закінчите з цим, ми перейдемо до наступного етапу – додаванню даних в додаток MFC

Рис 123 Форма для введення адреси

Перше, що нам треба зробити в додатку, – це додати обгортковий функцію для DLL, яка дозволить нам створити форму Давайте спочатку подивимося на код, а потім обговоримо деякі цікаві моменти, які в ньому зустрінуться:

extern &quotC&quot

{

void WINAPI __declspec(dllexport) CreateAddressForm(TAddress *pObject)

{

/ / Спочатку створюємо форму

TForm1 *pForm = new TForm1(NULL)

/ / Отримуємо дані від користувача

pForm-&gtShowModal()

/ / Передаємо дані назад у структуру

pObject-&gtSetLastName(  pForm-&gtEdit1-&gtTextc_str()) pObject-&gtSetFirstName(  pForm-&gtEdit2-&gtTextc_str()) pObject-&gtSetAddress1(  pForm-&gtEdit3-&gtTextc_str()) pObject-&gtSetAddress2(  pForm-&gtEdit4-&gtTextc_str()) pObject-&gtSetCity(  pForm-&gtEdit5-&gtTextc_str()) pObject-&gtSetState(  pForm-&gtEdit6-&gtTextc_str()) pObject-&gtSetZipCode(  pForm-&gtEdit7-&gtTextc_str())

}

} / / Кінець блоку extern C

Перше, що кидається в очі, – тут ми знову створюємо обгортковий функцію, використовуючи оголошення extern &quotC&quot, З тим щоб цю функцію можна було викликати з MFC Але на цей раз у функції є аргумент, який представляє обєкт, створений у MFC для зберігання даних, введених користувачем у форму Давайте подивимося на цей обєкт, який, до речі, вам доведеться додати в новий файл з імям Addressh Цей файл і буде використовуватися в додатку MFC для здійснення передачі даних:

#ifndef _ADDRESS_H_

#define _ADDRESS_H_ class TAddress

{

char strLastName[80] char strFirstName[80] char strAddress1[80] char strAddress2[80] char strCity[40]

char strState[4]

char strZipCode[10] public: TAddress(void)

{

}

~TAddress(void)

{

}

const char *GetLastName(void)

{

return strLastName

}

const char *GetFirstName(void)

{

return strFirstName

}

const char *GetAddress1(void)

{

return strAddress1

}

const char *GetAddress2(void)

{

return strAddress2

}

const char *GetCity(void)

{

return strCity

}

const char *GetState(void)

{

return strState

}

const char *GetZipCode(void)

{

return strZipCode

}

void SetLastName( const char *strLast )

{

strncpy( strLastName, strLast, 80 )

}

void SetFirstName( const char *strFirst )

{

strncpy( strFirstName, strFirst, 80 )

}

void SetAddress1( const char *strAdd1 )

{

strncpy(strAddress1,  strAdd1,80)

}

void SetAddress2( const char *strAdd2 )

{

strncpy(strAddress2,  strAdd2,80)

}

void SetCity( const char *strC )

{

strncpy(strCity,  strCity,40)

}

void SetState( const char *strSt )

{

strncpy(strState, strSt,4)

}

void SetZipCode( const char *strZip )

{

strncpy(strZipCode, strZip, 10)

}

}

#endif

Як ви бачите, це простий обєкт C + +, призначений для зберігання інформації з нашої записної книжки Використовуючи стандартний обєкт C + +, ми полегшуємо завдання приєднання DLL до додатка MFC Код в обгорткового функції визначає частини обєкта-адреси за допомогою виклику функцій класу, так що нам не треба хвилюватися про вирівнювання або визначенні обєкта Ми довіряємо

обєкту зберігання інформації в тому вигляді, в якому йому треба, для того щоб вона сприймалася

Visual C + + і MFC

І останнє зауваження: вам треба підключити заголовний файл Addressh до вихідного файлу

projectcpp з тим, щоб опис класу TAddress було доступно компілятору Як ви бачите,

«Форвардна» опис обгорткового функції міститься в кінці заголовного файлу – для потреб додатка Visual C + +

Та частина роботи, яка була повязана з CBuilder, завершена, і тепер нам треба створити додаток Visual C + + для використання обгорткового функції DLL Отже, за допомогою Майстра додатків створіть просте додаток, назвіть його MfcBcbTest і виберіть для нього тип однодокументним інтерфейсу

В клас CMainFrame додайте обробник для пункту меню Файл д Новий Скористайтеся радою Майстри класів, назвіть цей обробник OnFileNew Тепер в методOnFileNew класу CMainFrame додайте наступні рядки:

void  CMainFrame::OnFileNew()

{

TAddress *pAddress = new TAddress CreateAddressForm(pAddress)

MessageBox (pAddress-> GetLastName (), Прізвище, MB_OK)

}

Як видно з цього коду, ми створюємо новий екземпляр класу TAdress (Заголовний файл для нього ви повинні додати до вихідного файлу mainfrmcpp) Цей обєкт грає роль інтерфейсу між додатком MFC і DLL CBuilder Після того як обєкт створений, ми передаємо покажчик на нього в обгортковий функцію, прототип якої був описаний в заголовному файлі Addressh Функція викликається, і наша форма відображається у вигляді модального діалогу Коли користувач натискає кнопку OK, форма закривається і обєкт повертається додатком MFC Щоб упевнитися в тому, що дані були передані коректно, ми після повернення управління від функції відображаємо на екрані вікно повідомлення, що містить прізвище, введену користувачем у форму

Ось і все Тепер ви знаєте, що потрібно для передачі даних між формою CBuilder і додатком MFC – насправді, не так вже й багато всього

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*