Como fazer uma janela filho MDI estadia no topo de seus irmãos?
-
09-09-2019 - |
Pergunta
Esta questão está relacionada com a minha anterior um.
Eu tenho um MFC (VC6) MDI aplicação que tem várias janelas MDI criança agindo como pontos de vista diferentes para um único documento.
É possível definir um desses quadros para ficar em cima dos outros?
Tentei chamar
SetWindowPos(
&GetParentFrame()->wndTopMost,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
e
ModifyStyleEx(0, WS_EX_TOPMOST);
a partir do CMDIChildWnd mas nem parece trabalho.
Solução
Na sua classe CMDIChildWnd (geralmente CChildFrame), adicione um HWND m_hTopWnd
estática. Defini-lo igual ao HWND da criança você quer estar sempre no topo.
WM_WINDOWPOSCHANGED
Handle em CChildFrame
. No manipulador, verifique se o m_hWnd == m_hTopWnd
atual. Se não, chamada
::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
Desta forma, sempre que a posição de qualquer janela MDI filho está definido, o "always on top" janela será empurrado de volta ao topo.
Além disso WM_CLOSE
alça e quando a janela de topo está fechando, conjunto m_hTopWnd = NULL.
Veja também: CodeProject artigo e MSDN base de conhecimento
Outras dicas
Você tem certeza Design É bom UI para manter uma janela filho em cima dos outros? Isso não deveria tornar-se um quadro superior separado? Ou uma barra de controle?