Skip to content

Aero

Windows Vista and 7, 2006 to 2012; Win32, WPF and WinForms. The two releases share one look. Where they differ, this page gives both values; everywhere else the value holds for both.

Aero is remembered for its glass window frames, but the part a control framework draws is much quieter: glossy gray controls that only turn blue when you touch them, Segoe UI 9 pt, white content over a light gray dialog face, and a blue main instruction. This page covers that part in detail and explains why glass cannot be rebuilt in a client area today.

Two Implementations, One Look

The era shipped its look twice. The Win32 look lives in aero.msstyles, a compiled bitmap archive whose authoring schema, AeroStyle.xml, ships in the Vista and Windows 7 SDKs. It states system colors, fonts, metrics, the text-style ramp and one-color hints per part, but no gradients. WPF's PresentationFramework.Aero is Microsoft's own vector re-creation of the same look, published as MIT source, and it is the only place the drawn gradients, radii and timings exist as numbers.2 Most tables below take colors and metrics from AeroStyle.xml and drawn surfaces from WPF, and say which is which.

Principles

The Name and the Two Principle Sets

Aero has one name and two sets of principles, one for each end of the era. The name is a backronym, stated the same way in the Vista-era guideline pages and in the 2010 guide: "Aero stands for: authentic, energetic, reflective, and open."3 Neither document defines the four words one by one.

Vista's guidelines framed the design as twelve Top Rules.4 They are concrete and prescriptive, and several of them become pixels directly:

Rule Heading What it means on screen
1 Use the Aero theme and system font (Segoe UI) "Don't use fixed values for fonts, sizes, or colors." Everything comes from the theme.
3 Use the standard window frame, use glass judiciously "Glass is best used on small regions without text or interactive UI."
4 Use icons consistent with the Windows Vista style Up to 256 x 256 in Explorer, toolbar icons capped at 24 x 24
10 Clean up the UI "Remove borders, separator lines, boxes, and other visual 'noise'"; show detail on hover
12 Reserve time for "fit and finish" Pixel-level alignment and spacing passes

Windows 7's guide replaced the rules with eight design principles, headed by "Reduce concepts to increase confidence" and "Small things matter, good and bad". They are process questions rather than visual rules, and they only exist in the printed guide (pages 4 and 5).3

What Aero Is Not

The strongest rules in both sets are subtractive. They matter as much for a re-creation as the positive ones, because each one is a thing a theme could easily get wrong.

Aero is not Evidence
Glass everywhere "Using glass in your application is not something everyone should do." Glass is the frame plus small text-free regions touching it.
Custom-drawn chrome "Don't create your own nonstandard window frame by drawing in the non-client window region."
Colorful text "Use blue text only for links and main instructions."
Shadowed Shadows only for "your program's most significant content or objects being dragged", otherwise "visual clutter".
Mandatory Group Policy can force Windows Classic and switch off composition. Every Aero trait has to degrade.
A light/dark pair AeroStyle.xml has one set of system colors. The only alternatives are the High Contrast schemes.

The Mechanical Design DNA

Put together, the rules reduce to a short list a renderer has to reproduce:

  • Controls are neutral gray at rest. Blue means interaction: hover, press, the default button and selection. Nothing else is blue except links and the main instruction.
  • Surfaces are glossy: a face gradient split hard at 50 %, a 1 px dark border and a 1 px white inner ring, with small 2 to 3 px corners.
  • Segoe UI 9 pt with ClearType for every system font, including the caption.
  • A text-style ramp with color: the 12 pt #003399 main instruction is as recognizable as the glass.
  • No accent. The user's glass color tinted the frame, taskbar and Start menu, never a control.

The Tiers

The same aero.msstyles drove several rendering tiers, and the difference between them matters for what a theme draws:

