throbber
New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
`The Wayback Machine - https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/li…
`From the November 2001 issue of MSDN
`Magazine.
`
`New Graphical Interface: Enhance Your Programs
`with New Windows XP Shell Features
`
`Dino Esposito
`
`This article assumes you're familiar with GDI
`
`Level of Difficulty 1 2 3
`
`SUMMARY The Windows XP shell introduces many new features that both users and developers are
`sure to welcome. The interface supports a number of styles that will be new to users, and it also
`supports customization of those styles through a new concept called themes. There are more shell
`registry settings available to the user and developer, a facility for customizing infotips, and infotip shell
`extensions. In addition, folder views can be customized.
` This article covers these shell changes and includes a discussion of a number of other Windows XP
`additions. These include fast user switching, which lets users log on and off quickly, and AutoPlay
`support for a variety of devices and file types not previously supported.
`
`ike it or not, the new Windows® XP user interface (formerly codenamed "Luna") is something
`that most people have strong feelings about when they first see it. I confess that when I first
`completed the Windows XP installation and I was confronted with the new Windows XP visual
`style, I was tempted to drop it and return to the more classic and familiar Windows 2000
`interface (which is an option with Windows XP). I wanted my old Windows back!
` The Windows XP shell introduces a rationalization of the user interface services and features found
`in previous versions of Windows. As a result, a few things you could do with Windows 2000 are either
`unsupported under Windows XP or are supported in a more restrictive way. To make up for this, new
`common controls and, above all, new listview capabilities, make the Windows shell easier to use with
`richer programming support.
` In this article, I'll delve into the Windows XP shell to cover shell settings, shell extensions, new
`registry entries, and folder customization. Finally, I'll summarize the key things you need to know
`about supporting Windows XP visual styles in your own apps through the new family of common
`controls. This article is based on the first Release Candidate of Windows XP, so it's remotely possible
`that some of this information might change when the product ships. However, if you follow along you'll
`find the kind of information you need to get ready for Windows XP now.
`
`What's New in the Windows XP Shell?
`
` Windows XP does not support any new shell extensions that aren't also supported in Windows
`2000, with one exception I'll cover shortly. However, folder customization through hypertext templates
`(.htt files) has been deemphasized in Windows XP and important restrictions have been applied.
` There are places in the Windows XP shell where the user interface is drawn in a completely new
`way. The underlying technology, though, is not documented or exposed at present.
` There are now more shell registry settings, letting you better personalize more aspects of the shell.
`For example, you can exercise significant control over infotips on a per-file-class basis without writing a
`
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`1/12
`
`EX-1022
`Microsoft Inc. v. LiTL LLC
`
`

`

