Я хочу улучшить свой код и файловую структуру в более крупных проектах 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, но я просто запутался, так как существуют сотни файлов, и в каждом из этих файлов, которые кажутся связанными с графическим интерфейсом, код графического интерфейса Win32 кажется настолько инкапсулированным , И когда я наконец найду оператор CreateWindowEx
, окно proc нигде не будет найдено.
Будем весьма благодарны за любые советы о том, как структурировать весь код, оставаясь в здравом уме.
Спасибо!
Я не хочу использовать какие-либо библиотеки или фреймворки, так как нахожу Win32 API интересным и полезным для изучения.
Любое понимание того, как вы структурируете свой собственный код GUI, может послужить источником вдохновения.