It's generally a bad idea to reinvent the UI controls in your application just for the sake of it. It's not particularly hard per-se, it's just very "fiddly" and it's indeed tricky to get every little detail "just so."
Office is an example of an application that has a completely custom UI, but they actually do a pretty decent job of hiding it. You really only notice it if you go around with Spy++ and try to look at the details of the controls - it doesn't work!
But I noticed this little rendering bug in Outlook today which kinds of demonstrates my point above that it's hard to get 100% of the details right:
For a normal Windows application, if the title of the window is too long, it cuts it off before the minimize button. But they obviously made a mistake here and it just continues to the edge of the window. Obviously, this isn't a huge problem, it's not even a small problem ("trivial" is the word that comes to mind), but it just goes to show that even a team as big as the office team can't get it 100% right.
Internet Explorer is another app which draws its own control (at least, when rendered on a page - the actual dialog boxes are all just standard dialog boxes). IE actually gets a lot more wrong than Office does. Off the top of my head, the rendering errors in IE are:
- Hot-tracking of buttons doesn't work in Vista. It just flashes between the un-tracked (grey) and tracked (blue) state. The problem Vista buttons fade between un-tracked and tracked. The same is true of checkboxes and radio buttons (which is just special kinds of buttons, actually)
- Hot-racking of scrollbars doesn't work. In Vista, when you hover over a scrollbar, the up/down arrows pop up and the bar fades to blue. This doesn't happen at all in IE. When you click a button or the thumbtab, it turns blue, but nothing happens when you just over over it.
- In versions of IE prior to IE7, buttons did not scale proprly. Before, when a button is drawn larger, once it got over a certain size, the button was "zoomed" rather than drawn larger. This meant that the border around the button got bigger and it look out of place on the page. I understand the reason was that they internal "button" control couldn't tell the difference between just being rendered "big" and being rendered in "high resolution" (e.g. printed) and so when the button went over a certain size, it just assumed it was being printed and so entered the "zoomed" mode. This was "fixed" in IE7 by simply removing the "zoomed" mode and so when you print out a web page, the buttons look funny because the lines are all 1 pixel wide - on a 96DPI screen, it's right, but on a 600DPI printer, it's invisible!
As I mentioned, none of these problems are huge, but they just reenforce the idea that you shouldn't try to render your own controls. Because if even Microsoft can't get it right, what chance do you have?