It's tempting to use DIALOG_SPACING here as well to reduce amount of magic.
Did that for DIALOG_SPACING_BUTTON_W, but I'd keep DIALOG_SPACING_BUTTON_H, since the vertical distance between buttons on my windows machine is only 1px, 5px sounds like a bit much in that case.
This does not do the right thing. Having first row right-aligned is not a goal. According to my manual testing all rows are left aligned, and wrapped as soon as next button width exceeds dialog width, which by the way is supposed to grow, if cxWidth is 0. We can ignore that for now I guess.
Can't confirm that on my machine. The buttons are right aligned, and if there is more than one row, the second is left aligned to the first one. For example, if you have one button, it's always on the right. If you have two rows of 4 buttons, it's aligned right, too. While my code doesn't take into account all corner cases, like one button that's bugger than all others, it gets the main look done.
Any comments on this?
Regards, Fabian Maurer