zarathustra0 Ответов: 1

Дочернее окно перекрывается родственными окнами


Здравствуйте разработчики MFC,

Я попытался создать дочернее окно с помощью:
CreateEx( NULL, NULL, "MyChild", WS_CHILD | WS_VISIBLE | WS_BORDER, 300, 300, 400, 200, hParentWnd, NULL, NULL );

Где родитель HWND hParentWnd уже есть много других дочерних окон. Однако это создало дочернее окно, скрывающееся за всеми братьями и сестрами.
Windows Spy++ показывает, что он находится на вершине (первом) z-порядка среди дочерних окон hParentWnd. Я пробовал все различные команды WIN32, включая SetWindowPos(), BringWindowToTop(), SetForegroundWindow(), SetFocus(), SetActiveWindow(), SendMessage(WM_ACTIVATE, 0, 0) и т. д., Но никто не приносит его из-за братьев и сестер.
Когда я заменил WS_CHILD около WS_OVERLAPPEDWINDOW в CreateEX() функция, созданное не дочернее окно не имеет проблем с отображением в качестве самого верхнего активного окна переднего плана.

Так что же я должен сделать, чтобы поднять детское окно наверх из-за братьев и сестер?

Миллион раз спасибо.

Эрнест.

= = = = = = = = более подробная информация на этот вопрос выглядит следующим образом ==========

Вот код, который я использовал:

HWND hButtWnd = CreateWindowEx( WS_EX_STATICEDGE, "BUTTON", "MyButton", WS_CHILD | WS_VISIBLE,	buttRect.left, buttRect.top, 50, 60, m_hWnd, NULL, GetModuleHandle(NULL), NULL );

::EnableWindow(hButtWnd, FALSE);

CWnd* pChildWnd = new CWnd;

pChildWnd->CreateEx( NULL, NULL, "MyChild", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, childRect, CWnd::FromHandle(m_hWnd), NULL, NULL );

pChildWnd->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);


Первые две строки создают новую кнопку MyButton среди других уже существующих родственных окон. MyButton можно было создать после MyChild, но это не имело значения, MyChild все еще казался скрытым за MyButton и всеми другими братьями и сестрами.

Я мог бы перетащить вертикальный свиток (у меня есть WS_VSCROLL в стиле), но MyChild не мог быть выведен на передний план. Всегда оставалась позади братьев и сестер.

Отключение кнопки mybutton только серым цветом кнопки mybutton, и MyChild по-прежнему остались за компонент.

Windows Spy++ подтвердил, что команда SetWindowPos () действительно вывела его на вершину z-порядка; однако он все еще был позади всех своих братьев и сестер.

Спасибо.

Эрнест.

André Kraak

Отредактированный вопрос:
Добавлены предварительные теги

1 Ответов

Рейтинг:
1

CP2016

Используйте стиль widnows :

WS_CLIPSIBLINGS



HWND hButtWnd = CreateWindowEx( WS_EX_STATICEDGE, "BUTTON", "MyButton", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS ,	buttRect.left, buttRect.top, 50, 60, m_hWnd, NULL, GetModuleHandle(NULL), NULL );