
David Turner wrote:
Hi
So, the code to implement graph drawing would have to be freestanding function that takes window as parameter. What does it buy?
Good design, for one thing. What business does a window have knowing about graphs? A window is a window is a window. Same for a drawing surface. I've seen too many 3000-line CMyDialog: public CDialog classes to buy the reuse-is-inheritance argument.
So, if I want to create a widget for drawing graph, I'll have to write: void draw_the_graph(window w, ....) { ..... } void handle_click(window w, ....) { // Add new vertex } void handle_right_click(window w, ...) { // show vertex properties, if mouse points // to a vertex } window make_graph_widget() { windows w; w.on_draw = &draw_the_graph; w.on_mouse_click = &handle_click; w.on_mouse_right_click = &handle_right_click; return w; } ? What are the chances that handle_right_click can be reused anywhere else, is it really independent from GUI, and isn't this too complex a solution? Note that I buy the idea of non using inheritance for dialogs, to a certain degree. It just seems that for more complex cases this won't work as nice.
If you _really_ want to create a CMyWindow class, you can always use aggregation.
In the case above, I'd have to assign to all the signal handlers in the constructor. Ok, I think I have live with it, so it's not so elegant. - Volodya