![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
MenSem |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 10.7.2008 Репутация: нет Всего: нет |
del
Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:20 --------------------
|
|||
|
||||
Supersedes |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 29.7.2008 Репутация: нет Всего: нет |
Ты хочешь чтобы было сразу два активных окна!?? И дочернее и главное?
|
|||
|
||||
MenSem |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 10.7.2008 Репутация: нет Всего: нет |
del
Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:20 --------------------
|
|||
|
||||
GremlinProg |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
во первых, MDI-приложение содержит по крайней мере три окна:
1. окно фрейма(главное) 2. окно клиента(рабочая область,потомок MDICLIENT, в котором и находятся все дочерние окна) 3. дочернее окно фрейм - обычное перекрытое окошко, оно может быть любым, но вместо DefWindowProc необходимо вызывать DefFrameProc
hWndMDIClient - это дескриптор клиентского окна, т.е. фрейм по крайней мере должен иметь доступ к этому дескриптору клиент - в принципе тоже обычное, но дочернее окно, его класс обязательно либо наследуется от MDICLIENT - это стандартный класс окна, как например BUTTON или EDIT, либо вообще не субклассится, а просто создается в ответ на сообщение WM_CREATE у окна фрейма:
клиент создается на фрейме, если его(клиента) не позиционировать и оставить все координаты в нуле(как в примере), то фрейм автоматически будет его выравнивать по всей своей клиентской области дочернее окно - это любое дочернее окно с расширенным стилем WS_EX_MDICHILD, которое создается на клиенте вместо DefWindowProc здесь уже необходимо вызывать DefMDIChildProc:
список парамеров аналогичен DefWindowProc, ничего дополнительного делать не нужно во вторых, если внимательно посмотришь в фотошоп, то заметишь, что все его панельки не дочерние (это popup-окошки) причина, по которой дочернее окно не активируется как раз в том, что у тебя не MDI окно, а простой дочерний контрол на форме, он вообще не меняет свое состояние и не принимает сообщения WM_ACTIVATE .. WM_NCACTIVATE (как впрочем и сами MDI окна), поэтому и не раскрашивается в активные цвета. следит за состоянием MDI дочерних окон клиент (он принимает WM_CHILDACTIVATE и определяет кто сейчас активен), которого у тебя нет, а раскрашивает DefMDIChildProc, которой, как я уже предполагаю, так же нет(нет даже стиля WS_EX_MDICHILD) оригинал статьи тут: http://msdn.microsoft.com/en-us/library/ms644909(VS.85).aspx в статье помимо вышеизложенного так же описаны все сообщения, которые переопределены в дополнительных процедурах, что они делают и обозначены рекомендации, если эти сообщения необходимо перекрывать еще раз. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
MenSem |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 10.7.2008 Репутация: нет Всего: нет |
del
Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:20 --------------------
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
WINDOWMENU - это индекс подменю в главном меню окна(фрейма), в конец этого подменю будет дописываться список всех дочерних окон. (обычно это меню именно фрейма MDI-приложения, но необязательно, можно использовать любое меню)
индекс, т.е. номер, начиная с нуля, позиции подменю, поставь 0, 1 или 2, результат сам увидишь. если этот список тебя не интересует, выставь ccs.hWindowMenu = NULL hwnd - да, обычно это дескриптор, передаваемый в процедуру окна(фрейма) IDM_WINDOWCHILD - начальный идентификатор дочерних окон, при добавлении нового дочернего окна, этот индекс будет увеличиваться, впоследствии, дескриптор любого дочернего окна можно будет получить по этому индексу, передав его, например, в функцию GetDlgItem -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
MenSem |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 10.7.2008 Репутация: нет Всего: нет |
del
Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:20 --------------------
|
|||
|
||||
MenSem |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 10.7.2008 Репутация: нет Всего: нет |
del
Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:20 --------------------
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |