2010-03-30 8 views
5

Deseo mejorar mi código y la estructura de archivos en proyectos de Win32 más grandes con muchas ventanas y controles. Actualmente, tiendo a tener un encabezado y un archivo fuente para la implementación completa de una ventana o diálogo. Esto funciona bien para proyectos pequeños, pero ahora ha llegado al punto en que estas implementaciones comienzan a llegar a 1000-2000 líneas, lo cual es tedioso de navegar.Código de estructuración de GUI de Win32

Un archivo de origen típico de la mina se parece a esto:

static LRESULT CALLBACK on_create(const HWND hwnd, WPARAM wp, LPARAM lp) { 
    setup_menu(hwnd); 
    setup_list(hwnd); 
    setup_context_menu(hwnd); 

    /* clip */ 

    return 0; 
} 

static LRESULT CALLBACK on_notify(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { 
    const NMHDR* header = (const NMHDR*)lp; 

    /* At this point I feel that the control's event handlers doesn't 
    * necessarily belong in the same source file. Perhaps I could move 
    * each control's creation code and event handlers into a separate 
    * source file? Good practice or cause of confusion? */ 

    switch (header->idFrom) { 
    case IDC_WINDOW_LIST: 
     switch (header->code) { 
     case NM_RCLICK: 
      return on_window_list_right_click(hwnd, wp, lp); 

     /* clip */ 
     } 
    } 
} 

static LRESULT CALLBACK wndmain_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { 
    switch (msg) { 
    case WM_CREATE: 
     return on_create(hwnd, wp, lp); 

    case WM_CLOSE: 
     return on_close(hwnd, wp, lp); 

    case WM_NOTIFY: 
     return on_notify(hwnd, wp, lp); 

    /* It doesn't matter much how the window proc looks as it just forwards 
    * events to the appropriate handler. */ 

    /* clip */ 

    default: 
     return DefWindowProc(hwnd, msg, wp, lp); 
    } 
} 

Pero ahora que la ventana tiene mucho más controles, y estos controles a su vez tienen sus propios controladores de mensajes, y luego está el menú del botón controladores, y así sucesivamente ... Me estoy perdiendo, y realmente necesito consejos sobre cómo estructurar este desastre de una manera buena y sensata.

He intentado encontrar buenos ejemplos de código abierto de estructuración de código Win32, pero me confundo más ya que hay cientos de archivos, y dentro de cada uno de estos archivos que parecen relacionados con GUI, el código GUI de Win32 parece encapsulado hasta ahora lejos. Y cuando finalmente encuentro una declaración CreateWindowEx, no se encuentra el proceso de ventana.

Cualquier consejo sobre cómo estructurar todo el código sin dejar de serlo sería muy apreciado.

Gracias!

No deseo utilizar ninguna biblioteca o framework porque la API de Win32 me parece interesante y valiosa para aprender.

Cualquier idea sobre cómo estructurar su propio código GUI podría quizás servir de inspiración.

+0

¿te gusta usar al menos la clase C++ o simplemente c? –

+1

Llegaste a la inevitable conclusión de que necesitarás una biblioteca de clases en C++ para mantener organizado tu código. –

+0

luca - Actualmente estoy explorando C, y eso es lo que uso para los proyectos relacionados. Gracias. – haste

Respuesta

5

Para empezar, eche un vistazo al message crackers en windowsx.h; le ahorrarán escribir tediosas declaraciones de casos en los procedimientos de su ventana, y sugieren cierta disciplina en los nombres de las funciones.

+0

Esto parece interesante a primera vista. Lo leeré a fondo más tarde esta noche. Gracias. – haste

+0

Estaba aventurándome en el mundo win32. Gracias por esto o hubiera pedido una refactorización en un par de meses. –

Cuestiones relacionadas