Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отобразить дочернее окно и получить из него параметр

33K
21 сентября 2009 года
burzum07
5 / / 07.12.2007
Все привет!
В рамках курсовика в универе нужно реализовать такой функционал(без использования MFC):

Есть главное окно
Нужно по левому щелчку мыши отобразить child (или owned??) окошко скажем с пятью кнопками (например 1, 2, 3, 4, 5). Пользователь нажимает одну из кнопок и надо как то в переменную записать какую из них он нажал а потом передать в обработчик главной формы обратно.... Что писать в обработчике на ЛКМ? и как получить из дочерней формы параметр?
Надеюсь понятно изложил суть вопроса. Искал в инете, но видимо плохо..
Заранее спасибо за помощь.
397
22 сентября 2009 года
SergPas
527 / / 03.02.2007
Цитата: burzum07

Есть главное окно
Нужно по левому щелчку мыши отобразить child (или owned??) окошко скажем с пятью кнопками (например 1, 2, 3, 4, 5). Пользователь нажимает одну из кнопок и надо как то в переменную записать какую из них он нажал а потом передать в обработчик главной формы обратно.... Что писать в обработчике на ЛКМ? и как получить из дочерней формы параметр?
Надеюсь понятно изложил суть вопроса. Искал в инете, но видимо плохо..
Заранее спасибо за помощь.


Есть несколько вариантов. Вот некоторые из них, которые мне пришли в голову в 4 часа утра:
В обработчике нажатия левой кнопки главного окна Вы создаёте и отображаете дочернее окно. При этом запустится главный цикл обработки сообщений дочернего окна и параллельно выполнится оставшаяся часть кода, следующая в WM_LBUTTONDOWN сразу за созданием дочернего окна. Следовательно, что либо «передать» из дочернего в главное не получится (не думаю, что синхронизация потоков здесь будет уместна). Выйти из создавшейся ситуации можно 2-мя способами:
1. заменить дочернее окно модальным диалогом: в этом случае главный поток приложения приостанавливает свою работу до тех пор, пока не закроется модальное диалоговое окно. Сохранить нужный параметр (либо дескриптор кнопки, либо его идентификатор) можно в глобальной переменной. Но, главный поток восстанавливает свою работу (а следовательно и оставшуюся часть кода в WM_LBUTTONDOWN главного окна, следующую сразу за созданием диалога) только после закрытия диалога, что может ограничиваться поставленной задачей. В этом случае поможет 2-ой пункт;
2. создать пользовательское сообщение, обрабатываться которое будет в цикле обработки сообщений главного окна и посылаться из обработчиков нажатия кнопок (или других элементов управления) посредством функции SendMessage(...), в параметрах wParam или lParam которой и будет содержаться либо дескриптор, либо идентификатор (либо ещё что-то) кнопки.
Как-то так...

33K
22 сентября 2009 года
burzum07
5 / / 07.12.2007
Спасибо за ответ!

Есть еще очень глупый вопрос.
Если я хочу создать дочернее окно в обработчике главного, то как мне добыть hinstance приложения?
Если же создавать в другом месте а по обработчику просто показывать, то нужен HWND
397
22 сентября 2009 года
SergPas
527 / / 03.02.2007
Цитата: burzum07

Если я хочу создать дочернее окно в обработчике главного, то как мне добыть hinstance приложения?
Если же создавать в другом месте а по обработчику просто показывать, то нужен HWND


Как вариант можно использовать глобальные переменные для хранения дескрипторов приложения и главного окна.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог