I write large mission critical apps using strictly the Windows Api. The reason it is advantaegous for me is that I do both desktop programming and Windows CE programming. Using SDK Win32 development techniques allows me to use exactly the same programming architectures in both places, and the truely amazing thing about that is that I even do it using different languages! The Win32 Api is language agnostic although it is documented in C. However, other programming languages can use it quite easily.
For Windows desktop work I use PowerBASIC, which allows me to be very productive on that platform using SDK Win32 techniques augmented with PowewrBASIC's extensive built in collection of array and string handling capabilities. For Windows CE I use either eMbedded Visual C++ 4 or Visual Studio C++. Whatever I learn while developing on one platform carries over equally well to the other, because while they are not exactly the same, they are very similiar. This way, I havn't had to learn seperate languages and programming techniques for each seperate platform. Let me just give a quick example. If you are working in C or C++ and you have a text box (edit control) in a Window and you want to put text in it, and assumming the handle of the text box is hEdit, it would look like this...
1 2
|
TCHAR szBuffer[]=_T("Hello, World!");
SetWindowText(hEdit, szBuffer);
|
and in PowerBASIC like this...
|
SetWindowText(hEdit,"Hello, World!")
|
Also, I like small efficient programs with as few external dependencies as possible. Using Win32 (or I guess Win64 now that 64 bit is here and getting more common, although I don't use 64 bit Windows yet) I can get that automatically.
As intimated by blackcoder, if you are writting RAD (Rapid Application Development) or quick throw away code, its probably not the way to go. But for serious apps, it works for me.