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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top