Fri, March 30, 2007, 11:11 AM under Vista
When I do my talk showing how to call Vista-only native APIs
to enhance your Windows Forms applications on Vista, occasionally someone asks about achieving the same in Windows Presentation Foundation (WPF). My answer is always the same of course: "WPF does not include any Vista-only APIs so you still have to pinvoke for the features that I demonstrate."
For example, many features rely on overriding the WndProc method to hook into the main message loop and deal with some windows message (WM_):
protected override void WndProc(ref Message m)
// e.g. deal with message for
// composition changed, power state notification, restart manager aware etc
In WPF you can achieve that with code like this:
void Window1_Loaded(object sender, RoutedEventArgs e)
source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
// TODO handle WM_
While the previous statement/reply/example is true, some of the things I show in my talk rely on using a control's handle
. For example, adding a shield to a button (for UAC
), the new button style known as CommandLink
, TextBox cue banner
, Vista TreeView
etc. In those cases, for WPF you can't use pinvoke to SendMessage
or subclass the control (Get/SetWindowLong
etc) since the WPF controls are drawn from scratch. Instead, you have to manually draw the effect you are after. The Windows SDK
has an example of a CommandLink fully drawn for WPF but I couldn't see any of the others (e.g. a button with a shield) so this is a great opportunity for a WPF developer to flex their creativity muscles and create the Vista control behaviours/appearances for WPF (since pinvoking doesn't help there). Be sure to let me know if you get round to implementing anything like that in the public domain...
Fri, March 30, 2007, 09:51 AM under Windows
Regular readers will recall my blog entries about managed preview handlers on Vista. Rajesh dropped me a comment pointing to his codeproject article
. Let him know what you think.
One of the aspects I like about his preview handler is that it uses a tooltip to offer more info. Regardless of how easy/hard the visualization of a file is, adding a tooltip for extra info is a simple yet awesome idea IMO - good job!