Artigo: 108315 - Última revisão: segunda-feira, 11 de Julho de 2005 - Revisão: 1.3

Como manter uma janela MDI sempre visível

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Quando criar uma janela de interface (MDI) de múltiplos documentos, existem não estilos disponíveis para que a nova janela permanecer por cima das outras janelas do MDI. Em alternativa, os dois métodos estão disponíveis para obter esta funcionalidade:
  • Processar a mensagem WM_WINDOWPOSCHANGED e chamar SetWindowPos() para alterar a ordem Z da janela.
  • Instalar um temporizador de janelas MDI e repor a ordem Z da janela quando processar a mensagem WM_TIMER.

Mais Informação

MDICREATESTRUCT tem o campo "estilo", que pode ser definido com os estilos para a nova janela MDI. Expandido estilos, tal como WS_EX_TOPMOST, não estão disponíveis em janelas MDI. Este campo MDICREATESTRUCT é transmitido para CreateWindowEx() no parâmetro dwStyle. O campo dwExStyle é definido como 0 L. Os dois métodos abaixo indicados não podem ser utilizados ao mesmo tempo na mesma aplicação.

Método 1: Processar a mensagem WM_WINDOWPOSCHANGED e chamar SetWindowPos() para alterar a ordem Z da janela.

Código de exemplo

   LRESULT CALLBACK MdiWndProc (HWND hWnd, UINT message, WPARAM wParam,
                       LPARAM lParam)
   {
       static HWND hWndAlwaysOnTop = 0;
       switch (message)
        {
        case WM_CREATE :
            if (!hWndAlwaysOnTop)
             {
             SetWindowText (hWnd, "Always On Top Window");
             hWndAlwaysOnTop = hWnd;
             }
               break;
        case WM_WINDOWPOSCHANGED :
            if (hWndAlwaysOnTop)
             {
             WINDOWPOS FAR* pWP = (WINDOWPOS FAR*)lParam;
             if (pWP->hwnd != hWndAlwaysOnTop)
                 SetWindowPos (hWndAlwaysOnTop, HWND_TOP, 0, 0, 0, 0,
                         SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
             }
            break;
        // 
        // Other Messages to process here.
        // 
        case WM_CLOSE :
            if (hWndAlwaysOnTop == hWnd)
             hWndAlwaysOnTop = NULL;
        default :
            return DefMDIChildProc (hWnd, message, wParam, lParam);
        }
       return 0L;
   }
				
Método 2: Instalar um temporizador de janelas MDI e repor a ordem Z da janela quando processar a mensagem WM_TIMER.

Código de exemplo

   LRESULT CALLBACK MdiWndProc (HWND hWnd, UINT message, WPARAM wParam,
                       LPARAM lParam)
   {
       static HWND hWndAlwaysOnTop = 0;
       switch (message)
        {
        case WM_CREATE :
            SetTimer (hWnd, 1, 200, NULL);
            if (!hWndAlwaysOnTop)
             {
             SetWindowText (hWnd, "Always On Top Window");
             hWndAlwaysOnTop = hWnd;
             }
               break;
        case WM_TIMER :
            if (hWndAlwaysOnTop)
             {
             SetWindowPos (hWndAlwaysOnTop, HWND_TOP, 0, 0, 0, 0,
                        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
             }
            break;
        case WM_DESTROY:
            KillTimer (hWnd, 1) ;
            break;
        // 
        // Other Messages to process here.
        // 
        case WM_CLOSE :
            if (hWndAlwaysOnTop == hWnd)
             hWndAlwaysOnTop = NULL;
        default :
            return DefMDIChildProc (hWnd, message, wParam, lParam);
        }
       return 0L;
   }
				
Para informações adicional sobre como alterar a ordem Z das janelas de pop-up subordinadas, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
66943  (http://support.microsoft.com/kb/66943/EN-US/ ) Determinar a janela de janelas de pop-up superior

A informação contida neste artigo aplica-se a:
  • Microsoft Platform Software Development Kit-January 2000 Edition
  • Microsoft Windows Software Development Kit 3.1
Palavras-chave: 
kbmt kbhowto kbmdi kbwndw KB108315 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 108315  (http://support.microsoft.com/kb/108315/en-us/ )