По мере продвижения моего первого пользовательского интерфейса winapi я создаю большие неудобные стеки переменных HWND в моем файле WinMain:
HWND foo;
HWND bar;
HWND baz;
HWND etc;
int WINAPI WinMain(...) {}
Конечно, эти переменные используются в функциях в остальной части файла — например, в цикле сообщений — поэтому они должны быть доступны.
Для моего относительно небольшого пользовательского интерфейса у меня будет что-то вроде 30 HWND, которые находятся в видимой области видимости. Это делает меня очень подозрительным, что я делаю это неправильно.
Это то, что должно происходить, или есть более практичный способ организовать это?
У вас есть несколько решений, в зависимости от вашей программы.
std::vector
,Вам нужен только один HWND в вашей основной программе, и это для главного окна.
API не требует ни одного главного окна, но это наиболее распространено. И даже когда с пользовательской точки зрения приложение предлагает несколько, по-видимому, независимых окон, было бы неплохо иметь главное окно в программе (оно может быть невидимым, но обеспечивает группировку).
Другие окна являются либо дочерними по отношению к главному окну (внутри него), либо окнами, «принадлежащими» главному окну. В общем. И, в частности, для первой в мире программы для Windows. 🙂 Так что вам не нужны отдельные переменные для этих окон. Всякий раз, когда окно должно реагировать на что-либо, это сообщение окну, что означает вызов одной из ваших функций с соответствующим дескриптором окна в качестве аргумента.
Каждое дочернее окно может иметь уникальный целочисленный идентификатор, и это один из способов отслеживать их.
Но по мере продвижения вперед вы захотите связать состояние с каждым окном, и самый простой способ сделать это — использовать API «подклассов» Windows, чтобы связать указатель с каждым окном. Затем вы можете направить вызовы оконных процедур к методу связанного объекта C ++. Где разные сообщения могут быть направлены дальше к различным методам обработки сообщений, каждый из которых имеет доступ к состоянию окна (это просто объект C ++).