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?
7 Answers
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).

- 4,973
- 1
- 32
- 56
-
+1: the correct way to write applications that don't use the OS look and feel is NOT TO DO IT AT ALL. – Dan Davies Brackett May 18 '10 at 20:29
-
1But I think users like unique look and feel of applications and many companies do that. – grigy May 18 '10 at 20:38
-
@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. – Sasha Chedygov May 18 '10 at 20:43
-
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 May 18 '10 at 20:46
-
I made a Java-based UI and I just combined most of the the good parts people praised about older Windows, some Windows 8 styling (very little) and some of my own design. It's not about trying to out-do the giants. It's about doing something different and making it their own. This is no different than those rooting their phones and tablets just to customize it their way to give it a personal feel. And you cant advance in anything by doing the same old thing and not questioning on how you can make something different or better. Or do you like rolling on logs to move from point A to point B? – Mar 26 '13 at 16:49
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.

- 1,910
- 20
- 44
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.

- 6,744
- 1
- 21
- 26
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.

- 40,133
- 25
- 115
- 157
-
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 May 18 '10 at 20:42
-
For example Google Talk. The main window does not look like a standard Windows application. – grigy May 18 '10 at 20:43
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.

- 3,207
- 9
- 37
- 55
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.

- 396
- 2
- 4
I know this question is 10 years old but none of the answers mention using an option in visual studio, dont know if it existed at the time.
Theres an option to remove the border of the window in visual studio (called borderStyle). Thats the easiest way to do it, using C#. After removing the border, all you have to do is create a new interface. If you're looking to do it in C++, i think you need to use DWM. I will let an example i found here.
https://github.com/melak47/BorderlessWindow
Another example (maybe without DWM? didnt test):
There is a lot of people disencouraging to do it in this thread but there's no reason to not do it, if you know what you're doing your application can look great.

- 47
- 4