|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.01.2013, 12:54 | #1 |
Пользователь
Регистрация: 13.01.2013
Сообщений: 94
|
Затирание дочерних окон winapi
Здравствуйте! Столкнулся с такой проблемой: создал новый C++ Win32 проект в 2010 студии с уже готовым шаблоном приложения. В главном окне есть кнопка и эдит поле; по нажатии на кнопку создаётся дочернее окно с другим полем редактирования текста, в котором, в отличее от поля на главном окне, нельзя писать. К тому же, дочернее окно затирается элементами главного окна и такими же дочерними окнами:
Я думал, что не могу писать в полях дочерних окон т.к. на окнах нет "фокуса". Пытался его ставить вручную (SetFocus), но это не помогло. ( вот код главного окна: Код:
Код:
|
14.01.2013, 13:16 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
ChildProc вызывает DefWindowProc?
|
14.01.2013, 13:39 | #3 |
Пользователь
Регистрация: 13.01.2013
Сообщений: 94
|
Я новичок и пишу исключительно по шаблонам, найденным в инете и ещё сам не понимаю большую часть кода. В примере, который я использовал для написания этого кода была такая же проблема с затиранием. Других примеров не нашёл(
|
14.01.2013, 13:49 | #4 |
Пользователь
Регистрация: 13.01.2013
Сообщений: 94
|
|
14.01.2013, 15:29 | #5 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Затирается из-за отсутствия стиля WS_CLIPSIBLINGS.
В примерах этот стиль не стоит, так как новые окна порождаются без родителя. У Вас же новое окно имеет родителем главное и может отображаться только внутри него. Как будто это MDI приложение. |
14.01.2013, 15:53 | #6 |
Пользователь
Регистрация: 13.01.2013
Сообщений: 94
|
EUGY, большое спасибо! одна проблема решена )) Но остались ещё минимум две:
1. Создаваемые кнопкой окна лежат в одном и том же порядке и никак не получается сделать одно из них активным и вынести на передний план. 2. Я всё ещё не могу писать в эдит полях дочерних окон. Думаю и то и другое решается одним и тем же способом.? А если не трудно, можете объяснить где нужно использовать этот WS_CLIPSIBLINGS стиль? |
14.01.2013, 16:00 | #7 |
Пользователь
Регистрация: 13.01.2013
Сообщений: 94
|
А вот и третья: кнопка, поле с текстом и эдит поле главного окна отрисовываются поверх дочерних окон.
ps: EUGY, по-идее и должно получится MDI приложение. |
14.01.2013, 16:14 | #8 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
По первым пунктам советую сразу пересмотреть дизайн программы. И создать MDI приложение, а не изобретать велосипед. Хотя, конечно, интересно
Насчет clipsibling. Вот есть главное окно. На нем расположены дочерние окна. У окна есть графический контекст hDC. Чтобы дочернее окно было в области отсечения этого контекста, у родительского окна должен быть стиль WS_CLIPCHILDREN. А у дочерних окон, если они могут перекрывать друг друга - стиль WS_CLIPSIBLING. Иначе при попытке рисовать по контексту родительского окна рисунок будет затирать дочерние. PS. MDI приложение отличается тем, что дочерние окна имеют родителем специальное окно класса MDIClient, которое в свою очередь имеет родителем главное. И оконные процедуры имеют дефолтные вызовы DefMDIChildProc, DefFrameProc. Последний раз редактировалось EUGY; 14.01.2013 в 16:18. |
14.01.2013, 18:43 | #9 |
Пользователь
Регистрация: 13.01.2013
Сообщений: 94
|
Хм.. Так как мне запилить сразу MDI проект? В настройках при создании C++ Win32 проекта такой кнопки вроде нет. Или я не там смотрел?
Если это всё пишется ручками, то вряд ли осилю. Можно примерчик? Последний раз редактировалось x_Alex_x; 14.01.2013 в 18:55. |
14.01.2013, 19:20 | #10 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Ничего особенного.
Пустой проект. один cpp файл. юникод. Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Затиание дочерних окон | x_Alex_x | Помощь студентам | 0 | 13.01.2013 12:56 |
MDI - исключение дочерних окон из перехода по ctrl+tab | andrew_jr20 | C# (си шарп) | 0 | 12.01.2012 22:52 |
Закрытие и открытие дочерних MDI окон приложения | chandrasecar | Общие вопросы Delphi | 4 | 16.05.2011 13:41 |
Поведение дочерних окон | maryan.vetrov | C# (си шарп) | 9 | 27.02.2011 18:09 |
SetWindowPos для дочерних окон и битмапов. | Alex Cones | Общие вопросы Delphi | 4 | 02.02.2011 13:49 |