`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
`shell extension. Additional shell enhancements include common controls, fast user switching (the ability
`to have the system work with multiple users simultaneously connected), and Autoplay. The one new
`type of shell extension Windows XP does have that allows you to register new handlers for music,
`video, and pictures delivered through CD, DVD and other media. (See the "Automatcially Detect and
`React to New Devices on a System" article in this issue.)
` The contents of my Windows 2000 article "Enhance Your User's Experience with New Infotip and
`Icon Overlay Shell Extensions" (MSDN Magazine, March 2000) is still largely valid. However, I'm going
`to revisit some of the information in that article in light of Windows XP.
` After playing with Windows XP for a couple of days, I got the distinct impression that the system
`tends to control what the user can and cannot do much better than earlier versions of the Windows
`operating system did. I've written at least three articles for MSDN® Magazine about the Windows 2000
`shell and registry. In addition to the aforementioned piece about shell extensions, I covered advanced
`folder customization in "Extending Explorer Views by Customizing HyperText Template Files" in the June
`2000 issue and the registry in "Latest Features and APIs Provide the Power to Customize and Extend
`Your Apps" that appeared in the November 2000 issue. All these articles (whose URLs are listed in this
`article summary) illustrate hidden gems in the Windows 2000 shell architecture and shed light on
`poorly documented, yet important topics and features that satisfy diverse needs and make developers
`more productive. For example, how do you change a folder's icon? Based on some early MSDN
`documentation, if you create a file called desktop.ini in a folder, and add the following content
`
`[.ShellClassInfo]
`IconFile=shell32.dll
`IconIndex=41
`
`then setting the readonly attribute for the folder forces Explorer to pay special attention to the
`desktop.ini file. This makes Explorer read the .ini file and display the specified icon when folders are
`listed. While this is not a particularly difficult task for developers and power users, it required
`knowledge of implementation details and familiarity with the system.
` In Windows XP, any user who wants to mark a particular folder with a custom icon need only right-
`click on the folder, select the Customize tab and follow the instructions shown in Figure 1. What
`happens under the covers is similar to the process I just described, but the details are hidden from the
`user.
`
`Figure 1 Choose Icon
`Figure 1 Choose Icon
`
` Another interesting feature that was once the exclusive domain of power users, but which is now
`available to any Windows XP user, is the ability to associate actions with classes of files. For example,
`suppose you want to add the Register and Unregister items on the context menu of DLL files to register
`and unregister the file as a COM component. Before Windows XP, this required a Windows Script Host
`(WSH) script to directly manipulate the registry or some compiled code using the registry API. While
`this remains the only way to accomplish it programmatically, users can now access a sequence of
`dialogs to associate commands with classes of files. Just click on the Folder Options item from the
`Explorer Tools menu, open the File Types tab, select or add the particular file type, and click the
`Advanced button. What happens next is shown in Figure 2.
`
`Figure 2 Advanced Options
`Figure 2 Advanced Options
`
` Customizing the layout of a Windows folder view is yet another user interface feature that's
`changed significantly in Windows XP. No longer will a wizard guide you through various steps. Instead,
`there is a simple dropdown list in the Customize tab of the folder's properties. From there, you can
`choose the style of the folder from a number of predefined options. Apparently, there is no longer a
`way to completely customize the structure of a folder view. (I'll have more to say about this later on.)
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`2/12
`
`

`

`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
` In general, Windows XP comes with a significant number of user interface improvements,
`especially for users and power users. In prior versions of Windows, some of these improvements were
`only useful to programmers. In Windows XP, many more people can take advantage of these UI
`improvements. From the programmer's perspective things have been left more or less unchanged, but
`the tasks are now more thoroughly documented in the latest Platform SDK.
`
`Shell Registry Settings
`
` Let's start this tour of the Windows XP shell by looking at some little-known yet useful registry
`tweaks that can help you to better configure an application and fuse it to the system shell.
` A large number of the shell features are governed by settings stored in the system registry. By
`changing values and creating entries, you can tune up the overall behavior of the shell and its
`constituent elements. For example, you can control the way in which a file is processed
`(AlwaysShowExt, NoOpen, NoOpenWith, EditFlags settings), the way a system object presents itself
`through Explorer, and the way Infotips are formatted. A majority of the settings mentioned here also
`work with Windows 2000.
` The AlwaysShowExt setting serves the purpose of overriding one of the folder options that hides
`the extension of known file types. A known file type is any file class whose extension is registered with
`the system, along with handlers for actions like open, print, and edit. Technically speaking, you know
`that a file class is properly registered with the operating system when you find the following registry
`key exists:
`
`HKEY_CLASSES_ROOT
`\.ext
`
`Here, .ext represents the file extension. If the AlwaysShowExt value is present in the registry, the file
`extension is always displayed in Explorer, regardless of the setting of the "Hide extensions for known
`file types" folder option. Figure 3 and Figure 4 show the various settings for typical DLL files.
`
`Figure 4 Folder Options
`Figure 4 Folder Options
`
` Another rather interesting attribute is NoOpen. Through not frequently used, it helps the system
`notify users that they're about to do something dangerous. If your program creates files that users
`should not modify, you can register the corresponding file type with a NoOpen attribute under the file
`type identifier key. A file type identifier key takes the form of extfile, so the identifier for DLLs would be
`dllfile.
` If the user attempts to open any file from a class that has been marked with the NoOpen attribute,
`then the system displays a warning message. If you assign some text as the value of the NoOpen
`attribute, the system displays that text in the message box. However, bear in mind that despite the
`attribute's name, signing your files this way does not prevent users from opening the files; they only
`get a warning. In addition, notice that NoOpen does not work if any command action has been
`specified for the class. For example, by default a DLL file has no custom command registered. (Except
`I added a custom command through the dialogs shown in Figure 2.) In Figure 3, you
`on my system
`also see that DLL files are marked as NoOpen. Try to double-click on a DLL file under these conditions
`and you see a message that's similar to those in Figure 5. The top window shows the default
`message, whereas the bottom window displays a custom message that is the text of the NoOpen
`registry entry.
`
`Figure 5 Default and Custom Messages
`Figure 5 Default and Custom Messages
`
` Assigning attributes to a file class allows you to control some aspects of its behavior. It also allows
`you to limit the extent to which the user can modify various aspects of the class, such as its icon or
`
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`3/12
`

