ID do artigo: 108315 - Última revisão: segunda-feira, 11 de julho de 2005 - Revisão: 1.3

Como manter uma MDI janela 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 | Recolher tudo

Sumário

Ao criar uma várias janelas de documento MDI (interface), existem não estilos disponíveis para a nova janela fique sobre outras janelas MDI. Como alternativa, os dois métodos estão disponíveis para atingir essa funcionalidade:
  • Processar a mensagem WM_WINDOWPOSCHANGED e chame SetWindowPos() para alterar a ordem Z da janela.
  • Instalar um timer para as janelas MDI e redefinir a ordem-Z da janela ao processar a mensagem WM_TIMER.

Mais Informações

MDICREATESTRUCT tem o campo "estilo", que pode ser definido com os estilos para a nova janela MDI. Estendido estilos, como WS_EX_TOPMOST, não estão disponíveis em janelas MDI. Este campo de MDICREATESTRUCT é passado para CreateWindowEx() no parâmetro dwStyle. O campo dwExStyle é definido como 0 L. Os dois métodos abaixo não podem ser usados ao mesmo tempo no mesmo aplicativo.

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 timer para as janelas MDI e redefinir a ordem-Z da janela ao 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 obter informações adicional sobre como alterar a ordem Z das janelas pop-up filho, consulte os seguintes artigos na Base de dados de Conhecimento Microsoft:
66943  (http://support.microsoft.com/kb/66943/EN-US/ ) Determinar a primeira janela pop-up

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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/ )