Fog Creek Software
Discussion Board




HTML rendering control

Does anyone know of a control that could be embedded into an MFC app that just renders HTML (and javascript)?

I've been experimenting with the Browser control, but I really want something where I can:
1) Feed the HTML directly as a string
2) Retrieve the post data when submit is clicked
3) Run on a machine without TCP/IP installed

Also, the app will not install to the target machines, and cannot update any dlls on the system, so it's hard to depend on the IE dlls, as they might be too old for the app.

The reason for the app is that our customers create surveys for the Web.  We use Perl to render the HTML.  We want our users to not only create surveys for the web, but also want them to distribute the same survey on a disk or CD.  Since average Joe User doesn't run a web server (or maybe he does, which can cause conflicts), doesn't have the latest IE, or perhaps doesn't even have TCP/IP installed, we need to be independent of these issues.

Know of anything in that arena?

Walt
Tuesday, February 03, 2004

It's not what you were asking, but I seem to recall evaluating an installer for Windows applications (I don't remember the name off the top of my head, and a quick Google didn't turn it up) that created a virtual machine inside a standalone .exe.  Since you're distributing on CD, that might be another option.  I think it was in the range of $750 per developer seat.

Sorry, I don't know of any rendering controls.  You might be able to embed Opera or something similar, but that's probably even more expensive.

Sam Livingston-Gray
Tuesday, February 03, 2004

Since the original posting, I've heard of htmllite.dll from Microsoft, but it is not-redistributable and doesn't have a full implementation (like it doesn't support tables).

I have also learned of QHTM, but as yet I don't think it supports Javascript (which I forgot to mention).

Walt
Tuesday, February 03, 2004

"Run on a machine without TCP/IP installed"

That's really a requirement? Then good luck... HTTP is built on TCP/IP. You could, in theory, emulate everything without using HTTP, but I doubt any third party product will do that.

Brad Wilson (dotnetguy.techieswithcats.com)
Tuesday, February 03, 2004

I know that the Mozilla people (or maybe somebody else?) is/was working on an embeddable HTML rendering control based on Gecko's rendering engine.

Never used it, but it's one direction you might want to explore.  I imagine it *doesn't* rely on lots of Microsoft DLLs, for one thing...

John Rose
Tuesday, February 03, 2004

Brad,

Well, he did ask for HTML, not HTTP. The two are not synonomous, and it's not unreasonable to want to render HTML straight from disk, for example.

Chris Tavares
Tuesday, February 03, 2004

Brad,

Rendering HTML doesn't actually require TCP/IP.  HTTP does, but I'm not interested in using the protocol.  With the MS Browser control, you can subscribe to the BeforeNavigate2 event which will supply you with all the post & url data.  I'm hoping for something similar when working with the HTML controls.

Walt
Tuesday, February 03, 2004

I researched this a year ago for VB 6 and Delphi.

VB6
There is a a built in RTF/HTML label in Delphi.  The windows Tclass is RTF but the Linux class (controls built for Linux or Windows for cross platform) is HTML.

DELPHI
In VB 6, there is a control that someone created which will display HTML, tables, etc.  If you're interested in that one, email me and I'll try to find the reference.
It was free to redistribute.

The real Entrepreneur
Tuesday, February 03, 2004

Funny, but:

"2) Retrieve the post data when submit is clicked"

sort of implies that there's some kind of browser interface. My point was that he was NEVER going to find something (off the shelf) that was a browser like interface, and didn't use HTTP for interactivity. His requirement is completely out of whack with his utilization model.

See? I'm not saying HTTP is a requirement, but rather that he's going to have to roll everything himself to avoid HTTP (to avoid TCP/IP).

Brad Wilson (dotnetguy.techieswithcats.com)
Tuesday, February 03, 2004

yes, you can do it.

the mshtml control itself can be fed data, i don't know quite how submit works.

the browser control can do it too in different ways, i think you can trap submit.

in either case you can use script to emulate a form. just gather all the parameters and then call into your object itself.

look into window.external. ATL has some examples of this, it's pretty easy there.

mb
Tuesday, February 03, 2004

Maybe:

http://www.eztools-software.com

This site provides controls that are based on Microsoft IE, but can be used independently to build web-type apps.

guilty as charged
Tuesday, February 03, 2004

> the mshtml control itself can be fed data, i don't know quite how submit works.

I have an example on my webpage that shows how to do that. It is plain C++/Win32 API, no MFC, but I am sure that JOS readers can easily adapt it to whatever burder they have to carry:)

It can be found at:
http://www.adp-gmbh.ch/win/misc/mshtml/

Rene

René Nyffenegger
Wednesday, February 04, 2004

"the mshtml control itself can be fed data, i don't know quite how submit works."

I'll bet you $5 that MSHTML fails without a TCP/IP stack installed.

Brad Wilson (dotnetguy.techieswithcats.com)
Wednesday, February 04, 2004

Lynx is open source - get the source and hack it to do what you want.

I've done that to create a wget-like program that reads web pages and extracts links and other details.  You could pass it HTML files and have it do the HTML formatting, outputing whatever you want.

Bathmophobic skier
Wednesday, February 04, 2004

"http://www.adp-gmbh.ch/sitemap.html"

:: drool ::

Aaron Boodman
Wednesday, February 04, 2004

>I'll bet you $5 that MSHTML fails without a TCP/IP stack installed.

Why would it care? It uses urlmon to get all its data. I don't think urlmon cares either unless you use a network protocol. file is not a network protcol. neither is res. neither is using ipersiststreaminit to feed it data, though images may still need to come from elsewhere (e.g. file, res, a moniker or protocol you write yourself).

if i had time i'd set up a virtual machine to test it. but i don't. if someone does want to try it, using "mshtml:<html here>" in creating an ATL AxWindow is probably the easiest way to do this.

mb
Wednesday, February 04, 2004

*  Recent Topics

*  Fog Creek Home