views:

141

answers:

6

There are many applications for Windows these days that don't use native windows controls, don't have standard window frames and generally look different. What are some recommended techniques for creating such interfaces?

+1  A: 

From a design aspect, if your interface isn't going to follow documented standards (like the Windows UI guidelines), it has to be intuitive. I think the new generation of Windows applications will go through a growing phase in a manner similar to the early days of the Web. After a time, some standards or common themes will evolve.

Rob Windsor
+2  A: 

There are good reasons not to. Like that you will most likely not do a better job than Windows does. (Maybe it will look better (in your opinion), but will it behave?). Or that it's not what most users expect. Or that it will look like s**** on Windows 2011.

That said, it's not hard. You simply handle the WM_NC* events like WM_NCPAINT or WM_NCHITTEST. NC stands for Non Client (window area). And of course, there is a trick on Vista/Win7 (you have to announce it to the DWM).

Fozi
+1: the correct way to write applications that don't use the OS look and feel is NOT TO DO IT AT ALL.
DDaviesBrackett
But I think users like unique look and feel of applications and many companies do that.
grigy
@grigy: You could make that argument for Windows XP, maybe, but definitely not for Vista/7/next. Vista introduced a consistent look and feel across the OS, and applications that don't adhere to those standards, quite frankly, look like crap. That's like making a Windows-style application on Mac OS X--you might think it looks better, but it's so inconsistent with the rest of the OS. And I haven't even touched on the usability aspect.
musicfreak
De gustibus non est disputandum - I usually don't like them, especially if they don't use Aero. And even if I like the looks, it can be very annoying when it fails. Just look at Steam. If it hangs, you can't even drag it out of the way because it's (not) handling its WM_NCHITTEST messages.
Fozi
+1  A: 

From an implementation aspect, you could employ WPF (Windows Presentation Foundation) assuming you code for .NET :) It has pretty bunch of skinnable controls, that may look like native and may not.

Bubba88
A: 

Can you give us some sample applications? Some apps that don't use native windows controls use cross-platform GUI libraries, like Qt for C++ or Tkinker. These maintain the same look across different platforms.

I wouldn't really recommend making your user interface different deliberately. You don't stand to gain much. Your controls are almost always going to be buggier than native controls, and you are requiring the user to learn something new. Now, if you're controls add a large enough value to be worth the users' time it can be okay. But making them get used to different looking buttons is rarely worth it.

CrazyJugglerDrummer
The software for the VPN and for the WiFi on my work laptop (for which I assume no responsibility) both are non-standard GUIs. I have no idea why. The anti-virus uses native borders, but non-native controls, possibly as there isn't a native contents list/tab hybrid. I doubt any of them are cross-platform.
Pete Kirkham
For example Google Talk. The main window does not look like a standard Windows application.
grigy
A: 

I`m not sure if this answer your question.

You can use third party skinning controls like from Infragistics, or SkinSoft for example. But like Bubba said I`d recommend going for WPF.

RHaguiuda
A: 

Model-View-Controller! It's as valuable here as in web apps or anywhere else. Be sure to keep the part of your program that generates the custom UI separate from the part of your program that flashes the BIOS.

Ken