nm; I figured out how to do it. Using label and picture box controls. :-) I convert HTML into my own structored format of text, image, and tag classes linked together then the main class displays these onto a surface and using autoscrolling - *magic* it looks just like a webpage.. Well, almost. With a little work it would. ---------------------------------------------------------------------------- // The header #pragma once using namespace System; using namespace System::Drawing; using namespace System::Drawing::Drawing2D; using namespace System::Windows::Forms; __gc class mlr_lb { public: mlr_lb(); ~mlr_lb(); }; __gc class mlr_txt { public: mlr_txt(); ~mlr_txt(); Drawing::Color color; Drawing::Font * font; String * txt; }; __gc class mlr_img { public: mlr_img(); ~mlr_img(); PictureBoxSizeMode sizemode; String * path; Int32 width; Int32 height; }; __gc struct mlr_lnk { Object * obj; mlr_lnk * next; }; __gc class mlr { public: mlr(void); ~mlr(void); Int32 x; Int32 y; mlr_lnk * lnk; Boolean RemovePrevCtrls( Form * f ); Boolean Render( Form * f, Graphics * g, Int32 x, Int32 y, Int32 w, Int32 h ); }; // The source. #include "StdAfx.h" #include ".\mlr.h" #using String * JoinStrAr( String * s[], Int32 x, Int32 l, String * d ) { String * str = S""; for( Int32 index = x; index < x+l; index++ ) { str = S""->Concat( str->Trim(), d, s[index]->Trim(), d); } if(str->Length < 1) return str; return str->Substring( 0, str->Length - d->Length ); } String * MakeWidthFit( String * s, System::Windows::Forms::Label * l, Int32 w ) { l->Text = s; if( l->Width > w ) { String * ls[] = s->Trim()->Split( S" "->ToCharArray() ); for( Int32 index = ls->Length; index > -1; index-- ) { l->Text = JoinStrAr( ls, 0, index, " " )->Trim(); if( l->Width <= w ) { return JoinStrAr( ls, index, ls->Count - index, " " ); } } return s; /* it's just a long long line. :-) */ } return NULL; } // mlr::mlr(void) { } mlr::~mlr(void) { } Boolean mlr::RemovePrevCtrls( Form * f ) { Int32 cnt; start:; cnt = f->Controls->Count; for( Int32 index = 1; index < cnt; index++ ) if( f->Controls->get_Item( index )->Tag->ToString()->CompareTo( S"MLR_CTRL" ) == 0 ) { f->Controls->RemoveAt( index ); goto start; } return true; } Boolean mlr::Render( Form * f, Graphics * g, Int32 x, Int32 y, Int32 w, Int32 h ) { String * str; Int32 cx = x; Int32 cy