Структурирование Win32 код GUI

Я хочу улучшить свой код и файловую структуру в больших проектах Win32 с большим количеством окон и средств управления. В настоящее время я склонен иметь один заголовок и один исходный файл для всей реализации окна или диалогового окна. Это хорошо работает для маленьких проектов, но теперь это перешло к сути дела, где эти реализации начинают достигать 1000-2000 строк, который утомителен для просмотра.

Типичный мой исходный файл смотрит как это:

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

Но теперь поскольку окно имеет намного больше средств управления, и эти средства управления в свою очередь имеют своих собственных обработчиков сообщений, и затем и так далее существуют обработчики щелчков меню... Я заблудился, и мне действительно нужен совет относительно того, как структурировать, это портит хорошим и разумным способом.

Я попытался найти хорошие примеры с открытым исходным кодом структурирования кода Win32, но я просто становлюсь более смущенным, так как существуют сотни файлов, и в каждом из этих файлов, которые кажутся связанным GUI, код GUI Win32 кажется до сих пор инкапсулировавшим далеко. И когда я наконец нахожу a CreateWindowEx оператор, окно proc нигде не найти.

Любой совет относительно того, как структурировать весь код, оставаясь нормальным, значительно ценился бы.

Спасибо!

Я не хочу пользоваться любыми библиотеками или платформами, поскольку я нахожу API Win32 интересным и ценным для изучения.

Любое понимание, как Вы структурируете свой собственный код GUI, могло, возможно, служить вдохновением.

5
задан haste 31 March 2010 в 12:01
поделиться

1 ответ

Для начала я бы взглянул на взломщики сообщений в windowsx.h ; они избавят вас от написания утомительных операторов case в ваших оконных процедурах и предлагают определенную дисциплину в именах функций.

5
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: