Есть Windows API окно обернутое в клас. Создается в Windows API main методе например так:
Window* window = new Window();
В классе Window есть некий список Controls. Цикл обработки сообщений сидит в конструкторе Window и тем самым не дает работать с window после его создания.
Window* window = new Window();
Panel* panel = new Panel(); // не работает
window->Controls-Add(panel); // не работает
Где хранить цикл обработки сообщений чтобы была возможность работать с обьектом после его создания? Я знаю что можно вынести его из конструктора класса в main метод но соответственно нужно ещё и вытащить HWND из класса. Что если окна два? Хочется чтобы все обрабатывалось в классе.
Вопрос выдает полное непонимание как работает Windows программа... вам бы почитать Петцольда.
По теме: цикл сообщений нельзя размещать в конструкторе. Собственно, цикл сообщений это и есть Windows программа - все, что делает любая неконсольная программа Windows, это выполнение цикла сообщений. Выглядит она вариацией вот такого кода:
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
// Initialize app and create main window
InitApp();
// Run message loop
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0)) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return msg.wParam;
}
(код немного упрощен, поскольку не проверяет возврат по ошибке GetMessage. В данном конкретном случае ошибка крайне маловерятна, поскольку все аргументы гарантированно корректны).
Обычно программист не пишет сам цикл сообщений, а пользуется каким-либо фреймворком - MFC, wxWidgets, Qt, и т.п.
Не могу ничего сказать насчет фреймворка для Managed C++/CLI (по моему мнению, Managed C++ относится к C++ примерно так же, как Javascript относится к Java), но насколько я помню, для C# главная программа выглядит примерно так:
static class Program {
static void Main() {
Application.Run(new MainForm());
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем привет! Может кто сталкивался или знает куда копать?