The VCE Study Score Archive has been updated for 2011.
Download the updated files here.
The VCE Study Score Archive has been updated for 2011.
Download the updated files here.
Modern frameworks like the Windows Presentation Foundation, its relative Silverlight and the upcoming Windows Runtime make it easy to add animations to a program’s graphical user interface. When implemented well, animations subtly improve the user experience and can demonstrate a high level of polish in your application. The Zune client software and Windows Live Messenger both feature beautiful animations – coincidentally, both were written with internal Microsoft frameworks (Iris and ‘DirectUI’, respectively; the second is apparently unrelated to anything in WinRT). The Twitter client MetroTwit shows what can be done in WPF (its interface was inspired by the Zune software and the Metro design language).
There are times, however, when animations may become detrimental to the user experience. Animations may appear choppy on lower-end or older systems (especially with heavy frameworks like WPF), and in general they should be disabled entirely for Remote Desktop Connection sessions (only very fast networks with low latency may be able to handle them). Jossef Goldberg from the Visual Studio team has written about the efforts made to bring the performance of Visual Studio 2010 over remote connections up to par, and while his advice is mainly about WPF, the same principles apply to other frameworks, also.
So, how can we decide whether animations should be disabled or not? The answer will likely vary from project to project, but there are a few things that we can do:
In Win32, use the GetSystemMetrics function to get the SM_REMOTESESSION metric (a non-zero result means it is a remote session). In WPF, use the SystemParameters.IsRemoteSession property in the System.Windows namespace. In Windows Forms, use the SystemInformation.TerminalServerSession property in the System.Windows.Forms namespace.
Windows Vista introduced many new animations to common controls like buttons (notice the smooth glow effect and compare it to the binary states found in Windows XP). Regrettably this change made most owner-drawn implementations look shoddy since they mostly lack animation (e.g. buttons in Firefox), but that’s a topic for another post.
Anyway, these animations can be switched off in the following dialog (aside: the list box was mercifully increased in size in Windows 7, though the window still isn’t resizable):
If the user has disabled animations here, it’s probably a good idea to respect that choice in any program you write. We can use the SystemParametersInfo function with the SPI_GETCLIENTAREAANIMATION parameter to check the system setting (or use the SystemParameters.ClientAreaAnimation property in the System.Windows namespace, but note that this always returns true in Windows XP). This only applies to Windows Vista and later.
The RenderCapability.Tier property in the System.Windows.Media namespace gives an indication of the graphical capabilities of the system. There are currently 3 tiers, and while the exact meaning may change between .NET releases (as it did in .NET 4.0), this property can be used to help determine what animations, if any, should be enabled.
It can’t hurt to give the user a choice about animations. The remote session checks described above will work for RDP, but there are other technologies available, and we don’t want to punish VNC users by invalidating the entire window 60 times per second for some fancy animation, even if we can’t tell that they’re connecting remotely. If exposing such an option in the UI doesn’t make sense, at least offer it as a command line switch.
Snooping around PresentationFramework.Aero.dll in .NET Reflector, I happened to come across the ‘Animates’ property in the ButtonChrome class (Microsoft.Windows.Themes namespace):
1 2 3 4 5 |
private bool Animates { get { return ((((SystemParameters.PowerLineStatus == PowerLineStatus.Online) && SystemParameters.ClientAreaAnimation) && (RenderCapability.Tier > 0)) && base.IsEnabled); } } |
Similar properties can be found in the other *Chrome classes. Checking the computer’s power status isn’t something covered in this article, but it’s certainly a good idea.
The following is based on the Windows Developer Preview and might not accurately represent the final version of Windows 8.
A significant change in Windows 8 is the removal of support for Windows classic theming. In the Windows Developer Preview, there is no Windows Classic theme, and all themes (including Windows Basic and the four high contrast themes) use the Desktop Window Manager (DWM) for desktop composition (in Windows Vista and Windows 7, it was only enabled for Aero themes).
While some users may miss the Windows Classic theme (it might return in later builds, of course), this is definitely a positive development. All themes will receive the benefits of hardware acceleration, and there will no longer be the need to maintain a separate code path for when the DWM is disabled (as long as the program targets only Windows 8 or later).
In order to maintain compatibility with earlier versions of Windows, when a high contrast theme is selected, Windows 8 will simulate the Windows classic theming model unless an application specifies Windows 8 as a supported OS in its application manifest. The sample program I made for the previous post did not include such a manifest, so it doesn’t work correctly in the Windows Developer Preview with high contrast themes:
Compare this to a task dialog:
(The button in the WPF window is also drawn incorrectly, but presumably that will be fixed in .NET 4.5.)
Adding the appropriate manifest to the application causes it to work as it should:
I’ve updated the sample code in the previous post to include the manifest file.
In a post earlier this year, I investigated how to retrieve information about theme fonts in Windows. Briefly, the Visual Styles APIs can be used when visual styles are enabled, but values need to be hard-coded (to some extent) otherwise.
Andrew Powell commented on my previous post noting difficulties in implementing the GetThemeFont function in managed code. In this post, I’ll demonstrate how to implement the relevant functions in a simple WPF project. In particular, I’ll focus on displaying information about the ‘main instruction’ text style as seen in Task Dialogs.
Read on for details.
GNU CLISP under Windows sets the default icon for Lisp files (.lisp, .lsp, .cl) to this:
I decided to make a new icon based on the style found in recent versions of Visual Studio:
This is what I came up with:
The .ico file includes 32-bit images at sizes 256x256px (PNG-compressed), 48x48px, 32x32px and 16x16px. The font used to draw the lambda is Cambria Math.
lisp.ico
32,630 bytes; SHA-1: 848C7B8A6A7CDE3115893CE63848CEF2F4A33762
After using the Windows Developer Preview (that is, Windows 8 pre-beta) build for a little while, I’m not at all sold on the Start screen as a replacement for the Start menu for keyboard-and-mouse users. I’m not giving up all hope yet, though – I wasn’t overly fond of the Backstage view when I first tried early builds of Office 2010, which similarly replaced what was a simple menu in Office 2007 with a full screen experience, but I’ve since grown to like it. And, of course, development is far from over at this stage.
I’ll be very surprised if I end up using any ‘Metro style’ applications on my desktop or laptop PCs, however. I’m happy to revisit this statement after Windows 8 launches, but the experience does seem much more suited to tablet and phone form factors (and I’d take a traditional PC any day).
There doesn’t seem to be an official way to disable the Start screen, which is not surprising (it would be akin to disabling the ribbon in Office 2007/2010). What is surprising is that it’s actually quite easy to do: just rename shsxs.dll in %windir%System32 and restart (thanks givebackstartmenu): voilà! The highly usable Start menu of Windows 7 returns. It will be interesting to see whether this remains an ‘option’ in future builds. Note that this disables the modern Task Manager, and potentially breaks other functionality, too.
A less radical option is enabling the Group Policy setting ‘Do not show the Start Menu when the user logs in’ (User ConfigurationAdministrative TemplatesStart Menu and Taskbar). This will open the traditional desktop directly after logging in, skipping the Start screen (but leaving it enabled). My initial impression is that this should be the default for non-touch/stylus form factors, but I’ll keep an open mind about that. Unfortunately, this setting isn’t actually working for me (possible PEBKAC). It seems to be connected to a DWORD in the Registry called ‘DontShowStartMenuOnLogin’. Modifying this also has no effect in the Windows Developer Preview.
Not wanting to pay the full retail price for a Microsoft Xbox 360™ Wireless Gaming Receiver for Windows®, I bought a knock-off from eBay. It turns out that you do get what you pay for – the drivers that came on the 80mm Mini CD were very old and didn’t work with Windows 7.
For anyone in a similar situation, here’s what I did to get everything working as it should (thanks are owed to jamesw1 for finding this solution):
Finally, apparently these drivers are recommended for some applications: XInput Force Feedback Driver (XInput 用フォース フィードバック ドライバ). You should be able to navigate the Japanese on that page – the platforms and languages are spelled out quite clearly.
Update (2011-09-28): My own instructions didn’t work when I tried to install Eclipse and CUSP on a new machine. After much trial and error, I finally got a working setup by downloading a newer version of CUSP from here (version 1.0.414). This seems to work with SBCL 1.0.51 and Eclipse 3.7 (I downloaded the Classic package, in case that is significant). There no longer seems to be any need to copy the SBCL files to the plugin sub-directory. The CUSP maintainer has forked CUSP into a new project called Lispdev, which might be worth checking out.
For anyone struggling to install CUSP (a Lisp plugin for Eclipse) in a Windows environment, I hope these steps will work for you:
Everything should now work correctly (open the Lisp perspective in Eclipse via Window → Open Perspective → Other → Lisp).
Today I released an update to the VCE Study Score Archive: scaling data for 1998 and 2000-2004 is now included (I hadn’t realised that the scaling reports were available on the VTAC website).
Download the updated files here. Note that the 2010 data has not been modified.
The Synaptics Gesture Suite enables a variety of useful features for supported laptop touchpads. My favourite is ‘ChiralScroll’, which allows you to scroll by making a circular motion on the touchpad. Synaptics actually offers generic drivers on their website now, so you can download them directly without needing to go via the usual websites.
Unfortunately, the cursor used for ChiralScroll leaves a lot to be desired:
At the very minimum, it doesn’t mesh well with the cursors found in the Windows Aero theme. I decided this would be a better cursor:
I’m misappropriating the ‘Move’ cursor here (a separate metaphor), but I think the image fits with scrolling to some extent. Let me know if you can come up with a better alternative.
Read on for instructions on replacing the cursor.
Continue reading “Changing the Synaptics ‘ChiralScroll’ Cursor”