Eigener Internet Browser (Tutorial)

Allwissend

Gesperrt
In diesem Tutorial zeig ich euch wie man mit Hilfe einer MFC-Anwendung einen Internet-Browser programmiert!

Workshop: Einen Internet-Browser programmieren
Von Allwissend


Welcome...


Heute werden wir uns an einen Internet-Browser machen. Dieser wird das Laden von Internetseiten ermöglichen, sowie das Anzeigen des Inhalts der Festplatte (HTML- basierend)...


Falls Sie jetzt denken, dass das Programmieren eines Internet- Browsers uns mehrere Stunden kosten könnte, haben Sie sich gewaltig geirrt. Unser Programm wird auf der Basisklasse CHtmlView basieren, diese wird uns einige Methoden zur Verfügung stellen, die uns das Laden von HTMLs deutlich vereinfachen werden.


Info: Die Klasse stammt übrigens aus dem Internet Explorer, d.h. dieser muss für die Ausführung unseres Programms installiert sein. Dies soll uns aber kein Hindernis darstellen, da sich dieser (neben dem Netscape Comunicator) sowieso auf fast jedem Computer mit Internetverbindung befindet. Außerdem, wer würde ihren Internet-Browser schon neben dem schon installierten Internet Explorer benutzen ? Vielmehr sollte es Ihr Ziel sein, dem Browser ein paar Goodies zu spendieren. Wie wär’s denn mir einem Nuker? Oder vielleicht ein kleines Sub-Programm, mit dem sich die IP Adresse manipulieren lässt. So würden Sie dem Benutzer einen Grund geben, Ihr Programm neben dem Internet Explorer zu benutzen. – Viel Spaß beim designen...


OK, jetzt an die Arbeit...


Starten sie Visual C++ und legen sie ein neues Projekt an. Sie sollten folgende Einstellungen vornehmen:


Wählen sie die MFC Anwendung aus und geben Sie den Projektnamen ein
Wählen sie die SDI Anwendung mit Doc/View Unterstützung
Belassen sie hier die Voreinstellungen (keine Datenbankunterstützung)
Selektieren sie hier nur die ActiveX- Steuerelemente
Belassen sie hier die Voreinstellungen, sofern Sie keine Änderungen an der Darstellung des Fenster vornehmen wollen.
-||-
Wählen sie hier CHtmlView anstatt CView
Nun werfen wir mal einen Blick auf den Quellcode, den uns der Assistent vorbereitet hat. – Dem Assistenten sei Dank ! Ohne unser Zutun kann unser Programm einen vorgegebene Startseite laden. Diese finden Sie in der Funktion OnInitialUpdate():


Code:
Navigate2(_T(’’http://www.microsoft.com/visualc/’’), 

NULL, NULL);


Sie können die URL der Startseite einfach durch eine andere ersetzten (z.B. http://www.tutorials.de) oder einfach den Eintrag löschen, um das Laden einer Startseite zu unterbinden.


Natürlich wollen wir unserem Anwender die Möglichkeit geben, selbst eine URL einzugeben. Hierfür setzen wir eine DialogBar unter das Menü, in das der Anwender seine gewünschte URL eingeben kann(diese kennen sie wahrscheinlich schon aus anderen Browsern). Fügen sie die Dialogvorlage IDD_DIALOGBAR ein. Überprüfen sie, ob folgende Einstellungen für den Dialog vorliegen:


Unter Formate: Stil: Untergeordnet

Rand: Keine

(Alle anderen Felder sollten deaktiviert sein.)


Nun werden wir die Steuerelemente unterbringen, die der Anwenderfür die Eingabe der URL braucht. Als erstes müssen Sie ein Edit- Steuerelement einfügen, in das der Anwender die eigentliche URL eingibt. Um später diese anfordern zu können, brauchen wir das Steuerelement Button, das beim Drücken der Eingabetaste aktiviert wird (Eigenschaften: Standardschaltfläche). Der hinterlegte Code wird das Edit- Steuerelement abfragen und mit Hilfe der Nevigate2() Funktion die eingegebene Page laden und anzeigen.

Jetzt werden wir erst mal den Code für das Anzeigen der DialogBar schreiben. Zuerst müssen wir in der Hauptfensterklasse CMainFrame eine Elementvariable für die DialogBar deklarieren:

Code:
class CMainFrame : public CFrameWnd 

{ 

... 

public: 

CDialogBar m_wndDialogBar; 

... 

}


Mit der eben deklarierten Variable können wir jetzt Create() aufrufen. Dies sollten wir in der CMainFrame Methode OnCrearte tun:


Code:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

{ 

... 

m_wndDialogBar.Create(this, IDD_DIALOGBAR, CBRS_TOP, 1); 

... 

}

Dieser Code bewirkt letztendlich das Laden der DialogBar. Der dritte Flag der Funktion Create() bestimmt die Ausrichtung des Dialogs:


CBRS_TOP//Oben am Fenster ausrichten

CBRS_LEFT//Links am Fenster ausrichten

CBRS_RIGHT//Rechts am Fenster ausrichten

CBRS_BOTTOM//Unten am Fenster ausrichten


Jetzt müssen wir nur noch den Code für das Anfordern der URL schreiben. Wir werden dafür die Funktion OnRequest() einrichten.


Deklaration in der Header- Datei von CHtmlView:


Code:
class CBrowserView : public CHtmlView 

{ 

... 

protected: 

afx_msg void OnRequest();  

... 

}


Nun werden wir noch die Nachrichtenhandler Tabelle in der Ansichtsklasse erweiten, so das beim Drücken des Button- Steuerelements (IDC_BUTTON1) die Funktion aufgerufen wird:


BEGIN_MESSAGE_MAP(CBrowserView, CHtmlView)

ON_COMMAND(IDC_BUTTON1, OnRequest)

...


Nun zu eigentlichen Funktion...


Code:
void CInternetBrowserView::OnRequest() 

{ 

CInternetBrowserDoc* pDoc = GetDocument(); 

ASSERT_VALID(pDoc); 

CString str; 

CWnd&rBar=((CMainFrame*)AfxGetApp()->m_pMainWnd) 

->m_wndDialogBar; 


rBar.GetDlgItemText(IDC_EDIT1, str); 

Navigate2(str, 0, NULL); 

}


Diese Funktion sollte neben dem oben aufgeführten Schnickschnack leicht zu verstehen sein. Zuerst wird das Edit- Steuerelement durch GetDlgItemText()abgefragt und dessen Inhalt im String str gespeichert. Danach wird mit der Methode Navigate2() zu diesem String navigiert(der String wird dann als URL angesehen).


So, jetzt kommen wir zum Offline- Teil. Das Einzige was es hier zu sagen gibt ist, dass Sie der Navigate2() Methode auch Directories (o.a. Dirs) wie ‚C:/Programme/VisualC++6’ übergeben können. Nach der Eingabe wird sich ein weiteres Fenster, wie sie es aus dem Arbeitsbereich kennen, öffnen. Nun sollten Sie ihrem Anwender aber keine veralteten MS-DOS Manieren aufzwängen. Bauen sie ihrem Programm ein paar Goodies ein, die es dem Anwender vereinfachen in seiner Festplatte zu stöbern. Übrigens sind diese Fenster vollkommen Drag ’n’ Drop kompatibel. D.h. Sie können es dem Anwender auch ermöglichen, Dateien auf einen anderen Datenträger zu spielen. Zu diesen gehören neben Disketten usw. natürlich auch die FTP- Server !


So, bis jetzt haben Sie schon einen hübschen Browser gebastelt. Ich werde Ihnen jetzt noch zeigen, wie man mit Hilfe des Standartdialogs CFileDialog HTML- Dateien von der Festplatte lädt, sowie den Gebrauch von ein paar anderen nützlichen Funktionen.


Zuerst müssen wir die Nachrichtenbehandlungsmethode für ID_FILE_OPEN einrichten. Diese Methode wird den Standard ‚Öffnen- Dialog’ anzeigen, wobei Sie diesen schon aus anderen Programmen kennen werden. Wir werden diesem Dialog noch einen HTML- Dateifilter einbauen so, dass der Anwender nur HTML- Dateien im Directorysehen kann oder alle Dateien(*.*), einschließlich der versteckten. Die Methode sieht dann folgendermaßen aus:


Code:
void CInternetBrowserView::OnFileOpen()  

{ 

CFileDialog oeffnenDlg(true, NULL, NULL, OFN_HIDEREADONLY, "HTML-Dateien | *.htm; *.html | Alle Dateien | *.* ||"); 


if (oeffnenDlg.DoModal() == IDOK) 

{ 

Navigate2(oeffnenDlg.GetPathName(), 0, NULL); 

} 

}


Hier können Sie gut sehen, wie man einen Dateifilter anlegt. Experimentieren sie ein bisschen mit ihnen, um den Dreh rauszukriegen. In der folgenden ‚if’- Abfrage wird getestet, ob die Methode DoModal() IDOKzurückgibt, d.h. ob der CFileDialog erstellt werden konnte. Ist dies der Fall, wird mit GetPathName() die Adresse ermittelt und die jeweilige Datei geladen.


Hier haben Sie noch einige leicht zu benutzende Methoden der Klasse CHtmlView, die Sie in ihren Browser einbauen sollten:


GoBack();//Springt zur vorherigen Datei

GoForward();//Springt zur nächsten

GoHome();//Navigiert zu Startseite

GoSearch();//Startet eine Suche




Allwissend


Begriffe:


HTML:

Dateiformat; auf diesem Dateiformat basieren z.B. Internetseiten.


Nuker:

Ein kleines Programm, das es ihnen erlaubt, ein Opfer, wenn sie dessen IP Adresse kennen, zu nuken. Das heißt sie bringen im besten Fall seinen Computer zu Absturz. ;-)


IP Adresse:

Jeder Computer, der mit dem Internet verbunden ist, bekommt eine IP Adresse zugewiesen. Diese wird z.B. benötigt, um Downloads durchzuführen, da man ja eine Adresse für das Ziel (Sie) des Download braucht.


URL:

Einen Internetadresse wie http://www.tutorials.de


Drag ’n’ Drop:

Das visuelle Verschieben von Dateien o.ä. indem man nur den visuellen Ordner einfach in einen anderen zieht.

Autor des Tutorials: Daniel Deischel
 
Zuletzt bearbeitet:
Das solltest du vielleicht in die Tutorial-Inbox posten und nicht hier! Dann wirds sicher auch bei den Tutorials veröffentlicht.

greetz
daddz
 
Weiß Daniel Deischl von diesem Tut-Raub ? Schreib wenigstens seinen Namen drunter .. er hats als Autor verdient genannt zu werden ..
 
Also eins vorweg, ich hab dein Tutorial nicht ganz durchgelesen, nur überflogen.
Aber das ist eigentlich kein "Eigener Internet Browser" sondern ist hald nur eine Klasse, die den Internetexplorer in einem Fenster darstellt.
Denn einen eigenen Browser zu programmieren ist nicht gerade einfach, denn man muss eine vernünftig schnelle Renderingengine hinbekommen.

Ich will da keineswegs dein Tutorial anzweifeln, nur is der Titel vielleicht etwas falsch gewählt.

Daniel
 
Toll, aber mich würde viel mehr interessieren, wie man die HTML Ausgaben einfach ohne viel drum und dran in eine Variable speichert, satt immer dieses MFC verwenden.
 
Zurück