Loading Simple HTML Pages From Memory | CodeGuru

Loading Simple HTML Pages From Memory

Environment: VC6 SP4, IE 5.0, Platform SDK. Sometimes,when you use web browser control, it’s not suitable to work with temporary files as a source for browser navigation. For example, if you want secure information or you need dynamically change content from c++ program. CMoreHtml class derived from standard MFC-class CHtmlView and fully keeps class functionality. […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 14, 2001
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6 SP4, IE 5.0, Platform SDK.

Sometimes,when you use web browser control, it’s not suitable to
work with temporary files as a source for browser navigation. For example, if you
want secure information or you need dynamically change content from c++
program.
CMoreHtml class derived from standard MFC-class
CHtmlView and fully keeps class functionality. Additionally you will have some
more abilities to work with html content. This class use standard COM
interfaces IWebBrowser2, IHtmlDocument2. Moreover in this application uses
IMarkupServices interface it force to minimum capability with IE 5.0.

Class usage

You could derive your own view from CMoreHtmlView like standard CHtmlView. If you want to
activate work with memory, you need just call NavigateMemory() function like
showed in example:

void CYourOwnView::OnInitialUpdate()
{
 CHtmlView::OnInitialUpdate();
 // TODO: This code navigates to a popular spot on the web.
 //  change the code to go where you’d like.
 //Navigate2(_T(“http://www.microsoft.com/visualc/”),NULL,NULL);
 //initialize  navigation from memory mode
 NavigateMemory();
 //set parameters of html
 SetTitle( “Shakespeare page”);
 PutBodyContent( (LPSTR)lpcstrContent);
 COleVariant ovBgColor( “cornsilk”);
 SetBodyAttributes( “BGCOLOR”, ovBgColor);
 SetScript( (LPSTR)lpcstrScript);
}

In any case, you need source for correct working of web browser control.
Thereto, you can use html-file template from resource.



<HTML>
  <HEAD>
   <TITLE></TITLE>
   <SCRIPT>>/SCRIPT>
  </HEAD>
  <BODY>
  </BODY>
</HTML>


I can’t find possibility to write to <HTML> or <HEAD> tag content,
therefore I’ve created several functions, they write to exact parts of html document.












BOOL PutBodyContent( LPSTR lpstrContent)
Write html content ( filling tag).
lpstrContent – text of HTML content;
BOOL SetBodyAttributes(CString sName, ColeVariant vValue)
Setting tag attributes, like BGCOLOR, LINK etc.
sNname – attribute name;
vValue – attribute value(VARIANT type);
BOOL SetCharset(LPSTR lpstrCharset)
Setting Charset.
BOOL SetScript(LPSTR lpstrScript)
Write html scripts.
lpstrScript – content of <SCRIPT> tag;
BOOL SetTitle(LPSTR lpstrTitle)
Set title of html document;

Uploading of html content possible only when downloading of html template
finished. But you could use these functions in any place of code after
running NavigateMemory(). Values of content store in CMoreHtmlView
class members and apply in exact moment.

How CMoreHtmlView works.

NavigateMemory() function loads template html document from resource
with identifier IDR_EMPTY_HTML and sets m_bMemoryMode to TRUE.
PutBodyContent, SetScript etc. functions call IHtmlDocument2 methods
only if document object exists, in other case functions only store
content in private variables. If these functions execute with NULL
parameter then content modification does from member variable values.
OnDownloadComplete function overloading makes for reloading html content
if refresh browser command will be called.

Search and mark words in html document

Sometime you need make your own search system in application that uses
web browser control. MarkWords member function you could use in that case.
You only need to pass a search string as input parameter.

for( ; 😉
{
 // Find text
 hr = pPtr1->FindText( poSearchStr, 0, pPtr2, NULL );
 if (hr == S_FALSE) // did not find the text
  break;
 IHTMLElement *pFontEl;
 // create FONT element with attributes for selection
 OLECHAR pchAttributes=0;
 hr=pMS->CreateElement(TAGID_FONT,
 L”COLOR=white STYLE=”backgroundcolor:darkblue””, &pFontEl);
 // Insert created element to context
 hr=pMS->InsertElement( pFontEl, pPtr1, pPtr2);
// Continue searching
pPtr1->MoveToPointer( pPtr2);
}

It’s main part of MarkWords function, at the beginning makes search of
string after that creates <FONT COLOR=white
STYLE=”backgroundcolor:darkblue”>…</FONT> element.
This tag marks the located string.

Advertisement

Downloads

Download demo project and source – 29 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.