Tier Visual styles Composition What changes
Aero Glass on on Translucent, blurred frame; live thumbnails, Flip3D
Windows 7 Basic (Vista's non-composited mode) on off Opaque frame. Same aero.msstyles with Composition=0
Windows Classic off n/a System colors only, the Windows 2000 look
High Contrast off n/a Classic construction in the contrast scheme

Glass and Basic differ only in the frame. Client-area controls look identical in both, which is the single most useful fact for a control framework: an opaque page is what the era's own client area drew.5

Foundations

Color

The Aero system colors are one fixed light palette. Vista and 7 agree on every slot except one, GrayText.1

Slot COLOR_* Value Notes
Window COLOR_WINDOW #FFFFFF Content areas, fields
WindowText COLOR_WINDOWTEXT #000000
Btnface COLOR_BTNFACE #F0F0F0 Dialog face and command band; Menu and MenuBar alias it
BtnHighlight / Light3d COLOR_3DHIGHLIGHT / COLOR_3DLIGHT #FFFFFF / #E3E3E3 Classic-tier bevel only
BtnShadow / DkShadow3d COLOR_3DSHADOW / COLOR_3DDKSHADOW #A0A0A0 / #696969 Classic-tier bevel only
GrayText COLOR_GRAYTEXT #808080 (Vista), #6D6D6D (7) The one system-color change between the two
Highlight COLOR_HIGHLIGHT #3399FF Selection, with white HighlightText
HotTracking COLOR_HOTLIGHT #0066CC Links
InfoBk / InfoText COLOR_INFOBK / COLOR_INFOTEXT #FFFFE1 / #000000 The Classic tooltip only
ActiveCaption → GradientActiveCaption #99B4D1 → #B9D1EA Basic and Classic captions
InactiveCaption → GradientInactiveCaption #BFCDDB → #D7E4F2
WindowFrame COLOR_WINDOWFRAME #646464
Scrollbar COLOR_SCROLLBAR #C8C8C8

GrayText darkening from #808080 to #6D6D6D raises disabled text on white from about 3.95:1 to 5.17:1 (derived with the WCAG formula; the era states no reason and no contrast ratio).

The text colors are real values in the TEXTSTYLE class, and they carry most of the era's identity:

Role Color Size
Main instruction #003399 Segoe UI 12 pt (16 px)
Instruction #003399 9 pt
Body title #000000 9 pt Bold
Body, secondary, label #000000 9 pt
Hyperlink #0066CC; hot and pressed #3399FF underlined; disabled #7E859C 9 pt
Control label (wizard and Control Panel buttons) #0066CC 9 pt
Tooltip and flyout body #575757 9 pt
Control Panel navigation link (Windows 7) #151C55; hot #074AE5 9 pt, Bold for the current page

Two warnings about the per-part values. First, AeroStyle.xml gives most controls only as FillColorHint/BorderColorHint/AccentColorHint: one color that summarizes a bitmap so a custom control can blend in. The push button's hints are fill #F4F4F4, border #8E8F8F and default accent #04CCFF, but the drawn button is a four-stop gradient. Second, the current Windows 11 Aero.msstyles still returns 309 of 319 comparable AeroStyle.xml values while drawing flat Windows 8 buttons. The hints were never updated when the bitmaps were redrawn, so a button sampled from a current Windows install is never an Aero reference.

The drawn surfaces share a small set of color families, all from WPF:

Family Values Used by
Rest face #F3F3F3 #EBEBEB ‖ #DDDDDD #CDCDCD Button, tab, drop-down list
Hover fill #EAF6FD #D9F0FC ‖ #BEE6FD #A7D9F5 Button, tab
Hover border #3C7FB1 Button, check box, radio, scroll thumb, slider thumb, tab
Pressed fill #C2E4F6 ‖ #ABDAF3 #90CBEB Button, check box and radio overlay
Pressed border #2C628B Button, check box, radio, slider
Disabled fill #F4F4F4, border #ADB2B5 Every WPF chrome
Neutral borders #707070 button, #8E8F8F check box, #ABADB3 field, #828790 list, #767676 tooltip, #959595 menu and scroll thumb

‖ marks a hard stop: two stops at the same offset.

Aero has no accent. DwmGetColorizationColor returns the glass color, and the DWM documentation describes it as "the color of the non-client region".6 No control color in AeroStyle.xml or in the WPF theme references it, so Highlight stays #3399FF whatever the glass color is. The only first-party colorization value is Windows 7's default, 0x6B74B8FC (#74B8FC at about 42 % alpha), from the .theme file format documentation. A theme that feeds the live OS accent into Aero controls is drawing Windows 10, not Aero.

The UX Guide also assigns color meanings, which are the natural source for severity colors:

Hue Meaning Where Windows uses it
Blue Start, commit, information Default buttons, links, main instructions, Help icons
Green Go, safe Normal progress, search-result URLs
Yellow Warning, caution Paused progress, warning icon
Red Error, stop Stopped progress, error and close icons
Glass, black, gray, white Neutral Frames, taskbar, normal text

Typography

Every system font in AeroStyle.xml is Segoe UI, 9, Quality:ClearType: caption, small caption, menu, message box and status. That is 12 px at 96 DPI, and the caption is Regular, not Bold. The only larger sizes are 12 pt (16 px) for main instructions, 11 pt for list-view group headers and 10 pt for flyout headers. Bold is the only weight besides Regular; the era has no Light or Semibold.1

Metric Value
UI font Segoe UI 9 pt = 12 px, ClearType
Line height at 9 pt 15 px (measured)
Dialog base units 7 x 15 px (average character width x height)
1 horizontal DLU 1.75 px
1 vertical DLU 1.875 px
Main instruction 12 pt = 16 px, #003399
Text on glass Caption font, black, with a white glow of about 12 px

Sentence-style capitalization became the rule with Vista, for everything but titles. The UX Guide disagrees with AeroStyle.xml in three places (it prints the instruction as black and disabled text as #323232, a value no theme file contains); for Win32-drawn text AeroStyle.xml wins.

Glass text is the one place Aero drops ClearType: subpixel rendering has no meaning over a translucent surface, so text on glass is grayscale-antialiased with a glow, drawn through DrawThemeTextEx with DTT_GLOWSIZE into a 32-bit buffer. On an extended glass frame a black GDI pixel is fully transparent, which is why plain black GDI text on glass came out as illegible gray.

Metrics

The UX Guide prints every size in both dialog units and pixels. There is a trap in it: the pixel column was converted with the 8 pt Tahoma factors (1.50 and 1.625 px per DLU), not the 9 pt Segoe UI factors (1.75 and 1.875) printed on the same page. Under the Segoe UI factors a 50 x 14 DLU button would be 88 x 26 px; the table says 75 x 23, which is what shipped dialogs measure. Draw the printed pixel values and do not re-derive them.3

Control Size
Command button 75 x 23 px (visible 73 x 21, since Win32 buttons carry a 1 px transparent border)
Text box, combo box 23 px high; each extra text line adds 16 px
Check box and radio row 17 px high, glyph 13 x 13
Static text line 13 px
Slider 24 px
Progress bar 160 or 355 x 15 px
Command link 41 px (one line) or 58 px (two lines)
Scroll bar 17 px
Caption bar 19 px (Vista), 21 px (7); padded border 4 px
Minimum target 16 x 16 px (mouse), 23 x 23 px (touch), 40 x 40 px for frequent touch targets
Spacing Pixels DLU
Dialog margin, unrelated controls 11 7
Related controls, button to button 7 4
Label to control, minimum between interactive controls 5 3
Non-interactive element to anything 3 2
Dependent-control indent 18 12

A Vista dialog is a white content area above a #F0F0F0 command area, separated by a 1 px #DFDFDF line. The band is 40 px tall for one row of buttons, which are right-aligned in the order OK/[Do it]/Yes, [Don't do it]/No, Cancel, Apply, Help. This split is what makes a screenshot read as 2009, and it is application layout rather than theme data.

Elevation and Shadow

Aero has no elevation system: no levels, no z tokens and no per-control shadow. It has three unrelated depth mechanisms, and a control framework owns exactly one of them.

Mechanism Owner Numbers
Window shadow DWM Not stated anywhere, for active or inactive windows
Popup shadow (CS_DROPSHADOW) USER32 WPF's SystemDropShadowChrome gives the only numeric spec
Inner highlight ring and pressed inner shadow The control artwork See the button below

The popup shadow is the popup's own rectangle displaced +5, +5 and filled #71000000 (44 % black). The whole shadow lives inside that displaced rectangle: a solid center wrapped in a 5 px fall-off band whose alpha multiplier steps 1, 0.743, 0.381, 0.124, 0.027, 0 at half-pixel steps, with radial corners at the popup radius plus 5. Because the displacement equals the band width, the top and left bands land under the popup, and what a user sees is a 5 px shadow down the right and along the bottom. The source says its fall-off is "based on the Win32 dropshadow fall off". It goes under menus, submenus, tooltips, combo drop-downs and toolbar overflows, and only when the system drop-shadow setting is on.8

Motion

No Vista or 7 source states a single control transition duration. The mechanism is era (Vista's uxtheme reads per-part TMT_TRANSITIONDURATIONS and plays them through buffered animation), but the values in a current aero.msstyles are Windows 11 data. What does exist:

Value Source
Hover in 300 ms, hover out 200 ms, press 100 ms WPF Aero ButtonChrome
Check box and radio press and check 300 ms WPF Aero BulletChrome
Default button pulse: 0 → 1 by 0.5 s, hold to 0.75 s, → 0 by 2.0 s, repeating at 10 fps WPF Aero
Most animations 100 to 300 ms, "preferably" 167 or 250 ms, starting within 50 ms UX Guide
Win32 marquee progress step every 30 ms PBM_SETMARQUEE documentation
WPF progress glow sweeps at 200 px/s, then pauses 1 s WPF Aero ProgressBar
Busy cursor 18 frames x 50 ms, a 900 ms cycle Measured on Windows 11's aero_busy.ani; not verified against Vista's copy
Menu and drop-down effects: switches (SPI_GETMENUANIMATION, SPI_GETMENUFADE, SPI_GETCOMBOBOXANIMATION) Durations not stated beyond AnimateWindow's "typically 200 milliseconds"
Windows 11 TRANSITIONDURATIONS: push button hover 225 ms, press 150 ms Out of era, never an Aero value

WPF's chrome animates only when client-area animation is on, the machine is on AC power and the render tier is above 0. Every WPF slider state change is instant.

Materials: Glass

Glass is Aero's only material, and it belongs to the compositor. An application never paints the blur, the tint or the reflection. It marks where glass should show, with DwmExtendFrameIntoClientArea (margins) or DwmEnableBlurBehindWindow (a region), keeps those pixels at alpha 0, and dwm.exe does the rest in the user's colorization color. The blur radius, tint weights, reflection texture and default opacity were never published. Windows 7 stores its colorization as registry values (ColorizationColor, ColorizationAfterglow and three balance weights) that no Microsoft document describes. The blend they feed (tint times color balance, plus desaturated blur times afterglow times afterglow balance, plus blur times blur balance) is known only from community reverse engineering of the DWM shader bytecode,7 so it is not presented here as an era fact.

Controls

Each table gives the drawn values. Unless a row says otherwise, gradients are vertical, top to bottom, and come from WPF Aero.

Push Button

The push button is four layers, outside in, and every other control follows its grammar.

Layer Value
Face #F3F3F3@0 → #EBEBEB@0.5 ‖ #DDDDDD@0.5 → #CDCDCD@1
Border 1 px, radius 2.75, #707070
Inner ring 1 px, inset 1.5 px, radius 1.75, #FAFFFFFF → #85FFFFFF
Label Segoe UI 9 pt, black, ClearType
State Face Border Extra
Normal gray, split at 50 % #707070 White inner ring
Hover #EAF6FD → #D9F0FC ‖ #BEE6FD → #A7D9F5 #3C7FB1
Pressed #C2E4F6 ‖ #ABDAF3 → #90CBEB #2C628B Ring removed; 2 px #80333333 → clear inner shadows on the left and top; the label does not move
Disabled flat #F4F4F4 #ADB2B5 Ring kept, text #ADADAD
Default normal face #707070 Inner ring solid cyan #F900CCFF (Win32 hint #04CCFF); the hover overlay pulses over it on a 2 s loop

The hard 50 % split is the signature. Two gradients meeting at a coincident stop are what make the surface read as glossy rather than shaded, and one smooth ramp over the full height loses it. The UX Guide's own Win32 screenshots measure #707070 and #F2F2F2 → #EDEDED ‖ #DDDDDD → #CFCFCF, within one to four levels of WPF. The border is the one visible disagreement: WPF and those screenshots draw #707070, the Win32 hint says #8E8F8F, and which one a real Vista drew is not settled.

Push buttons have six Win32 states (PBS_NORMAL, _HOT, _PRESSED, _DISABLED, _DEFAULTED, _DEFAULTED_ANIMATING) and no focused state. Focus is a dotted rectangle drawn on top of whichever state is current: in WPF a 1 px stroke with dash 1 2, inset 2 px, in the control-text color. Focus cues stay hidden until the user drives the UI with the keyboard (UISF_HIDEFOCUS). In WPF, keyboard focus makes any button pulse like the default one, mirroring the Win32 rule that a command button becomes the default when you tab to it.

Command links have no frame at rest: a 12 pt #151C55 label and note next to a green arrow, 41 or 58 px tall, with a pale cyan 1 px frame only on the default link.

Check Box and Radio Button

The check box stays light when checked. Aero has no filled toggle.

Layer Normal Hover Pressed Disabled
Border #8E8F8F #3C7FB1 #2C628B #ADB2B5
Well #F4F4F4 #DEF9FA #C2E4F6 #F4F4F4
Inner rim (diagonal) #AEB3B9 #C2C4C6 #EAEBEB #79C6F9 #79C6F9 #D2EDFD #54A6D5 #5EB5E4 #C4E5F6 #E1E3E5 #E8E9EA #F3F3F3
Inner fill, 7 x 7 (diagonal) #CBCFD5 → #F7F7F7 #B1DFFD → #E9F7FE #7FBADC → #D6EDF9 none
Check mark #31347C #31347C #31347C #AEB7CF
Mixed square #2FA8D5 → #25598C #33D7ED → #2094CE #17447A → #218BC3 #C0E5F3 → #BDCDDC

The glyph is 13 x 13 px, square, in five layers. The Win32 screenshot pixels match #8E8F8F/#F4F4F4/#AEB3B9/#CBCFD5 exactly, and equal AeroStyle.xml's hints; no other part of the set agrees this closely across sources. The mixed state is a filled blue square with a dark inner border and a half-white highlight, which the UX Guide calls "a solid blue" box. It is the one place the check box turns blue. Pressing an unchecked box previews the check at 70 % opacity in WPF.

The radio button is the same well made round. The checked dot is a radial gradient lit from its top-left quarter point, #E5E5E5@0.1 → #5DCEDD@0.35 → #0B82C7@1, inside a 1 px #193B55 ring. Hover brightens it to #FFFFFF/#74FFFF/#0DA0F3, press darkens it to #95D9FC/#3A84AA/#075483.

The Win32 BP_CHECKBOX part has 20 states in both SDKs, including the implicit and excluded states Vista added; no era source documents their look. Aero has no toggle switch.

Text Box

State Border (top → sides → bottom)
Normal #ABADB3 → #E2E3EA → #E3E9EF
Hover #5794BF → #B7D5EA → #C7E2F1
Focused #3D7BAD → #A4C9E3 → #B7D9ED
Disabled #ADB2B5, fill #F4F4F4

The border is a 1 px gradient over an absolute 20 px span, with stops at 1 and 1.4 px, so the top edge is dark and the sides fade lighter: the field reads as sunk under a shadow at the top. The corner radius is 1, not the button's 2.75. Focus turns the border blue and there is no dotted rectangle inside a field; a theme that draws one is drawing Windows 95. The prompt is gray text that disappears on focus (#575757), and the password mask is ● (U+25CF). Win32 and WPF agree on this control, and Windows 7 screenshots measure the same stops.

A spin box is a text box with an up-down control flush inside its right edge: two stacked halves, each a small button face with a 7 x 4 triangle. No era source gives its width, so libwinui uses the up-down control's default, SM_CXVSCROLL, the same 17 px as the scroll bar, for NumberBox's inline spin buttons.

Combo Box

Vista rebuilt the themed combo box into two looks. A drop-down list (CBS_DROPDOWNLIST) is drawn as a push button, full width, and stays in the pressed look while its list is open. An editable combo is a text box with a square drop button as wide as the 17 px scroll bar. The arrow is a 7 x 4 px solid black triangle (#AFAFAF disabled). The list is white, square, framed in WindowFrame #646464, highlighted in flat #3399FF with white text, and carries the popup shadow.

Slider

WPF's slider thumb is an 11 x 22 block (radius 1), or a 10 x 18 pointer when ticks sit on one side, over a 4 px #E7EAEA groove whose border fades from #AEB1AF at the top to white.

State Thumb fill Outline
Rest white → #F0EFEF → #D6D5D5 #929292
Hover (and keyboard focus) white → #B8E2F9 → #B0DFF8 #3C7FB1
Pressed #B8E4FA → #5EB4E3 → #4C8BB4 #2C628B

A white 1 px inner ring sits inside the outline; ticks are #C4C4C4. There is no value fill: a Win32 trackbar has no filled part. Every state change is instant. The Win32 hints (green accent #47C446, border #767676) disagree with WPF and are hints only.

Progress Bar

A progress bar's color is its state. AeroStyle.xml gives the PP_FILL hints: normal green #52D763, error red #E40021, paused yellow #DCD400, and a partial teal #0094AD that no public message can reach. PBM_SETSTATE (new in Vista) exposes the first three. The Win32 bar is smooth; the chunked parts are marked deprecated. WPF's indicator is a glossy #01D328 under a green wash (about #5BE969 effective) with a 100 px white glow sweeping across it; the WPF track is #BABABA → #C7C7C7 → #BABABA. Taskbar progress is Windows 7 only.

libwinui draws WPF's bar under Aero: 15 px tall in a #B2B2B2 → #8C8C8C frame, the track's top 53.85 % glassy, the indicator with its dark 15 px ends, the warm light in its lower half and its own gloss, and the glint crossing it at 200 px/s with a 1 s rest. Paused and error, which WPF has no look for, swap the indicator to the Win32 yellow or red and drop the wash and the glint. An indeterminate bar runs a 100 px band of the indicator's #01D328 green over the gray track, fading out at both ends, as WPF's does.

Scroll Bar

17 px wide. The thumb uses the same split-gloss grammar as the button.

State Thumb (four stops) Border
Rest #F3F3F3 #E8E8E9 ‖ #D6D6D8 #BCBDC0 #959595
Hover #E3F4FC #D6EEFB ‖ #A9DBF6 #A4D5EF #3C7FB1
Pressed #CAECF9 #AFE1F7 ‖ #6FCAF0 #66BADD #15598A

The track hint is #F4F4F4. Arrow buttons show no chrome until the pointer enters the bar. The Win32 thumb hint is a lavender #ABAFDA, which matches neither WPF nor era screenshots.

libwinui draws this bar under Aero in place of the overlay one, after WPF's ScrollChrome: a permanent 17 px gutter that ui::Scroll gives up while the bar shows (the content is measured again in what is left), a #E1E1E1 → #EDEDED → #E3E3E3 track running across the bar (#F4F4F4 when there is nothing to scroll), arrow buttons as long as the bar is thick with a 7 × 4 #707070 glyph that turns #212121 and gains the thumb's chrome when the pointer enters the bar, a thumb with three gripper lines once it is longer than 15 px, and a #F0F0F0 corner cell where two bars meet. It never narrows or fades. TableView gets the same pair: its rows give up the right gutter and its columns the bottom one.

Vista is the first Windows with themed menus. The system colors make Menu and MenuBar equal to Btnface #F0F0F0, and MenuHilight equal to Highlight, which is the flat-menu color rather than the themed one. The themed look exists as numbers only in WPF:

Part Value
Popup #F5F5F5, 1 px #959595 border (Win32 hint #F4F4F4)
Icon gutter 28 px, #F1F1F1, closed by a #E2E3E3 / white line pair
Hot item #34C5EBFF → #3481D8FF fill inside a 1 px #8071CBF1 border, radius 2

libwinui draws these menus under Aero. The popup is square, its rows padded 2,3,2,3 with a 24 px icon column, a 37 px gap before the shortcut and a 17 px column for the 4 x 7 cascade arrow. A checked item shows WPF's #0C12A1 check in a 22 px #E6EFF4 box in place of its icon. The separator is a #E0E0E0 and white line pair in a 12 px slot, starting at the gutter's edge. There is no pressed look, and keyboard focus shows as the hot row. The menu bar sits on WPF's gray gradient, a hovered item is only outlined in #90717070, and an open one is pressed in with a #28717070 → #90717070 fill.

Tooltip

The Aero tooltip is not yellow. Its body runs #FFFFFF → #E4E5F0 inside a 1 px #767676 border, radius about 2, with #575757 text and the 5 px popup shadow. WPF, AeroStyle.xml's text color and the UX Guide's screenshots agree exactly. #FFFFE1 is the Classic tier's COLOR_INFOBK, still what GetSysColor returns, and so a tooltip drawn from system colors comes out in the wrong tier. Balloons use the same body with a rounder corner and a 12 pt #003399 title. Tooltip timings derive from the double-click time: 500 ms initial, 5 s auto-pop, 100 ms reshow.

Lists, Trees and Tabs

A stock comctl32 list or tree view selects with flat Highlight #3399FF and white text. The rounded light-blue Explorer selection is opt-in (SetWindowTheme(hwnd, L"Explorer")), its gradients live only in the bitmaps, and WPF gives them only to GridView rows (hot #F1FBFF → #D5F1FE, selected #D9F4FF → #9BDDFB, radius 2, text color unchanged). #828790 is the list, tree and list-box border in three independent sources. Tree glyphs are 6 x 6 triangles: hollow #989898 collapsed, filled #595959 expanded.

WPF tabs use the button face at rest and the hover blues on hover; the selected tab is flat #F9F9F9, grown by 2 px to merge into a #F9F9F9 page. The Win32 tab hint carries an orange accent #FFC83C that no drawn source confirms. libwinui's Tabs takes the WPF look under Aero: #8C8E94 borders on three sides, the gray two-band face (#F3F3F3 → #EBEBEB, #DDDDDD → #CDCDCD), the blue one with a #3C7FB1 border under the pointer, and the content 4 px inside the framed page.

The Control Panel's task pane is a surface of its own, and its links have their own colors. AeroStyle.xml ties the two together in a comment: "Caution disabled navigation link text color must show over the NavigationPane Fill".

Vista Windows 7
Link text #FFFFFF #151C55
Hot and pressed #D9F3F3 #074AE5
Disabled #AABBB6 #808080
Current page white, Bold #151C55, Bold
Pane fill teal hint #56938A pale blue gradient #EDF2F9 → #DEE8F6 → #EDF5FF (measured)

The pane's FillColorHint stayed #56938A in the Windows 7 SDK, but navy text on dark teal would be unreadable. The hint is stale, and the Windows 7 fill is measured from screenshots rather than stated. Nothing in the era slides an accent bar beside the selected row: the current page is navy Bold.

Group Box and Dialogs

The group box border is #D5DFE5; the AeroStyle.xml hint, the WPF brush and a measured screenshot agree to the digit. The task dialog is two-band: a white primary panel over the #F0F0F0 command band, a 32 px icon at (10, 10) on a 10 px grid, the main instruction in 12 pt #003399. Aero never dims the desktop behind an ordinary modal dialog; the only first-party dimming is UAC's secure desktop.

libwinui's GroupBox draws this frame under Aero: 1 px #D5DFE5 with a 2 px corner step, the black title 12 px in with a 2 px gap in the frame either side, the frame's top at the title's middle, and the content 16 px down, 9 px in and 11 px above the bottom.

Reproducing It Today

A small form drawn with ThemeVariant::Aero
libwinui's Aero theme, in a window opened with Frame::Themed.

Aero is the lucky era for a re-creation. Its look was published twice, and one of the two implementations, WPF's, states the drawn surfaces as numbers under a license that permits reuse. Where WPF's values can be checked against pixels measured from the UX Guide's own Win32 screenshots, they agree to within one to four levels per channel. The bitmap artwork in aero.msstyles is not needed for most of it, and it must not be redistributed anyway.

Two rules for using the sources. Transcribing values (gradient stops, radii, durations) is not the same act as copying code: WPF's chrome classes are MIT, so a lifted render method carries the license notice with it, while a transcribed number does not. And a current Windows install is not a source: its Aero.msstyles still returns almost every AeroStyle.xml value while drawing flat Windows 8 bitmaps (see Color).

Exact From the Data Above

Area What reproduces exactly
System and text colors Every AeroStyle.xml value, including the #003399 instruction ramp and GrayText per release
Push button, check box, radio, scroll thumb, slider, tooltip WPF's gradients, radii, inner rings and per-state colors; antialiased vector geometry is what WPF drew too
Text box The three-stop border gradient; Win32, WPF and screenshots agree
Type Segoe UI still ships, ClearType maps onto DirectWrite's subpixel antialiasing, and the 9 pt = 12 px ramp is stated
Popup shadow WPF's SystemDropShadowChrome geometry: #71000000, +5 / +5, the five-step fall-off
Timings WPF's durations, labeled as WPF's rather than Win32's
Selection, links, dialog surfaces Flat colors from the system palette

Approximated, and Why

What Why it cannot be exact
Push-button border WPF and one set of era screenshots draw #707070, the Win32 hint says #8E8F8F. Which one a real Vista drew is not settled
Explorer-style list and tree selection Its rounded light-blue gradients exist only as bitmaps; WPF's GridView row colors are the nearest numbers
Anything drawn per pixel in the Win32 art Scroll arrows, tab corners and similar parts are bitmaps; geometry reproduces their shape and color, not their exact pixels
Win32 transition durations The mechanism is era (TMT_TRANSITIONDURATIONS), but no Vista or 7 value survives; a current Aero.msstyles holds Windows 11 values
The Vista column Vista and 7 differ in GrayText, the navigation-pane colors and the caption height; everything else is shared, so one set of values with those few exceptions covers both
Text on glass DrawThemeTextEx's glow still works, but the glass under it does not (below)

Cannot, on a Current Windows

  • Glass in the client area. "Beginning with Windows 8, calling this function doesn't result in the blur effect": DwmEnableBlurBehindWindow is inert.9 The compositor's blur radius, tint weights, reflection texture and opacity were never published, so any glass today is a construction. Mica and Acrylic are not substitutes: they are saturated and noise-textured, a different material from a different decade.
  • The glass frame. The non-client frame belongs to DWM, which draws the frame of the running OS. A libwinui window opened with Frame::Themed draws Aero's frame itself. While transparency effects are on, the host asks Windows to blur what is behind the window, through an undocumented user32 call (SetWindowCompositionAttribute), and the frame paints glass over the blur: Windows 7's default "Sky" color #74B8FC at 42 %, three faint reflection streaks, the outline and highlight, and a white glow behind the title. DWM's own glass also mixed in an afterglow scaled by the backdrop's brightness, which a window cannot reach, so the tint is a close match rather than the same composite. The blur radius was never published. With transparency off, full screen, or on a Windows release where the call stops working, the frame is the opaque Windows 7 Basic frame, measured from the Basic art the style still carries. Vista's own Basic frame is not available, and the window shadow stays DWM's. The Basic frame's top corners are cut from the window with a region, from the caption art's 4-row mask, the way Windows 7 Basic shaped its windows, which costs the shadow. A region does not clip the blur, so on glass the frame leaves those pixels unpainted instead: they show the bare blur, and the shadow stays.
  • The artwork. The era's aero.msstyles bitmaps are Microsoft's and cannot be shipped with another product.

The loss is smaller than it sounds. The era itself confined glass to "small regions touching the window frame without text" and warned against using it where "a plain window background would be more attractive or easier to use".3 Every era example, IE7's address band or Media Player's control strip, is a frame extension holding chrome, never a page behind content. Since client-area controls looked the same in the Glass and Basic tiers, an opaque page is what Aero actually drew in the client area, not a low-fidelity stand-in for it.

Not Theme Data

A theme alone does not make an application look like 2009. These belong to layout, content and behavior:

  • the white content area over the #F0F0F0 command area, and the 40 px command band;
  • the UX Guide's sizes and spacing (75 x 23 px buttons, 11 / 7 / 5 / 3 px spacing, the 18 px indent);
  • button order (OK, Cancel, Apply, Help, right-aligned), sentence-style capitalization and the main-instruction text itself;
  • command links, task dialogs and the Ribbon, which are controls in their own right;
  • focus cues hidden until keyboard use (UISF_HIDEFOCUS) and tooltip delays derived from the double-click time, which are system behavior.

High Contrast

On Vista and 7, High Contrast is not an Aero variant. Selecting a High Contrast theme turns visual styles off, and the whole UI renders in the Classic model from system colors, with no glass, no gradients and no DWM features: "Users of high contrast themes must use the Windows classic UI."10 Every themed part falls back to its classic construction, and owner-drawn controls were expected to keep a second code path for it. The in-box schemes the UX Guide tests against are High Contrast Black and High Contrast White. No era source states their default color values, so a re-creation reads the contrast colors from the running system rather than embedding a table.

Related eras: Luna came before, Metro replaced it with Windows 8 in 2012.

Sources

This page ranks its evidence in tiers. First-party machine-readable sources come first (the SDK AeroStyle.xml files and headers, and the WPF Aero theme source), then the written specification (the UX Guide, the Vista UX Walkthrough and the Vista-era guideline pages), then samples and reimplementations, then values measured from the UX Guide's own lossless screenshots. Values read from a Windows 11 Aero.msstyles are out of era and count only where they match an era source. Community reverse engineering ranks last; its one use here, the Windows 7 colorization blend, is labeled where it appears.


  1. AeroStyle.xml, "Windows Longhorn Aero Style Guide Definition", in the Windows SDK Update for Windows Vista (v6.0A, February 2007; file dated 2006-10-30), and "Windows Vista Aero Style Guide Definition", in the Windows SDK for Windows 7 (v7.0, file dated 2009-07-14; identical in the Windows SDK 7.1). With the same SDKs' vsstyle.h, vssym32.h, Uxtheme.h and dwmapi.h. ↩↩

  2. WPF Aero theme, PresentationFramework.Aero in dotnet/wpf (read at commit e447f1dd), src/Microsoft.DotNet.Wpf/src/Themes/: Aero.NormalColor.xaml, ButtonChrome.cs, BulletChrome.cs, ListBoxChrome.cs, ScrollChrome.cs, DataGridHeaderBorder.cs and the shared SystemDropShadowChrome.cs. MIT licensed; values are transcribed, not code. ↩

  3. Microsoft, Windows User Experience Interaction Guidelines for Windows 7 and Windows Vista (the UX Guide), last updated 29 September 2010, 882 pages; a copy is kept at the Internet Archive, and the text lives on as UX guidelines for Windows desktop apps (MicrosoftDocs/win32, desktop-src/uxguide/). Also Microsoft, Windows Vista User Experience Walkthrough Guide, August 2006. ↩↩↩↩

  4. Microsoft, Windows Vista User Experience Guidelines on MSDN, last updated October 2007: "Top Rules for the Windows Vista User Experience" (aa511327), "Aero Aesthetics" (aa511291) and "System Font (Segoe UI)" (aa511295), read through Wayback Machine captures from 2008. ↩

  5. Microsoft Learn, Theme file format: the Windows 7 Basic theme is Aero.msstyles with Composition=0; the Windows 7 default ColorizationColor=0x6B74B8FC. ↩

  6. Microsoft Learn, DwmGetColorizationColor and the DWM composition overview. ↩

  7. Community reverse engineering of the Windows 7 DWM shaders, confirmed in Maplespe/DWMBlurGlass discussion #195 (November 2024). Not a Microsoft source. ↩

  8. Microsoft Learn, Window class styles, CS_DROPSHADOW; the shadow geometry itself is WPF's SystemDropShadowChrome.cs. ↩

  9. Microsoft Learn, DWM blur behind overview. ↩

  10. Microsoft Learn, Supporting high contrast themes. ↩