2010-03-30 13 views
5

Chcę poprawić mój kod i strukturę plików w większych projektach Win32 z dużą ilością okien i elementów sterujących. Obecnie mam zazwyczaj jeden nagłówek i jeden plik źródłowy do całej implementacji okna lub okna dialogowego. To działa dobrze dla małych projektów, ale teraz doszło do tego, że te implementacje zaczynają osiągać 1000-2000 linii, co jest nużące do przeglądania.Strukturyzacja kodu Win32 GUI

Typowy plik źródłowy kopalni wygląda następująco:

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

Ale teraz, gdy okno ma dużo więcej kontroli, i kontrole te z kolei mają własne programy obsługi wiadomości, a następnie nie ma menu kliknięcie handlerów, i tak dalej ... Zgubiłem się i naprawdę potrzebuję porady, jak uporządkować ten bałagan w dobry i rozsądny sposób.

Próbowałem znaleźć dobre przykłady kodu źródłowego struktury kodu Win32, ale po prostu jestem bardziej zdezorientowany, ponieważ istnieją setki plików, a w każdym z tych plików, które wydają się powiązane z GUI, kod Win32 GUI wydaje się jak dotąd zamknięty w obudowie z dala. I kiedy w końcu znajduję instrukcję CreateWindowEx, nie można znaleźć okna proc.

Wszelkie porady dotyczące struktury całego kodu, pozostając przy zdrowych zmysłach, byłyby mile widziane.

Dzięki!

Nie chcę używać żadnych bibliotek ani frameworków, ponieważ uważam, że API Win32 jest interesujące i cenne dla nauki.

Każdy wgląd w to, jak można ukształtować własny kod GUI, może być inspiracją.

+0

czy chcesz używać co najmniej klasy C++ lub po prostu c? –

+1

Osiągnąłeś nieunikniony wniosek, że będziesz potrzebować biblioteki klas C++ do utrzymywania porządku w kodzie. –

+0

luca - Obecnie badam C, i to jest to, czego używam w powiązanych projektach. Dziękuję Ci. – haste

Odpowiedz

5

Na początek chciałbym rzucić okiem na message crackers w windowsx.h; zaoszczędzą ci pisania nudnych spraw w swoich procedurach okiennych i sugerują pewną dyscyplinę w nazwach funkcji.

+0

To na pierwszy rzut oka wygląda interesująco. Przeczytam to dokładnie później tego wieczoru. Dziękuję Ci. – haste

+0

Po prostu bawiłem się w świecie win32. Dziękuję za to, bo za kilka miesięcy wezwałbym do refaktoryzacji. –