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.
¿te gusta usar al menos la clase C++ o simplemente c? –
Llegaste a la inevitable conclusión de que necesitarás una biblioteca de clases en C++ para mantener organizado tu código. –
luca - Actualmente estoy explorando C, y eso es lo que uso para los proyectos relacionados. Gracias. – haste