2010-03-30 10 views
5

Ich möchte meine Code- und Dateistruktur in größeren Win32-Projekten mit vielen Fenstern und Steuerelementen verbessern. Zur Zeit habe ich einen Header und eine Quelldatei für die gesamte Implementierung eines Fensters oder Dialogs. Dies funktioniert gut für kleine Projekte, aber jetzt ist es soweit, dass diese Implementierungen beginnen, 1000-2000 Zeilen zu erreichen, was mühsam zu durchsuchen ist.Strukturieren von Win32-GUI-Code

Eine typische Quelldatei von mir wie folgt aussieht:

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); 
    } 
} 

Aber jetzt, wie das Fenster viel mehr Kontrollen hat, und diese Kontrollen wiederum haben ihre eigenen Nachrichten-Handler, und dann gibt es das Menü klicken Handler, und so weiter ... Ich bin verloren, und ich brauche wirklich Rat, wie man dieses Durcheinander auf eine gute und vernünftige Weise strukturiert.

Ich habe versucht, gute Open-Source-Beispiele für die Strukturierung von Win32-Code zu finden, aber ich bin nur mehr verwirrt, da es Hunderte von Dateien gibt, und innerhalb jeder dieser Dateien GUI-bezogen scheint der Win32-GUI-Code so weit gekapselt Weg. Und wenn ich endlich eine CreateWindowEx-Anweisung finde, ist das Fenster proc nirgends zu finden.

Jeder Rat, wie man den ganzen Code strukturiert, während er gesund bleibt, würde sehr geschätzt werden.

Danke!

Ich möchte keine Bibliotheken oder Frameworks verwenden, da ich die Win32-API interessant und wertvoll für das Lernen finde.

Jeder Einblick, wie Sie Ihren eigenen GUI-Code strukturieren, könnte vielleicht als Inspiration dienen.

+0

möchten Sie mindestens C++ Klasse oder nur c verwenden? –

+1

Sie haben die unvermeidliche Schlussfolgerung, dass Sie eine C++ - Klassenbibliothek benötigen, um Ihren Code organisiert zu halten. –

+0

luca - Ich erkunde gerade C, und das verwende ich für die entsprechenden Projekte. Vielen Dank. – haste

Antwort

5

Für den Anfang würde ich einen Blick auf die message crackers in windowsx.h werfen; Sie ersparen Ihnen das Schreiben langwieriger Fallanweisungen in Ihren Fensterprozeduren und sie schlagen eine gewisse Disziplin in Funktionsnamen vor.

+0

Das sieht auf den ersten Blick interessant aus. Ich werde das später am Abend gründlich lesen. Vielen Dank. – haste

+0

Ich war gerade in der Win32-Welt auf Abenteuer. Danke dafür oder es hätte in ein paar Monaten ein Refactoring verlangt. –

Verwandte Themen