Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual2.doc
Скачиваний:
5
Добавлен:
07.03.2016
Размер:
3.31 Mб
Скачать

Розділ 11. Програмування для інтернет

11.1. Створення броузера

Приклад знаходиться у папці DISK\Internet\browser.

Написати свій власний браузер на Visual C++ не складно. Справа в тому, що Microsoft Internet Explorer, який застосовується в якості базової програми для роботи з довідковою системою Visual C++, може використовуватися в програмах як елемент керування.

Щоб вивести сторінку Microsoft в Web-броузері, досить включити в програму елемент Microsoft Web Browser, створити для нього відповідний об'єкт і викликати метод Navigate().

Для цього необхідно перш за все створити нову програму на базі діалогового вікна. Дамо їй назву browser. Далі необхідно виконати наступні дії:

1. Виконати команду ProjectAdd to ProjectComponents and Controls – відкривається вікно з колекцією компонентів і елементів керування Visual C++, Components and Controls Gallery.

2. Двічі клацнути на рядку Registered ActiveX Controls, щоб відкрити список елементів ActiveX, зареєстрованих операційній системі (рис. 11.1).

3. У списку компонентів повинен бути присутнім елемент Microsoft Web Browser Control (рис. 11.1). Клацніть його, потім натисніть кнопку Insert.

Рис. 11.1. Колекція компонентів і елементів Visual C++

4. Visual C++ запитує, який клас слід створити для нового елемента; підтвердіть ім'я за замовчуванням CWebBrowser (Visual C++ може запропонувати ім'я CWebBrowser2 в залежності від особливостей установки Internet Explorer на вашому комп'ютері). Елемент броузера з'являється на панелі редактора діалогових вікон.

5. Відкрийте головне діалогове вікно в редакторі діалогових вікон (рис. 11.2). Елемент броузера знаходиться в нижній частині палітри.

6. Перетягніть елемент в діалогове вікно і відрегулюйте його розміри відповідно до рис. 11.2. Новому елементу присвоюється ідентифікатор IDC_EXPLORER1.

7. За допомогою Class Wizard зв'яжіть з цим елементом змінну і надайте їй ім'я m_browser.

8. Крім того, розмістіть в діалоговому вікні кнопку Browse та зв'яжіть з нею обробник OnButton1().

9. При натисканні кнопки Browse() наш броузер повинен звернутися за адресою: http://www.microsoft.com. Для цього ми скористаємося методом Navigate():

void CBrowserDlg::OnButton1()

{

m_browser.Navigate("http://www.microsoft.com", 0, 0, 0, 0);

}

10. На останньому етапі запустимо програму (рис. 11.3) і натиснимо кнопку Browse.

Рис. 11.2. Проектування діалогового вікна для броузера

Підказка. В універсальній версії цієї програми користувач повинен мати можливість ввести потрібну адресу в комбінованому або текстовому полі, але з іншого боку, це може бути небажаним, якщо ви хочете обмежити його переглядом тільки однієї Web-сторінки.

Рис. 11.3. Броузер з Web-сторінкою "http://www.microsoft.com"

11. При натисканні кнопки Browse програма переходить до основної сторінки Microsoft (рис. 11.3). Наш повноцінний броузер працює – в ньому можна користуватися гіперпосиланнями та іншими можливостями WWW, які підтримуються в Internet Explorer.

Підказка. Ви можете скористатися і іншими методами елемента Microsoft Web Browser, наприклад, GoHome() або GoBack(), призначеними для роботи зі списком переглянутих адресів.

Оригінальний текст прикладу міститься у файлах browserDlg.h / browserDlg.cpp.

browserDlg.h і browserDlg.cpp

// browserDlg.h : заголовочний файл

//

//{{AFX_INCLUDES()

#include "webbrowser.h"

//}}AFX_INCLUDES

#if !defined(AFX_BR0WSERDLG_H__093DA507_9868_11D0_8860_444553540000__INCLUDED_)

#define AFX_BR0WSERDLG_H__093DA507_9868_11D0_8860_444553540000__INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

/////////////////////////////////////////////////////////////////////////

// Діалогове вікно CBrowserDlg

class CBrowserDlg : public CDialog

{

// Конструювання

public:

CBrowserDlg(CWnd* pParent = NULL);

// Стандартний конструктор

// Дані діалогового вікна

//{{AFX_DATA(CBrowserDlg)

enum { IDD = IDD_BR0WSER_DIAL0G };

CWebBrowser m_browser;

//}}AFX_DATA

// Перевантаження

// Перевантажені віртуальні функції,

// сформовані ClassWizard-ом.

//{{AFX_VIRTUAL(CBrowserDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX);

// Підтримка DDX/DDV

//}}AFX_VIRTUAL

// Реалізація

protected:

HICON m_hIcon;

// Сформовані функції карти повідомлень

//{{AFX_MSG(CBrowserDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnButton1();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_L0CATION}}

// Microsoft Visual C++ буде вставляти додаткові

// оголошення перед попереднім рядком.

#endif

// !defined(AFX_BR0WSERDLG_H__093DA507_9868_

// 11D0_8860_444553540000__INCLUDED_)

// browserDlg.cpp : файл реалізації

//

#include "stdafx.h"

#include "browser.h"

#include "browserDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////

// Діалогове вікно CAboutDlg, що виводиться по команді About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Данні діалогового вікна

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// Перевантаження

// Перевантажені віртуальні функції,

// сформовані ClassWizard-ом.

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX);