`

`

`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
`verbs, through the File Types tab of the Folder Options dialog. The attributes are defined as binary flags
`and are stored in the EditFlags entry. EditFlags must be a REG_BINARY entry. For DLL files, its registry
`path evaluates to
`
`HKEY_CLASSES_ROOT
`\dllfile
`
` To assign the EditFlags entry of a file class, take the sum of any combination of the attributes listed
`in Figure 6. For example, setting EditFlags to 0x00100100 combines the ability to preserve the
`description of the file class with the restriction that files of that type cannot be added to the Recent
`Documents folder after being opened.
` Reading about this feature validated all of my conjectures and hunches a few years ago when I
`realized that not all files that I opened were listed in the Recent Documents menu. This is the perfect
`example of system features that work with Windows XP and are documented for Windows XP, but are
`also present in earlier versions of Windows.
`
`Customized Infotips
`
` Each file type can be associated with an infotip by creating a registry entry called Infotip under the
`following path:
`
`HKEY_CLASSES_ROOT
`\extfile
`
` If you register infotips in this way, you cannot apply them on a per-file basis. The string that you
`specify will be displayed for every file of that file type.
` To customize infotips, you can write a shell extension, as I'll show you shortly. As an alternative,
`Windows XP supports a huge number of property names, each of which points to a special piece of
`information about files. Some of the supported property names, which also apply to Windows 2000, are
`listed in Figure 7. The Infotip registry entry is assigned with a semicolon-separated sequence of these
`properties. Then, when Explorer is called to display the infotip for that file, it retrieves the information
`specific to that file. For example, if you look at Figure 3 you'll notice that DLLs have the following
`infotip structure:
`
`prop:FileDescription;Company;FileVersion;Create;Size
`
` Any infotip text that includes property names must begin with prop: as this is the prefix that tells
`Explorer to apply a special treatment to the text that follows. Some of the property names in the list
`are specific to Windows XP, namely FileDescription, Company, and FileVersion. As you may have
`guessed already, they refer to information that can be stored in the VersionInfo resource of Windows
`executables. The list of property names includes information that is typical of a certain category of
`files, but not all. When a certain property name does not have a corresponding value, then it is simply
`ignored. In Figure 8 you can see the infotips for two different DLLs. Guess what? Only the bottom one
`has version information.
`
`Figure 8 Infotips
`Figure 8 Infotips
`
` Speaking of DLLs, another particular shell registry setting you may have noticed in Figure 3 is
`TileInfo. This refers to a new, Windows XP-specific view mode called Tiles. Tiles mode works side by
`side with other popular views in Windows such as thumbnails, details, and large. The TileInfo registry
`entry defines the format that displayed information should have when the file name is rendered in tiling
`mode in a folder view. TileInfo follows the same syntax rules as InfoTip.
`
`Figure 9
`Figure 9
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`4/12
`
`

