Как сделать так, чтобы дочернее окно MDI оставалось поверх его братьев и сестер? - PullRequest
1 голос
/ 27 февраля 2009

Этот вопрос относится к моему предыдущему.

У меня есть MDI-приложение MFC (VC6), которое имеет несколько дочерних окон MDI, выступающих в качестве разных представлений для одного документа.

Можно ли установить один из этих фреймов так, чтобы он оставался поверх других?
Я пытался позвонить

SetWindowPos(
   &GetParentFrame()->wndTopMost,
   0, 0, 0, 0,
   SWP_NOMOVE | SWP_NOSIZE);

и

ModifyStyleEx(0, WS_EX_TOPMOST);

из CMDIChildWnd, но ни один из них не работает.

Ответы [ 2 ]

1 голос
/ 28 февраля 2009

Вы уверены, что это хороший дизайн пользовательского интерфейса - держать дочернее окно поверх остальных? Разве это не должно стать отдельным верхним кадром? Или панель управления?

1 голос
/ 27 февраля 2009

В вашем классе CMDIChildWnd (обычно CChildFrame) добавьте статический HWND m_hTopWnd. Установите его равным HWND ребенка, которому вы хотите быть всегда на вершине.

Ручка WM_WINDOWPOSCHANGED в CChildFrame. В обработчике проверьте текущий m_hWnd == m_hTopWnd. Если нет, позвоните

::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0, 
    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);

Таким образом, всякий раз, когда устанавливается положение любого дочернего окна MDI, окно «всегда сверху» будет сдвигаться обратно наверх.

Также обрабатывайте WM_CLOSE, и когда верхнее окно закрывается, установите m_hTopWnd = NULL.

См. Также: Статья CodeProject и База знаний MSDN

...