Отобразить дочернее окно и получить из него параметр
В рамках курсовика в универе нужно реализовать такой функционал(без использования MFC):
Есть главное окно
Нужно по левому щелчку мыши отобразить child (или owned??) окошко скажем с пятью кнопками (например 1, 2, 3, 4, 5). Пользователь нажимает одну из кнопок и надо как то в переменную записать какую из них он нажал а потом передать в обработчик главной формы обратно.... Что писать в обработчике на ЛКМ? и как получить из дочерней формы параметр?
Надеюсь понятно изложил суть вопроса. Искал в инете, но видимо плохо..
Заранее спасибо за помощь.
Есть главное окно
Нужно по левому щелчку мыши отобразить child (или owned??) окошко скажем с пятью кнопками (например 1, 2, 3, 4, 5). Пользователь нажимает одну из кнопок и надо как то в переменную записать какую из них он нажал а потом передать в обработчик главной формы обратно.... Что писать в обработчике на ЛКМ? и как получить из дочерней формы параметр?
Надеюсь понятно изложил суть вопроса. Искал в инете, но видимо плохо..
Заранее спасибо за помощь.
Есть несколько вариантов. Вот некоторые из них, которые мне пришли в голову в 4 часа утра:
В обработчике нажатия левой кнопки главного окна Вы создаёте и отображаете дочернее окно. При этом запустится главный цикл обработки сообщений дочернего окна и параллельно выполнится оставшаяся часть кода, следующая в WM_LBUTTONDOWN сразу за созданием дочернего окна. Следовательно, что либо «передать» из дочернего в главное не получится (не думаю, что синхронизация потоков здесь будет уместна). Выйти из создавшейся ситуации можно 2-мя способами:
1. заменить дочернее окно модальным диалогом: в этом случае главный поток приложения приостанавливает свою работу до тех пор, пока не закроется модальное диалоговое окно. Сохранить нужный параметр (либо дескриптор кнопки, либо его идентификатор) можно в глобальной переменной. Но, главный поток восстанавливает свою работу (а следовательно и оставшуюся часть кода в WM_LBUTTONDOWN главного окна, следующую сразу за созданием диалога) только после закрытия диалога, что может ограничиваться поставленной задачей. В этом случае поможет 2-ой пункт;
2. создать пользовательское сообщение, обрабатываться которое будет в цикле обработки сообщений главного окна и посылаться из обработчиков нажатия кнопок (или других элементов управления) посредством функции SendMessage(...), в параметрах wParam или lParam которой и будет содержаться либо дескриптор, либо идентификатор (либо ещё что-то) кнопки.
Как-то так...
Есть еще очень глупый вопрос.
Если я хочу создать дочернее окно в обработчике главного, то как мне добыть hinstance приложения?
Если же создавать в другом месте а по обработчику просто показывать, то нужен HWND
Если я хочу создать дочернее окно в обработчике главного, то как мне добыть hinstance приложения?
Если же создавать в другом месте а по обработчику просто показывать, то нужен HWND
Как вариант можно использовать глобальные переменные для хранения дескрипторов приложения и главного окна.