`

`1/4/24, 11:05 AM
`
`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`
`Figure 9 shows how the menu looks. Notice that, unlike the thumbnail view which is implemented
`internally by the system, tiles and groups (another new feature for arranging icons) are new
`functionalities of the Windows XP listview common control.
`
`AutoPlay
`
` AutoPlay is a feature that detects and properly handles special content such as pictures, music, or
`video files stored on removable media and devices. AutoPlay should not be confused with AutoRun.
`AutoRun, introduced with Windows 95, enables removable media like a CD to automatically launch an
`application when placed in the drive. Autorun is accomplished through the use of a file called
`autorun.inf, located in the root directory of the CD.
` AutoPlay takes in the essence of AutoRun, but applies specifically to certain categories of files and
`provides a way for you to register handlers for those kinds of content. Put another way, AutoRun makes
`a CD self-installing, or at least self-running. It does not rely on files or information stored on the
`machine. AutoPlay addresses a different requirement. When a user connects a specialized peripheral
`device such as an MP3 player or digital photo reader, AutoPlay allows machine-specific handling of the
`device. For instance, when you attach a digital camera, you might be asked whether you want to
`display the camera as a drive, browse the photos, print them, and so on. For more information on
`Autoplay see the article on page 77 in this issue.
`
`Revamped Shell Extensions
`
` With the exception of IHWEventHandler, which is involved with Autoplay, you will not find any new
`shell extensions in Windows XP that weren't in Windows 2000. However, the documentation now uses
`slightly different terminology for a few of the better-known extensions. Context menu shell extensions
`are often referred to as shortcut menu extensions. The column handler shell extension is frequently
`called the details shell extension.
` I selected three types of shell extensions that you should always use as companion code for your
`custom documents. They are the infotip shell extension
`a must-have if you have very structured and
`complex documents
`the column handler
`now the only way you have to display custom information
`about the selected file in the folder view, and finally the thumbnail viewer. A thumbnail viewer shell
`extension is a piece of software that provides a graphical preview of the content of a given file. In
`Windows 2000, the output of such a module was displayed in the standard template upon which the
`folder view was based. In Windows XP there is no longer the notion of a folder template, at least not
`one that is used for all the files throughout the system. For performance reasons, the Windows XP UI
`design team opted for a binary mechanism (a namespace extension) that allows very little
`customization or "reverse-engineering." I'll have more to say about this by the end of the article. When
`the folder view turns to the thumbnail mode (see Figure 10), then all the folder items are displayed in
`a larger size and, whenever possible, use a dynamically generated thumbnail. To do this, you must
`write a shell extension. As you may notice in Figure 10, not all the documents of the same type provide
`a thumbnail. This has nothing to do with the shell extension itself, but relates to the way in which the
`Office 2000 thumbnail extractor really works. It relies on the preview image dynamically generated and
`stored in the document itself. This holds true for Word, Excel and PowerPoint® documents. If the
`document does not include such a preview image it will not be displayed by the thumbnail extractor.
`You can check the preview image for an Office 2000 document by popping up the Properties dialog.
`Let's take a quick tour of how to write these shell extensions.
`
`Infotip Shell Extensions
`
` A shell extension is a (relatively) small, simple COM object that implements one or two interfaces.
`Which interfaces are implemented and how depends on the specific tasks the component you're writing
`will perform. The infotip extension in particular implements the IPersistFile and the IQueryInfo
`interfaces. IPersistFile is necessary to let the component know about the name of the file it has to
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`5/12
`



`

`

`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
`process. IQueryInfo provides the methods through which Explorer retrieves the string to be displayed.
`When implementing the IPersistFile interface, the shell extension should use the following method of
`IPersistFile to read and store the name of the file to work with.
`
`STDMETHOD (Load) (LPCOLESTR wszFile, DWORD dwMode)
`
`The IQueryInfo interface provides two methods, one of which is not used. The key method is
`GetInfoTip.
`
`// IQueryInfo::GetInfoTip
`STDMETHOD (GetInfoTip) (DWORD dwFlags, LPWSTR *ppwszTip)
`
`{
`
` // return some useful text
`wcscpy(*ppwszTip, L"Text");
` return S_OK;
`
`}
`
` In the body of the GetInfoTip method you retrieve the name of the file that you saved, possibly in
`a class data member, open it, and extract any information you want to display. The following code
`shows how to return the width and the height of a BMP file from an infotip shell extension.
`
`// Opens the BMP file and returns size (and colors)
`CComBSTR bstrInfo;
`GetBitmapInfo( (CComBSTR *) &bstrInfo);
`
`*ppwszTip = (WCHAR*) m_pAlloc->Alloc (
` (bstrInfo.Length() + 1) * sizeof(WCHAR) );
`if (*ppwszTip)
` wcscpy( *ppwszTip, (WCHAR*) (BSTR) bstrInfo );
`
` There is not much more to say about infotip shell extensions. When writing this code, you might
`want to use the following trick to prevent possible memory leaks. Allowing memory leaks in shell- level
`code is extremely dangerous because shell extensions can be invoked quite frequently. This is not true
`of all shell extensions, but it is certainly true for infotips. Given the structure of the shell extension, and
`especially the signature of the GetInfoTip method, the extension ends up passing one piece of its own
`memory to Explorer. The second argument of GetInfoTip is a pointer to a Unicode string. Sooner or
`later, Explorer will finish with it, but then there will be no way for your code to get back and deallocate
`that piece of memory. To circumvent such problems, the Windows shell defines a COM object whose
`only purpose is to allocate global memory that Explorer can destroy when needed. You obtain a
`reference to this memory allocator by calling the API SHGetMalloc. The allocator is rendered with the
`IMalloc interface from which you normally use the Alloc method and the Free method.
` The infotip shell extension follows a non-standard schema for registration. You must create the
`following registry hierarchy
`
`HKCR
` \.ext
` \shellex
` \{00021500-0000-0000-C000-000000000046}
`
` The default entry for this key must evaluate to the CLSID of the shell extension.
`
`Details Shell Extensions
`
` When Explorer works in Details mode, it normally displays several standard columns. Each column
`lists information, such as the file size or type, for each file in the current folder. By implementing and
`registering a column handler, you can make custom columns available for display. I was reminded of
`
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`6/12
`
`

`

