Como Fazer Uma Janela Semitransparente

Índice:

Como Fazer Uma Janela Semitransparente
Como Fazer Uma Janela Semitransparente

Vídeo: Como Fazer Uma Janela Semitransparente

Vídeo: Como Fazer Uma Janela Semitransparente
Vídeo: Janelas de Telhado 2024, Novembro
Anonim

Com o aprimoramento das tecnologias de exibição gráfica, a API dos sistemas operacionais também melhorou, fornecendo aos programadores cada vez mais oportunidades para o desenvolvimento de elementos de interface não padrão. Portanto, uma das inovações do sistema operacional Windows 2000 foram as janelas em camadas, partes das quais podiam ser translúcidas. Logo, uma descrição da API para trabalhar com janelas em camadas tornou-se disponível no MSDN. No entanto, em fóruns de programadores, ainda estão sendo feitas perguntas sobre como tornar uma janela semitransparente.

Como fazer uma janela semitransparente
Como fazer uma janela semitransparente

Necessário

  • - compilador;
  • - Windows SDK ou framework para programação do Windows.

Instruções

Passo 1

Coloque uma alça na janela que deseja tornar semitransparente. Encontre ou crie uma janela. Para criá-lo, use as funções CreateWindow, CreateWindowEx API ou os métodos de invólucro em torno dessas funções pertencentes às classes da estrutura usada. O protótipo da função CreateWindow é assim:

HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent,

HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);

Como você pode ver, a função retorna um identificador para a janela criada como resultado da execução. Se qualquer classe de wrapper for usada, use seus métodos no objeto correspondente à janela criada para obter o identificador.

Passo 2

Encontrar uma janela pode ser feito usando chamadas de API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows e suas combinações. Você pode obter um identificador para uma janela dentro de uma área específica usando as funções WindowFromPoint e ChildWindowFromPoint.

etapa 3

Defina a janela para o estilo estendido WS_EX_LAYERED. Use a API SetWindowLong ou os métodos correspondentes de objetos de invólucro. A função SetWindowLong substitui completamente as informações do parâmetro da janela modificável, portanto, use-a em combinação com a função GetWindowLong para recuperar o valor anterior para o conjunto de sinalizadores de estilo. Por exemplo, o estilo pode ser alterado assim:

:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));

Aqui, hWnd é o identificador da janela encontrado como resultado da execução das ações descritas na etapa anterior.

Passo 4

Faça a janela semitransparente. Use a API SetLayeredWindowAttributes ou métodos das classes de invólucro. O protótipo da função SetLayeredWindowAttributes tem a seguinte aparência:

BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);

Etapa 5

O parâmetro hwnd para a função deve ser um identificador de janela válido obtido na primeira etapa. O parâmetro crKey é uma chave de cor usada para definir áreas semitransparentes. O parâmetro bAlpha especifica o valor de translucidez. Com o valor do parâmetro bAlpha igual a 0, as áreas "semitransparentes" serão completamente transparentes. Se o parâmetro bAlpha for 255, eles serão completamente opacos. O parâmetro dwFlags determina o modo de exibição adicional do conteúdo da janela. Quando o sinalizador LWA_COLORKEY é incluído no valor dwFlags, as áreas semitransparentes da janela serão determinadas com base na chave de cor. Quando o sinalizador LWA_ALPHA está habilitado, o parâmetro bAlpha será usado para determinar o valor de translucidez.

Etapa 6

Para tornar a janela inteira semitransparente, chame SetLayeredWindowAttributes com o valor do parâmetro bAlpha preferencial, o sinalizador LWA_ALPHA, mas nenhum sinalizador LWA_COLORKEY. Use o identificador de janela encontrado como o primeiro parâmetro para a função. Por exemplo, para tornar uma janela parcialmente transparente, use a chamada:

:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);

Recomendado: