Con la mejora de las tecnologías de visualización gráfica, la API de los sistemas operativos también mejoró, proporcionando a los programadores cada vez más oportunidades para desarrollar elementos de interfaz no estándar. Así que una de las innovaciones del sistema operativo Windows 2000 fueron las ventanas en capas, partes de las cuales podían ser translúcidas. Pronto, una descripción de la API para trabajar con ventanas en capas estuvo disponible en MSDN. Sin embargo, en los foros de programadores, todavía se hacen preguntas sobre cómo hacer que una ventana sea semitransparente.
Necesario
- - compilador;
- - Windows sdk o framework para la programación de Windows.
Instrucciones
Paso 1
Consiga una manija para la ventana que desea hacer semitransparente. Busque o cree una ventana. Para crearlo, use las funciones de API CreateWindow, CreateWindowEx o los métodos de envoltura alrededor de estas funciones que pertenecen a las clases del marco utilizado. El prototipo de la función CreateWindow tiene este aspecto:
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 puede ver, la función devuelve un identificador a la ventana creada como resultado de la ejecución. Si se usa alguna clase contenedora, use sus métodos en el objeto correspondiente a la ventana creada para obtener el identificador.
Paso 2
La búsqueda de una ventana se puede realizar mediante llamadas a la API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows y sus combinaciones. Puede obtener un identificador de una ventana dentro de un área específica utilizando las funciones WindowFromPoint y ChildWindowFromPoint.
Paso 3
Establezca la ventana en el estilo extendido WS_EX_LAYERED. Utilice la API SetWindowLong o los métodos correspondientes de los objetos contenedores. La función SetWindowLong reemplaza completamente la información de los parámetros de ventana modificables, así que úsela en combinación con la función GetWindowLong para recuperar el valor anterior para el conjunto de indicadores de estilo. Por ejemplo, el estilo se puede cambiar así:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Aquí hWnd es el identificador de ventana que se encuentra como resultado de realizar las acciones descritas en el paso anterior.
Paso 4
Haz la ventana semitransparente. Utilice la API SetLayeredWindowAttributes o los métodos de las clases contenedoras. El prototipo de la función SetLayeredWindowAttributes tiene este aspecto:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Paso 5
El parámetro hwnd de la función debe ser un identificador de ventana válido obtenido en el primer paso. El parámetro crKey es una clave de color que se utiliza para definir áreas semitransparentes. El parámetro bAlpha especifica el valor de translucidez. Con el valor del parámetro bAlpha igual a 0, las áreas "semitransparentes" serán completamente transparentes. Si el parámetro bAlpha es 255, serán completamente opacos. El parámetro dwFlags determina el modo de visualización adicional del contenido de la ventana. Cuando la bandera LWA_COLORKEY se incluye en el valor de dwFlags, las áreas semitransparentes de la ventana se determinarán en función de la clave de color. Cuando la bandera LWA_ALPHA está habilitada, el parámetro bAlpha se utilizará para determinar el valor de translucidez.
Paso 6
Para hacer que toda la ventana sea semitransparente, llame a SetLayeredWindowAttributes con el valor del parámetro bAlpha preferido, el indicador LWA_ALPHA, pero no el indicador LWA_COLORKEY. Utilice el identificador de ventana encontrado como el primer parámetro de la función. Por ejemplo, para hacer que una ventana sea medio transparente, use la llamada:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);