`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
`the importance of paying attention to details when writing shell extensions a couple of months ago
`when a client asked me how he could provide additional information for some particular XML files
`through the normal Explorer shell. Basically, his goal was to have the Type column display for certain
`files extra information taken from the file itself rather than the usual description for all XML files. In
`Windows 2000 and Windows XP there is no way to hook into the creation of the Type column. As an
`alternative solution, I suggested he use a slightly modified folder template where some ad-hoc script
`code could call into a safe COM object and retrieve all the information. In Windows XP there is no
`longer any way to do this. In Windows XP, you can't mix your script code (HTML hypertext templates)
`with the namespace extension in use to render the content of a folder. For this reason, using a column
`handler is the only way you have to interfere with the process that determines the content of the folder
`view. To make sure that his problem was solved successfully under Windows XP, a column handler that
`adds all the extra information for those XML files to the view must be written. Writing a column shell
`extension requires that a COM object be written that implements the sole IColumnProvider interface.
`The following two methods form the programming toolset of IColumnProvider.
`
`STDMETHOD (GetColumnInfo) (DWORD, SHCOLUMNINFO *);
`STDMETHOD (GetItemData) (LPCSHCOLUMNID, LPCSHCOLUMNDATA, VARIANT *);
`
` The GetColumnInfo method provides the shell with structural information about the column. In
`particular, it informs Explorer about how many columns the extension supports, the expected data type
`(mostly strings), the default width in pixels, the description, and the alignment of the column. The shell
`calls the method GetItemData for each file displayed in the folder where this column has been selected.
`The SHCOLUMNID structure precisely identifies the column in case you're handling more than one. A
`column is uniquely identified by a pair of values, the format ID and the property ID. You can use these
`values to assign a special meaning to your column. For example, if you are writing this extension to
`provide the title of HTML documents you could use an existing column ID so that in the same Title
`column both the title of HTML documents and the title of Word documents appear. A format ID is just a
`128-bit value that can be your object's CLSID if you want to provide a unique column. Column handler
`must be registered under the following path:
`
` HKEY_CLASSES_ROOT
` \Folder
` \ShellEx
` \ColumnHandlers
` \CLSID
`
`where CLSID is the CLSID of your column shell extension. A registered column does not show up in the
`Explorer view unless it is explicitly selected using the dialog box shown in Figure 11. You get that
`dialog box by right-clicking on the Explorer's column header bar and selecting the More button at the
`bottom of the context menu. The new column can be added on a per-folder basis.
`
`Figure 11 Choosing Details
`Figure 11 Choosing Details
`
`Thumbnail Viewer Extensions
`
` The thumbnail extractor is a COM object that implements two interfaces: IPersistFile and
`IExtractImage. IPersistFile plays the same role I reviewed earlier for the infotip shell extension. It lets
`you save the name of the file as a class data member. IExtractImage has two methods called
`GetLocation and Extract.
`
`STDMETHOD (GetLocation) (
`LPWSTR pszPathBuffer,
`DWORD cchMax,
`DWORD *pdwPriority,
`
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`7/12
`
`

