{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f16\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f113\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f114\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}{\f116\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f117\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f118\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}{\s1\sb240\sa60\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 1;}{\s2\sb240\sa60\keepn\nowidctlpar\widctlpar\adjustright \b\i\f1\cgrid \sbasedon0 \snext0 heading 2;}{\s3\sb240\sa60\keepn\nowidctlpar\widctlpar\adjustright \f1\cgrid \sbasedon0 \snext0 heading 3;}{\*\cs10 \additive Default Paragraph Font;}{\s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext15 H4;}{\s16\fi-200\li200\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 1;}{\s17\fi-200\li400\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 2;}{\s18\fi-200\li600\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 3;}{\s19\fi-200\li800\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 4;}{\s20\fi-200\li1000\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 5;}{\s21\fi-200\li1200\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 6;}{\s22\fi-200\li1400\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 7;}{\s23\fi-200\li1600\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 8;}{\s24\fi-200\li1800\nowidctlpar\widctlpar\tqr\tldot\tx3960\adjustright \fs20\cgrid \sbasedon0 \snext0 index 9;}{\s25\nowidctlpar\widctlpar\adjustright \fs20\cgrid \sbasedon0 \snext16 index heading;}{\s26\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 1;}{\s27\li200\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 2;}{\s28\li400\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 3;}{\s29\li600\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 4;}{\s30\li800\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 5;}{\s31\li1000\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 6;}{\s32\li1200\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 7;}{\s33\li1400\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 8;}{\s34\li1600\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext0 toc 9;}{\s35\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f16\fs20\cgrid \sbasedon15 \snext35 Fig;}{\s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright \i\fs20\cgrid \sbasedon0 \snext36 Notes;}{\s37\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext37 header;}{\s38\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext38 footer;}{\*\cs39 \additive \sbasedon10 page number;}{\s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid \sbasedon36 \snext40 I-Notes;}}{\*\listtable{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid847676482\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'041.\'00 ;}{\levelnumbers\'03;}\b0\i\f0\fs20\ulnone\fbias0 \fi-360\li1080 }{\listname ;}\listid1809278826}}{\*\listoverridetable{\listoverride\listid1809278826\listoverridecount0\ls1}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }}\ls2}}{\info{\title Web-like Shell : Architecture}{\author Satoshi Nakajima}{\operator Paul Butterworth}{\creatim\yr1996\mo11\dy7\hr21\min15}{\revtim\yr1996\mo11\dy7\hr21\min16}{\printim\yr1995\mo11\dy8\hr18\min36}{\version2}{\edmins2}{\nofpages8}{\nofwords2404}{\nofchars13707}{\*\company Microsoft}{\nofcharsws16833}{\vern69}}\widowctrl\ftnbj\aenddoc\lytprtmet\formshade\viewkind1\viewscale150\pgbrdrhead\pgbrdrfoot \fet0\sectd \linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain \s38\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid {Microsoft Confidential\tab }{\field{\*\fldinst {\cs39 PAGE }}{\fldrslt {\cs39\lang1024 1}}}{\cs39 \tab }{ \par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {\f1\fs32 Web-like Shell : Architecture \par }\pard \qj\nowidctlpar\widctlpar\adjustright {\i\f1 Internet Explorer Integration, In-place Navigation and Page-View}{\f1\fs32 \par \par }{\i\f1 February 27, 1995 \par Satoshi Nakajima (satona), Windows UI Development, Internet Platform}{ \par }\pard \qj\nowidctlpar\widctlpar\adjustright { \par }\pard\plain \s26\qj\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid {\b\f1\fs24 Table of Contents}{ \par }\pard\plain \s27\li200\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid {\field\fldedit{\*\fldinst { TOC \\o "1-3" }}{\fldrslt {\lang1024 Overview\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc337009835 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc337009835 }}{\fldrslt {\lang1024 1}}}}}{\lang1024 \par }\pard \s27\li200\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright {\lang1024 Existing Interface Layers\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc337009836 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc337009836 }}{\fldrslt {\lang1024 2}}}}}{\lang1024 \par Shell Explorer - Internet Explorer Integration\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc337009837 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc337009837 }}{\fldrslt {\lang1024 3}}}}}{\lang1024 \par }\pard \s27\li200\nowidctlpar\widctlpar\brdrb\brdrs\brdrw30\brsp20 \tqr\tldot\tx8640\adjustright {\lang1024 Page View\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc337009838 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc337009838 }}{\fldrslt {\lang1024 6}}}}}{\lang1024 \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid { \par }\pard\plain \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright \i\fs20\cgrid {{\*\bkmkstart _Toc337009835}Revision History: \par 1.00 September 29 -- Written \par {\pntext\pard\plain\s36 \i\fs20\lang1033\cgrid \hich\af0\dbch\af0\loch\f0 1.1 \tab}}\pard \s36\qj\fi-360\li1080\ri720\sb60\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnb0\pni1\pnfs20\pnstart1\pnindent360\pnhang{\pntxtb 1.}{\pntxta }}\ls1\adjustright {October 27 \endash (1) Added \ldblquote In-place navigation of Office documents on file system\rdblquote as one of primary goal. (2) Change in History mechanism. (3) Updated the development status. (4) Updated the status on peer-to-peer HTTP server. \par {\pntext\pard\plain\s36 \i\fs20\lang1033\cgrid \hich\af0\dbch\af0\loch\f0 1.2 \tab}}\pard \s36\qj\fi-360\li1080\ri720\sb60\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnb0\pni1\pnfs20\pnstart1\pnindent360\pnhang{\pntxtb 1.}{\pntxta }}\ls1\adjustright {November 8 \endash (1) Updated pictures reflecting the latest mechanism. (2) Updated the mechanism to generate HTML pages for pageview. \par {\pntext\pard\plain\s36 \i\fs20\lang1033\cgrid \hich\af0\dbch\af0\loch\f0 1.3 \tab}}\pard \s36\qj\fi-360\li1080\ri720\sb60\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnb0\pni1\pnfs20\pnstart1\pnindent360\pnhang{\pntxtb 1.}{\pntxta }}\ls1\adjustright {February 27 \endash (1) Updated reflecting the actual implementation we have for PDC. (2) added \ldblquote implementation notes\rdblquote . \par }\pard\plain \s2\qj\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel1\adjustright \b\i\f1\cgrid {Overview{\*\bkmkend _Toc337009835} \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {As ChristoB describes in his \ldblquote web-like shell\rdblquote UI document, we will improve the Shell Explorer UI by making it very }{\b easy to \ldblquote navigate\rdblquote }{ \endash with the navigation toolbar and the single-click page-view. We will also }{\b integrate}{ the Shell Explorer and the Internet Explorer, so that the user can navigate documents on local volumes, LAN and WWW as seamless as possible. This document describes the overall architecture of this new shell. This document also describes the architecture of IE 3.0 (which runs on Windows 95 without a new shell) frame, which uses the same mechanism and share many components. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {Major goals in this release: \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright \fs20\cgrid {\b\i Integrate}{ the Shell Explorer and Internet Explorer \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Enable the}{\b\i in-place navigation}{ of Office 96 documents on WWW and on file system \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Make the shell }{\b\i behave and look like a web-browser}{ (navigation toolbar and single click page view) \par }\pard\plain \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \i\fs20\cgrid {Notes [Oct.27]: After talking to the Office team (RWolf and SriniK), it became clear for me that in-place navigation of Office (and Office-compatible) documents on file systems is as important as the Internet senario. The users should be able to build a web of documents no matter which protocol (HTTP or file) they choose and no matter which format (HTML, DOC or something else) they choose. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \b\f1\fs20\cgrid {Wishes: \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright \fs20\cgrid {Enable the in-place navigation of Office 95 documents as leaf nodes as well \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Make the shell folder view of shell name space extensible (for third party shell) \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Make the page view extensible (for third party shell) \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Enable the embedding of shell folder views in OLE containers (esp., mail messages) \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Make the shell browsing fully remotable (over LAN, Internet, modem and IR) \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \b\f1\fs20\cgrid {Restrictions/Constraints: \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright \fs20\cgrid {We need to minimize the changes to the existing code path \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {HTML view control won\rquote t be ready soon \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Hyper-link aware Office 96 apps won\rquote t be ready soon \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {All the design work should be done as soon as possible \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \b\f1\fs20\cgrid {Strategy: \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright \fs20\cgrid {Use existing interface layers (extension mechanisms) as much as possible \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Minimize the change to existing components (explorer.exe, shell32.dll, comctl32.dll) \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \qj\fi-360\li360\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {Modularize components for parallel development and component testing \par }\pard\plain \s2\qj\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel1\adjustright \b\i\f1\cgrid {{\*\bkmkstart _Toc337009836}Existing Interface Layers{\*\bkmkend _Toc337009836} \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {To achieve our modularized development, we\rquote ll utilize the existing interfaces as much as possible. It will enable us to (1) minimize changes to existing code path, (2) test individual components independently and (3) minimize the dependencies between groups (Shell, O\rquote Hare, Office96). We\rquote ll use following interfaces: \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {Windows 95 Shell Namespace Extension: \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {Although we haven\rquote t clearly defined how we presents documents on WWW to the end user on the Explorer left pane (i.e., the hierarchy), we know that they don\rquote t belong to any of existing folders (shell\rquote s namespace). It is quite natural to use the Namespace Extension mechanism (see picture below) to plug the URL namespace into the explorer\rquote s name space. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {Office 95: DocObject interface: \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {Office 95 introduced the DocObject interface for Binder and Word-As-Mail-Editor. In-place navigation of Office documents (and HTML documents) can be achieved with this mechanism with a minor extension (hype-link interface, which Office 96 will support) to it. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {OLE control/embedding: \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {OLE control/embedding is already \ldblquote the\rdblquote interface to integrate arbitrary UI components into form-like container. It is a very natural choice and strategically makes sense for us to support OLE ctonrols in its HTML viewer. To achieve our UI requirement (having a full functional shell view in a page view), we need to create our own window in a HTML page, and embedded OLE controls give us enough flexibility. \par \par }\pard \qj\keepn\nowidctlpar\widctlpar\adjustright {\pard\plain \qj\keepn\nowidctlpar\widctlpar\adjustright \fs20\cgrid {\object\objemb{\*\objclass }{\*\objdata }{\result {}}}}{ \par }\pard\plain \s35\qj\sb120\nowidctlpar\widctlpar\adjustright \b\f16\fs20\cgrid {Fig.1 Windows 95 Shell Namespace Extension Mechanism \par }\pard\plain \s40\li720\ri720\sb60\keepn\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: \par }\pard \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright {\ldblquote Explore\rdblquote is implemented in EXPLORER.EXE and }{\b CFileCabinet}{ is the structure name. \par }\pard \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright {\ldblquote DefView\rdblquote is implemented in SHELL32.DLL and }{\b CDefView}{ is the class name. \par }\pard \s40\li720\ri720\sb60\keepn\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright {\ldblquote Folders\rdblquote are implemented in several places in SHELl32.DLL. }{\b CFSFolder}{ represents file system folderss, }{\b CDesktop}{ represents the desktop folder, }{\b CDrives}{ represents the MyComputer and }{\b Cnet}{/}{\b CNetRes}{ represents network folders. \par }\pard\plain \s2\qj\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel1\adjustright \b\i\f1\cgrid {{\*\bkmkstart _Toc337009837}Shell Explorer - Internet Explorer Integration{\*\bkmkend _Toc337009837} \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {Fig.2 shows you how we will }{\b\i integrate}{ the Shell Explorer and the Internet Explorer. At the same time, we will enable the }{\b\i in-place navigation}{ of Office documents and add web-browser like navigation UI to the Shell Explorer. There are five pieces of either new of modified components to achieve all of these goals. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {DocView object (owned by SatoNa/CheeChew -- Shell): \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {To \ldblquote host\rdblquote (i.e., in-place navigate) Office documents (both 95 and 96), the shell needs to become a DocObject container. It is theoretically possible to change the explorer code to directly support the DocObject interface, it requires significant changes to the existing code and the risk of breaking existing behavior is very high. Instead, we\rquote ll introduce a by-directional proxy object, }{\b DocView}{ object between the Explorer and Office documents, which acts as a DocObject container to host Office documents and acts as a shell view object to be plugged into the right pane of the Explorer. \par }\pard\plain \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: This object is consists of two C++ object in SHDOCVW.DLL, }{\b CDocObjectView}{ and }{\b CDocObjectHost}{. CDocObjectView implements IShellView2, IDropTarget, IViewObject and IMsoCommandTarget to be accessed by the Shell or Internet Explorer. CDocObjectHost implements IOleClientSite, IMsoDocumentSite, IMsoCommandTarget, IOleInPlaceSite and IServiceProvider to be accessed by the DocObject (HTML viewer or Office documents). Although they are two different objects, their life times are typically bound (except for some optimization) and act like a single object from outside. Note that IHlinkFrame is no longer QI\rquote able from IOleInPlaceSite. It is implemented by the Explorer and should be obtained via IServiceProvider (with SID_IHlinkFrame). \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {BrowseContext and HyperLink (owned by SriniK \endash Office): \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {Another new component in this mechanism is HLINK.DLL, which provides the implementation IHlinkBrowseContext and IHlink interface. This hyper-link interface layer (proposed by SriniK, Office group) is the mechanism that allows the browser (e.g., Explorer) to monitor all the hyper-link activation from the (DocObject) documents and create a per-browse context history (for back/next navigation). \par }\pard\plain \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright \i\fs20\cgrid {Notes: This interface layer is the only new interface layer we introduce in Nashville/Office 96 and we are the first browser that uses this mechanism. \par }\pard \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright {Notes [Oct.27]: SriniK and I have agreed on how the shell will interact with hyper link interfaces. The DocView object will implement IHlinkFrame and it\rquote s Navigate method will appropriate convert monikers to pidls so that it fits in the explorer\rquote s name space. At this point, it is designed so that the shell does not directly load HLINK.DLL. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {Navigation UI in Explorer (owned by CheeChew -- Shell): \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {We are going to change the items on the Explorer toolbars and menus to make it easy to navigate (see ChristoB\rquote s document for detail). The work consists of two pieces, UI and hyper-link support. The UI work consists of navigation toolbar/menu and favorite/history folder. \par }\pard\plain \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: Neither Shell Explorer nor Internet Explorer uses IBrowseContext as its navigation stack, which requires a moniker and hyperlink for each node the user visits. Instead, we have a pidl-based history mechanism (TL API in tlog.c) which is shared among two components. It allowed us to implement navigation UI very efficiently while maintaining the compatibility with Win95 name-space extensions. The drawback is the lack of \ldblquote combined\rdblquote navigation stack with Office apps, which requires IBrowseContext to be passed to/from. After PDC, we\rquote ll revisit this issue and see how much we can support it. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {Internet Explorer Frame (owned by Satona/CheeChew/KurtE): \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {For Internet Explorer 3.0 release (which should run on Win95 without Nashvile), we\rquote ll provide a mini-explorer which is essentially a Shell Explorer with no left pane. It uses the same shell extension mechanism (IShellBrowser/IShellView) to host shell views, therefore the user will be able to browse all the shell\rquote s name space (folders, control panel, printers, ..) as well as DocObjects. \par }\pard\plain \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: This code was in IExplore.exe for a while, but we\rquote ve moved it into SHDOCVW.DLL (to share code with a browser OC \endash described later). The core object is }{\b CShellBrowser}{ instance which implements IShellBrowser, IServiceProvider and IConnectionPointContainer. It contains an instance of }{\b CIEFrameAuto}{, which exports the automation interface, DIExplorer, which will be accessible from both external code and the contained documents and controls. \par }\pard \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright {By the way, IHlinkFrame is not supported by neither. It is implemented in a separate object, }{\b CHlinkFrame}{, and created by DocView object on demand (and set to the broeser via IMsoCommandTarget(SBCMDID_SETHLINKFRAME)). We share the same implementation between the Internet Explorer and the Shell Explorer. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {DocObject support in HTML View (owned by JeremyS -- O\rquote Hare): \par }\pard\plain \qj\sa120\nowidctlpar\widctlpar\adjustright \fs20\cgrid {The O\rquote Hare team needs to re-package the existing Internet Explorer code so that the shell can \ldblquote host\rdblquote it in the right pane of the explorer. There are multiple choices (DocObject, ShellView, Window Control), but we have chosen to use DocObject mechanism to avoid putting any counter-part specific code in either side. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {Async URL Moniker (owned by JohannP \endash O\rquote Hare): \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {Async-URL Moniker allows DocObjects (or other components as well) to asynchronously render documents on WWW (Office 96 won\rquote t asnyc-render the main document, but it will delay render pictures). An URL moniker which represents an URL connection and manages caches transparently. \par }\pard\plain \s15\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {HyperLink/Navigation support in Office 96 (owned by Office team) \par }\pard\plain \qj\sa120\nowidctlpar\widctlpar\adjustright \fs20\cgrid {This work is necessary to make Office documents act as hyper-link documents. In those documents, the user will see hyper links and the user can in-place navigate to the link sources simply by clicking those links. This work is not a required piece for Nashville release, but will just fill the last piece of jigsaw to complete the seamless navigation. \par }\pard\plain \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright \i\fs20\cgrid {Notes [Oct. 27]: Although Office 95 documents don\rquote t allow the user to put hyper-links in them, the user will be able to in-place navigate to those document as leaf nodes. \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {\pard\plain \qj\nowidctlpar\widctlpar\adjustright \fs20\cgrid {\object\objemb{\*\objclass }{\*\objdata }{\result {}}}}{ \par }\pard\plain \s35\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f16\fs20\cgrid {Fig.2 Shell Explorer - Internet Explorer Integration \par }\pard\plain \s2\qj\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel1\adjustright \b\i\f1\cgrid {\page {\*\bkmkstart _Toc337009838}Page View{\*\bkmkend _Toc337009838} (a.k.a. HyperText View) \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {Fig.3 and Fig.4 shows you how we will add a }{\b\i page view}{ as the fifth view to the existing shell folder view (DefView) code (which has }{\i icon}{, }{\i small-icon}{, }{\i list}{ and}{\i detail}{ views). We will use the DocObject mechanism to host HTML view window within the shell folder window, because that is the interface the HTML viewer will export for the integration (described in the previous section). When we make this change to the shell folder view code, we will make it generic enough so that we (or even third party) can add a non-HTML viewer (such as RTF or Word document) as an additional view of the associated folder in future. There are three components to be either modified or creates: \par }\pard\plain \s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {DocObject hosting in Shell Folder View (owned by GeorgeP): \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {We need to change the Shell Folder View (DefView) code to support an additional view -- a page view -- which provides a single-click navigation, cool graphics and customization. We have chosen to use the HTML format (over RTF and Word document format) mainly because it is easy to either generate or pre-process HTML scripts. \par }\pard\plain \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright \i\fs20\cgrid {Notes: As I mentioned in the Overview section, allowing third party to add extra non-HTML pages is not one of our goals in this release. It, however, does not prevent us from making it so, if it is the most appropriate mechanism to support \ldblquote page\rdblquote view. \par }\pard \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright {Notes [Oct.27]: It is getting clear which feature is easy to implement (single shell view) and which feature is difficult (multiple shell view, sharing selection state). ChristoB is finalizing the list of prioritized features based on this feedback. This is probably the area we should most carefully manage the feature/schedule trade-off. \par }\pard\plain \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: At this point (right before PDC), we are not sharing the DocObject hosting code between PageView and DocView. The recent code change in DocView, (which breaks up DocView into CDocObjectlView and CDocObjectHost) will allows us to eventually share it (CDocObjectHost portion). \par }\pard\plain \s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {DocObject support in HTML Viewer (owned by JeremyS \endash O\rquote Hare): \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {This is exactly the same piece of code we need for the integration of the Internet Explorer and the Shell Explorer. \par }\pard\plain \s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {OC hosting in HTML Viewer (owned by PhilCo \endash O\rquote Hare) \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {This is the work O\rquote Hare team needed to do anyway to compete against the other Web-browsers. \ldblquote ShellExplorer OC\rdblquote section (below) describes how we use will it. Embedded stream tag is added to efficiently initialize OC\rquote s. \par }\pard\plain \s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {UI Enhancement to HTML Viewer (owned by VictorS \endash O\rquote hare) \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {We\rquote d like to make some minor UI changes to the HTML viewer so that it looks cool and we can make our page view as function as the other views. It includes (1) hot link highlighting, (2) source context menu, (3) source data dragging, (4) BMP/ICO support and (5) command invocation support. GeorgeP has a complete list (already sent to VictorS). \par }\pard\plain \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: We were able to achieve most of UI we wanted without changing HTML viewer by using OC as the mechanism to provide customized UI for shell items in a HTML pages. \par }\pard\plain \s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {HTML generation mechanism (owned by GeorgeP \endash Shell): \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {We\rquote ll generate a HTML file based on some template mechanism and pass it to HTML DocObject via IPersistStream::Load (instead of IPersistFile::Load to avoid creating a temporary file). \par }\pard\plain \s36\qj\li720\ri720\sb60\nowidctlpar\widctlpar\adjustright \i\fs20\cgrid {Notes [Nov.8] We significantly simplified the mechanism from the previous proposal by using non-file based initialization scheme. \par }\pard\plain \s15\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\cgrid {ShellExplorer OC (owned by MikeSh/CheeChew \endash Shell) \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {One of the UI requirement of this page view is to have a fully functional folder view within the page view. To achieve this, we need to create a window in the HTML view window and be active all the time. Since our HTML view supports OC hosting for another reason anyway and OC provide us enough flexibility, we have chosen to make a ShellExplorer OC. Another advantage of using OC is component testing. Since there are already many stable OC container code (such as VB4), we can easily test our code \endash which is much easier than testing with a new code (OC hosting HTML view code). \par Originally, we\rquote ve implemented this OC as a simple wrapper around IShellView (called ShellFolderView OC), but we\rquote ve changed the implementation significantly to support the \ldblquote frame-set\rdblquote (which requires a nested browser). This OC wraps an entire Internet Explorer frame and it has its own navigation stack and exposes the same OLE automation as the top-level Internet Explorer (or the Shell Explorer) window. \par }\pard\plain \s40\li720\ri720\sb60\nowidctlpar\widctlpar\box\brdrdb\brdrw15\brsp20 \adjustright \i\fs20\cgrid {Implementation Notes: This OC is consists of two objects, }{\b CVOCBrowser}{ instance and }{\b CShellExplorer}{ instance. CVOCBrowser is a subclass of }{\b CShellBrowser}{, which is described above (Internet Explorer Frame); this object exports interfaces for contained shell view objects. CShellExplorer is a subclass of }{\b CShellOcx}{, which is the base OC implementation we have in SHDOCVW.DLL; this object exports interfaces for the OC container (such as IPersistStreamInit, IConnectionPointContainer, IOleObject, IViewObject2, IDataObject, IOleInPlaceObject and IOleInPlaceActiveObject). \par By the way, CShellOcx is a subclass of another class }{\b CShellEmbedding}{, which has the base implementations of all OLE embedding interfaces (IOleObject, ...). \par }\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid { \par }{\pard\plain \nowidctlpar\widctlpar\adjustright \fs20\cgrid {\object\objemb{\*\objclass }{\*\objdata }{\result {}}}}{ \par }\pard\plain \s35\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f16\fs20\cgrid {Fig.3 Page-view Support \par }{\pard\plain \s35\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright \b\f16\fs20\cgrid {\object\objemb\objw4924\objh5015{\*\objclass }{\*\objdata }{\result {}}}}{ \par }\pard \s35\qj\sb120\keepn\nowidctlpar\widctlpar\adjustright {Fig.4 Embedding a ShellFolderView OCX in a HTML document \par }}