// Поддержка DDX/DDV

//}}AFX_VIRTUAL

// Реалізація

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// Обробники повідомлень відсутні

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////

// Діалогове вікно CBrowserDlg

CBrowserDlg::CBrowserDlg(CWnd* pParent /*=NULL*/)

: CDialog(CBrowserDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CBrowserDlg)

// УВАГА: тут ClassWizard ініциалізує дані класа

//}}AFX_DATA_INIT

// Зверніть увагу на те, що в Win32 LoadIcon

// не потребує наступного виклика DestroyIcon

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CBrowserDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CBrowserDlg)

DDX_Control(pDX, IDC_EXPLORER1, m_browser);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CBrowserDlg, CDialog)

//{{AFX_MSG_MAP(CBrowserDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, OnButton1)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////

// Обробники повідомлень CBrowserDlg

BOOL CBrowserDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Додати команду "About..." в системне меню.

// Значення IDM_ABOUTBOX повинне знаходитись в діапазоні

// системних команд.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(

MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Поставити значок для діалогового вікна. Бібліотека

// робить це автоматично, якщо головне вікно програми

// не є діалоговим.

SetIcon(m_hIcon, TRUE); // Встановити великий значок

SetIcon(m_hIcon, FALSE); // Встановити малий значок

// ЗРОБИТИ: додайте додаткову ініціалізацію

return TRUE; // повернути TRUE, якщо тільки ви

// не передаєте фокус елементу

}

void CBrowserDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// Якщо в діалоговому вікні є кнопка згортання, наведений

// нижче код знадобиться для малювання значка. У додатках MFC,

// які використовують модель документ / вид, це робиться

// автоматично.

void CBrowserDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // контекст пристрою для

// малювання

SendMessage(WM_ICONERASEBKGND,

(WPARAM) dc.GetSafeHdc(), 0);

// Вивести значок в центрі клієнтського

// прямокутника

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Намалювати значок

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// Викликається системою для отримання вказівки,

// відображаємого при перетаскуванні згорнутого вікна.

HCURSOR CBrowserDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CBrowserDlg::OnButton1()

{

// ЗРОБИТИ: додайте код для обробки повідомлень

// від елемента

m_browser.Navigate("http://www.microsoft.com", 0,0,0,0);

}

Керуючий елемент Web Browser дозволяє легко і швидко створювати броузери (якщо на комп'ютері користувача встановлено Internet Explorer). Visual C++ надає й інші можливості для роботи в Інтернеті, в яких цей елемент взагалі не застосовується. Замість нього використовується підтримка WinInet, що з'явилася в Visual C++, починаючи з версії 5.0. Ми познайомимося з нею ближче під час вивчення програмного використання протоколу HTTP.

11.2. Підтримка Internet у Visual C++

Класи WinInet дозволяють розробникам використовувати для створення Internet-додатків виклики функцій високого рівня, що виконують велику частину роботи. Таким чином, процес створення Internet-додатка практично нічім не відрізняється від процесу створення будь-якого іншого додатку MFC. Класи WinInet дозволяють розробникам вибрати той рівень абстракції, який необхідній для їх програми: вони можуть скористатися невеликим набором стандартних функцій або провести низькорівневе налаштування з'єднання. Основні класи WinInet наведено в табл. 11.1.

Таблиця 11.1

Основні класи WinInet

Клас

Опис

CInternetSession

Створює сеанс Internet і управляє ним. Всі додатки, які використовують WinInet перед тим, як створити об'єкт будь-якого іншого класу WinInet, повинні створити об'єкт класу CInternetSession

CInternetConnection

Створює з'єднання Internet і управляє ним. Цей клас є базовим для класів CFtpConnection, CGopherConnection і CHttpConnection

CFtpConnection

Створює з'єднання FTP і управляє ним

CGopherConnection

Створює з'єднання gopher і керує ним

CHttpConnection

Створює з'єднання HTTP і керує ним

CInternetFile

Дозволяє віддалений доступ до файлів на сервері Internet. Цей клас є базовим для класів CGopherFile і CHttpFile

CGopherFile

Управляє обміном інформації з файлом на сервері gopher

CHttpFile

Управляє обміном інформації з файлом на сервері HTTP

CFileFind

Дозволяє програмі проводити пошук файлів. Цей клас є базовим для класів CFtpFileFind і CGopherFileFind

CFtpFileFind

Дозволяє програмі проводити пошук файлів на сервері FTP

CGopherFileFind

Дозволяє програмі проводити пошук файлів на сервері gopher

CGopherLocator

Дозволяє отримати локатор з сервера gopher

СInternetException

Обробляє виключення, викликані іншимі класами WinInet

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]