In diesem Kapitel zeigen wir die Einbindung des
Internet
Explorer Webbrowsers in eigene VC++-Anwendungen.
Die MFC bietet hierzu die Klasse CHtmlView.
Zur Übung beginnen wir einfach ein neues Projekt:
Voraussetzung ist, dass der MS Internet Explorer auf dem entsprechenden PC installiert ist.
Wir erstellen mit dem Assistenten (MFC-Anwendungs-Assistent (exe)) ein Projekt mit Namen "MyBrowser".
Wenn Sie diese Anwendung "MyBrowser" nun kompilieren
und starten,
erhalten Sie untenstehendes Fenster und evtl. eine
Aufforderung zur DFÜ-Verbindung:
Abb. 8.1: MyBrowser will ins Internet
Gewähren Sie unserem Programm keinen Internetzugang, dann beschwert es sich wie folgt:
Abb. 8.2: MyBrowser funktioniert ohne Internetzugang noch nicht
Sollten Sie so großzügig sein, und
eine
Internet-Verbindung zulassen,
so verbindet Sie unser Programm mit der
MS-VisualC++-Seite.
Die Verbindung zum weltweiten Netz ist also ein Kinderspiel. Das Programm "MyBrowser" erfüllt jedoch nicht unsere gehobenen Anforderungen. Wir können z.B. nicht direkt die gewünschte URL eingeben, sondern uns nur per Mausklicks über eingebaute Links weiterbewegen. Also benötigen wir zumindest ein entsprechendes Eingabefeld.
Wir wechseln zu den Ressourcen.
Im Ressourcen-Editor steigen wir ein über die
Auswahl
MyBrowser Ressourcen -> Dialog
-> IDR MAINFRAME
und können nun das Layout der Dialogleiste
direkt im Ressourcen-Editor entwerfen.
Diese Dialogleiste ist sozusagen die zweite
"Symbolleiste"
unseres Browsers.
Dort befindet sich als Vorgabe folgendes statische
Textfeld:
Abb. 8.4: Die Dialogressource IDR MAINFRAME enthält standardisiert obiges Textfeld
Ändern Sie den Titel dieses IDC_STATIC bitte
um auf "Webseitenadresse"
und verkürzen Sie bitte die Länge des
Feldes,
damit wir rechts daneben das angestrebte Eingabefeld
positionieren können.
Als ID dieses Edit-Feldes wählen Sie bitte
IDC_URL.
Nach dem Kompilieren / Starten sieht unsere Anwendung nun folgendermaßen aus:
Abb. 8.5: Die Dialogressource IDR MAINFRAME hat ein zusätzliches Eingabefeld erhalten
Jetzt fehlt noch die Verbindung zwischen der
Eingabe
der Webseitenadresse
und dem in unserem Browser abgebildeten Inhalt.
Hierzu verwenden wir direkt unsere MFC-Klasse
CMainFrame.
Damit der folgende Code akzeptiert wird,
müssen
wir zunächst
die entsprechenden Header in MainFrm.cpp einbinden:
#include "stdafx.h"
#include "MyBrowser.h"
#include "MainFrm.h"
#include
"MyBrowserDoc.h"
#include
"MyBrowserView.h"
Wir fügen jetzt eine neue Member-Funktion
hinzu,
die unsere Eingabe in die neu anzusteuernde Webseite verwandelt.
Nennen Sie diese Funktion z.B. void
CMainFrame::OnNewURL().
Den Zugriff setzen wir auf public:
Abb. 8.6: Wir fügen eine neue Member-Funktion in die Klasse CMainFrame ein
Bitte fügen Sie in diese neue
Member-Funktion
folgenden Programmcode ein:
CView* pView = GetActiveView();
CMyBrowserView* pMyView = (CMyBrowserView*) pView;
pMyView -> Navigate(strURL);
}
Mittels m_wndDlgBar.GetDlgItem(IDC_URL) greifen
wir
auf die Edit-Box IDC_URL zu.
Wir transferieren nun mit der Funktion
GetWindowText(...)
unsere Eingabe aus der Edit-Box in den CString strURL.
GetActiveView() ist eine Member-Funktion von
CFrameWnd
und liefert einen Zeiger vom Typ CView* zurück.
Diesen müssen wir im vorstehenden Code in einen
Zeiger auf unsere von CHtmlView-Klasse abgeleitete Klasse
CMyBrowserView umwandeln. Damit können wir
dann Navigate() sinnvoll nutzen.
Wir übergeben den String für die URL
dieser
Funktion CHtmlView::Navigate(...).
Die vollständige Funktionsbeschreibung lautet
übrigens:
void CHtmlView::Navigate
(
LPCTSTR URL,
DWORD
dwFlags
= 0,
LPCTSTR lpszTargetFrameName
= NULL,
LPCTSTR lpszHeaders
= NULL,
LPVOID
lpvPostData =
NULL,
DWORD
dwPostDataLen = 0
);
Wie Sie sehen, sind die meisten Parameter bereits
konfiguriert, so dass man hier nur die URL als LPCTSTR übergeben
muß.
Interessant ist z.B. der zweite Parameter dwFlags.
Wenn wir diesen z.B. auf "NavOpenInNewWindow" setzen, wird ein neues
Fenster
geöffnet.
Eine "Kleinigkeit" müssen wir unbedingt noch manuell erledigen:
In MainFrm.cpp tragen wir noch folgendes in der Message-Map hinter dem Bereich des Assistenten ein:
//{{AFX_MSG_MAP(CMainFrame)
...
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_COMMAND(IDOK, OnNewURL) // manuell hinzugefügt
END_MESSAGE_MAP()
Damit schaffen wir die wichtige Verbindung
zwischen
der Entertaste (führt zu IDOK) nach der Eingabe
der URL in die Edit-Box und unserer Funktion
OnNewURL().
Ansonsten würde diese nie gestartet werden.
Viel Spaß! Testen Sie nun Ihre Lieblings-Websites mit Ihrem eigenen Browser (Mit InternetExplorer im Hintergrund).
...
Was Sie möchten noch mehr? Ok, ok ...
Also schauen wir weiter:
Zunächst zur Start-Website beim
Hochfahren.
Wo steht diese Seite eigentlich?
Suchen Sie in der View. Dort findet man:
void CMyBrowserView::OnInitialUpdate()
{
CHtmlView::OnInitialUpdate();
// ZU ERLEDIGEN:
Dieser
Code führt Sie zu einem beliebten Anlaufpunkt im Web.
// Ändern Sie
den Code, um an einen gewünschten Punkt zu gelangen.
Navigate2(_T("http://www.microsoft.com/visualc/"),NULL,NULL);
}
Beliebter Anlaufpunkt im Web? Ob MS da
nicht etwas übertreibt?
Auf jeden Fall wissen wir jetzt, wieso
wir beim Start auf http://www.microsoft.com/visualc/
geführt werden.
An dieser Stelle können Sie nun Ihre
Lieblings-Startseite eintragen.
Der aufmerksame Betrachter fragt sich
hier
sicher, was der Unterschied zwischen Navigate() und Navigate2() ist.
Navigate() dient zum Ansteuern von URL's.
Bei Navigate2() findet man darüber hinaus:
Call this member function to
navigate
to the resource identified by a URL,
or to the file identified by a full
path. This member function extends the Navigate member function by
supporting
browsing on special folders, such as Desktop and My Computer,
that are represented by the parameter
pIDL.
Zurueck
zum Inhaltsverzeichnis