As a bit of background on this topic:
- GDI+ is ready to go in this case, as it is a 2D API.
- D3D is a 3D API, so you have to do a lot of non-trivial work to build 2D primitives on top of it, which is just what we did for WPF.
And just to have a complete answer, I do not recommend using GDI. Unless there is some backwards compatibility requirement or integration issue, I would definetely recommend GDI+ over GDI, as it provides better quality rendering, a better primitive set, and wider image format support.
Here is the decision process I would recommend in relation to selecting between the technologies:
- if you are doing native code (C++/COM) use GDI+ (knowing that you do not get HW acceleration)
- if you can use managed code, try out WPF and see if its model fits what you want to do
- if you have the expertise, time, and the value to you is worth the effort, try building a 2D layer on D3D
I know of other companies that have built 2D charting/graphing applications using WPF, and there is a learning curve, but they managed to achieve what they were looking for and are now happy with the results.
Turns out that, in this particular case, the developer was already using managed code, in which case giving WPF a try is the best fist choice. Validate that the model works for you, keep an eye on performance (as you learn the tricks of the new programming model), and go for it.
-Pablo