`

`1/4/24, 11:05 AM
`const SIZE *prgSize,
`DWORD dwRecClrDepth,
`DWORD *pdwFlags);
`STDMETHOD (Extract) (HBITMAP *);
`
`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`
`GetLocation is used to request the path of an image and specify how the image should be rendered.
`You should return images that fit within the boundaries defined by prgSize parameter. You do not need
`to fill in the unused part of the rectangle. Depending on how much the aspect ratio of the image differs
`from what is specified, the image may be distorted.
` The following code shows a possible way to implement the Extract method for an extremely simple,
`single-threaded component. The Extract method should return to the shell a bitmap object that fits in
`the thumbnail area.
`
`HRESULT CMyExtractor::Extract(HBITMAP* phThumbnail)
`{
` HICON hi = ExtractIcon(NULL, m_szFile, 0);
` ICONINFO ii;
` GetIconInfo(hi, &ii);
`
` *phThumbnail = ii.hbmColor;
`
` DestroyIcon(hi);
` return NOERROR;
`
`} E
`
`xplorer's Folder View
`
` As I mentioned before, you cannot mix the standard view of Explorer with your own code. In other
`words, you cannot modify the folder.htt file in the c:\winnt\web folder to provide a customized view of
`all folders. This was possible in Windows 2000, but not in Windows XP. Generally speaking, in Windows
`XP the customization of folders became restricted. When you click on the "Customize this folder" item
`of the folder context menu, you don't get a wizard; a simpler dialog box pops up. It allows you to
`choose the icon for the folder and the picture to display on the big folder icon when in Thumbnail
`mode. Using the topmost panel however, you can choose the template for the current folder and all of
`its subfolders (see Figure 12). However, the templates available are very specific and designed for
`special user activities such as managing pictures, music or videos. There's really nothing there for the
`programmer! So, you may think there is no way to customize a folder in Windows XP, but that's not
`really an accurate statement.
`
`Figure 12 Source Properties
`Figure 12 Source Properties
`
` When you set the new icon for the folder, Windows XP more or less does the same things that
`Windows 2000 does. It creates a desktop.ini file in the folder and stores in it the same information you
`would have in Windows 2000. This is the content generated for the scenario depicted in Figure 12.
`
`[.ShellClassInfo]
`IconFile=%SystemRoot%\system32\SHELL32.dll
`IconIndex=24
`
` One key thing that differentiates Windows XP from Windows 2000 is that in Windows XP the
`desktop.ini must be marked as system and hidden. This is the magic combination that lets Explorer
`know that desktop.ini is a special file. Given this, there is no need to mark the folder as read-only. So
`from Windows 2000 to Windows XP, the event that assigns a special meaning to desktop.ini has
`changed. It was the containing folder marked read-only in Windows 2000; it is the same file marked as
`https://web.archive.org/web/20110809204642/http://msdn.microsoft.com/en-us/library/bb986055.aspx
`
`8/12
`
`

`

`New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features
`1/4/24, 11:05 AM
`"system" in Windows XP. So, at this point, you can play around with desktop.ini. Let's see what
`happens if you add the following code:
`
`[ExtShellFolderViews]
`{5984FFE0-28D4-11CF-AE66-08002B2E1262}=
`{5984FFE0-28D4-11CF-AE66-08002B2E1262}
`
`[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
`PersistMoniker=file://Navigator.htt
`
` Next, re-open the Customize tab in the folder's Properties dialog. A new item magically appears
`stating that the folder is rendered according to a user-defined template. Figure 13 shows a very simple
`template that switches between two views. The way you write HTT files is exactly the same as in
`Windows 2000. There is really nothing different except that Windows XP does very little to simplify this
`task. In any case, folder customization applies to a single folder only and shows up only if users don't
`select the Windows classic template from the dialog shown in Figure 14.
`
`Figure 14 Template Dialog
`Figure 14 Template Dialog
`
`Windows XP Visual Styles
`
` The key feature of the Windows XP user interface is that it is based on themes. A theme is a
`consistent, system-wide way to draw user interface elements. These elements include controls, custom
`controls, icons, and HTML pages.
` From the developer's standpoint, Windows XP visual styles means interaction with XML manifests,
`the newest version 6.0 of the ComCtl32 library, side-by-side components, and color-rich icons.
`(Manifests are files that specify versioning information so that different versions of DLLs don't collide.
`Doug Boling's article in this issue discusses manifests in detail.)
` Without touching the code, any Win32®-based application can get a facelift when running under
`Windows XP. The differences in the Windows XP visual styles, when compared to plain old Windows
`styles, can be summarized in three elements: non-rectangular and irregularly shaped controls, hot
`states, and extended support for alpha transparency. These features are provided by version 6.0 of the
`ComCtl32 library that now incorporates all Windows and shell controls. This DLL won't ship downlevel,
`but on older platforms programmers can use version 5.8 to get closer to Windows XP styles. However,
`version 5.8 doesn't provide the same features and the same set of controls. For example, it doesn't
`support the new hyperlink control or the bitmapped button control.
` How can you write an application that exploits visual styles? The Windows XP visual styles are not
`something you can hard code. There is no special API to call to enable it. All you do is write a plain old
`Win32-based application and add an XML manifest.
` ComCtl32 version 6.0 ships side-by-side with version 5.8 and to avoid breaking existing
`applications; its use must be explicitly required and authorized.
` In the XML manifest you specify the dependencies of your application. Dependencies include all the
`DLL files your application uses. This ensures that your application will always work as long as the
`components it has been tested with are present. It also gives you a way to link to the Windows XP
`theme manager to have your Win32 controls rendered the Wind

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket