| René Nyffenegger's collection of things on the web | |
|
René Nyffenegger on Oracle - Most wanted - Feedback
|
Programming the MSHTML Web Browser Control with C++ | ||
|
It is possible to render HTML in an ordinary Windows program with MSHTML. This makes it possible to have a web look and feel in
a program. Because I think this is quite interesting, I decided to write some C++ classes that make it
possible to use MSHTML in an easy way. I found some ideas on how to do that with
Embed an HTML Control in your own window using plain C.
Test program
This test programm displays a simple HTML document in a window. The HTML
document consists of three links. These links are fully operational.
MSHTMLTest.cpp
#include <windows.h>
#include "HTMLWindow.h"
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE /*unused__*/, LPSTR /*lpszCmdLine*/, int /*nCmdShow*/) {
HTMLWindow* html_window = new HTMLWindow (
// Parameter html_or_url:
"<html><head>"
"<title>MSHTMLTest</title>" // seems a little useless in this context
"</head><body>"
"<h1>This is a test</h1>"
"I offer the following links:"
"<ul>"
"<li><a href='http://www.google.com'>www.google.com</a>"
"<li><a href='http://www.adp-gmbh.ch'>www.adp-gmbh.ch</a>"
"<li><a href='http://www.yahoo.com'>www.yahoo.com</a>"
"</ul>"
"</body></html>",
// Parameter title
"MSHTMLTest",
hInstance,
false // indicates: this not an url, but html
);
MSG msg;
while (GetMessage(&msg, 0, 0, 0)) {
TranslateMessage(&msg);
if (msg.message >= WM_KEYFIRST &&
msg.message <= WM_KEYLAST) {
::SendMessage(html_window->hwnd_, msg.message, msg.wParam, msg.lParam);
}
DispatchMessage(&msg);
}
return 0;
}
Displaying an HTML document
The following program displayes an URL. So, it can be called like:
DisplayHTML.exe www.your-favorite-url.zzz
If the URL happens to be an HTML file on the harddisk, call it like so:
DisplayHTML.exe file://c:/path/to/your/document.html DisplayHTML.cpp
#include <windows.h>
#include "HTMLWindow.h"
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) {
if (__argc < 2) {
::MessageBox(0, "DisplayHTML.exe html-document", "Specify HTML document to be displayed", 0);
return -1;
}
HTMLWindow* html_window = new HTMLWindow (
__argv[1],
"DisplayHTML",
hInstance,
true // it is an url
);
MSG msg;
while (GetMessage(&msg, 0, 0, 0)) {
TranslateMessage(&msg);
if (msg.message >= WM_KEYFIRST &&
msg.message <= WM_KEYLAST) {
::SendMessage(html_window->hwnd_, msg.message, msg.wParam, msg.lParam);
}
DispatchMessage(&msg);
}
return 0;
}
Downloading MSHTMLTest
The sources (including makefile) as well as the exes can be downloaded here: MSHTMLTest. I compiled it with the
mingw compiler.
|