Red de conocimiento informático - Aprendizaje de código fuente - Cómo lograr este efecto de sombra en el borde de la ventana en un lenguaje sencillo

Cómo lograr este efecto de sombra en el borde de la ventana en un lenguaje sencillo

El programa que escribí para dibujar el borde de la ventana se puede implementar usando la API. Cree un pincel. Puede usar el pincel extendido para probar la función API de la siguiente manera: Versión 2.DLL Comando API_ReleaseDeviceScene, Entero, "user32", "ReleaseDC", Libera la escena del dispositivo especificada obtenida llamando a la función GetDC o GetWindowDC. No es válido para escenarios de clase o dispositivo privado (pero dicha llamada no causa daño), 1 si la ejecución fue exitosa, 0 en caso contrario

. Parámetro identificador de ventana, número entero, identificador de ventana asociado con la escena del dispositivo que se va a liberar

. Parámetros deviceScene, entero, el identificador de la escena del dispositivo que se lanzará; comando .DLL API_FindTopWindow, entero, "user32", "FindWindowA", encuentra la primera ventana de nivel superior en la lista de ventanas que cumple con las condiciones especificadas (usada en vb: Uno de los usos más comunes de FindWindow es obtener el identificador de una ventana oculta de la clase ThunderRTMain; esta clase es parte de todos los ejecutables de vb en ejecución. Después de obtener el identificador, puede usar la función API GetWindowText para obtener el. nombre de la ventana; este nombre es también el título de la aplicación) para encontrar el identificador de la ventana. Si no se encuentra ninguna ventana coincidente, se devuelve 0. Se establecerá GetLastError

. Parámetros WindowClassName, tipo de texto, puntero a una cadena de parada nula (C) que contiene el nombre de la clase de la ventana o establecido en cero para recibir cualquier nombre de clase

. Parámetros Texto de ventana, tipo de texto, puntero a una cadena vacía (C) que contiene el texto de la ventana (o etiqueta) para recibir cualquier título de ventana. Ejemplo Dim hw&, cnt&rttitle As * 256hw& = FindWindow(" ThunderRT5Main; ", vbNullString) ' vbNullString) ' ThunderRTMain bajo VB4cnt = GetWindowText(hw&, rttitle, 255)MsgBox Left$(rttitle, cnt), 0, "RTMain title"; comando .DLL API_Crear pincel de color sólido API_CreateSolidBrush, entero, "gdi32 " , "CreateSolidBrush", , Crea un pincel de color sólido. Si la ejecución es exitosa, devuelve el identificador del nuevo pincel; de lo contrario, devuelve 0

. Valor de color del parámetro, entero, color RGB numérico; comando .DLL API_DeleteObject, entero, "gdi32", "DeleteObject", utilice esta función para eliminar objetos GDI como pinceles, pinceles, fuentes, mapas de bits, regiones y paletas de colores, etc. . Se liberarán todos los recursos del sistema utilizados por el objeto. Un valor distinto de cero indica éxito y cero indica error

. Identificador de objeto de parámetro, entero, identificador del objeto GDI; comando API_TakeWindowRect, entero, "user32", "GetWindowRect", Obtiene el rango rectangular de toda la ventana, el borde de la ventana, la barra de título, la barra de desplazamiento y el menú son todos ubicados en este rectángulo. Un valor distinto de cero en el rango indica éxito, cero indica fracaso. Se establecerá GetLastError

. Parámetros identificador de ventana, número entero, identificador de ventana cuyo rango rectangular se va a obtener

.

Parámetros rectánguloRegión, RECT, RECT, carga el rectángulo de la ventana con las coordenadas de la pantalla; comando .DLL API_FetchDeviceScene, entero, "user32", "GetDC", obtiene el identificador de escena del dispositivo de la ventana especificada. error.

.Los parámetros hwnd, integer, obtienen el identificador de ventana de la escena del dispositivo. Comando DLL API_CreatePen, entero, "gdi32", "CreatePen", crea un pincel con el estilo, ancho y color especificados. Si la función se ejecuta correctamente, se devolverá un identificador para el nuevo pincel, de lo contrario, 0

.

será devuelto. El parámetro estilo, entero, especifica el estilo del pincel, que puede ser una de las siguientes constantes; PS_SOLID: el pincel dibuja una línea continua; PS_DASH: el pincel dibuja una línea de puntos (nWidth debe ser 1); dibuja una línea de puntos (nWidth debe ser 1 PS_DASHDOT: el lápiz dibuja una línea de puntos (nWidth debe ser 1 PS_DASDOT: el lápiz dibuja una línea de puntos (nWidth debe ser 1); -línea discontinua (nWidth debe ser 1); PS_NULL: el lápiz no puede dibujar una imagen PS_INSIDEFRAME: el lápiz está en Dibuje cuadros de objetos cerrados generados a partir de elipses, rectángulos, rectángulos redondeados, gráficos circulares y cadenas. Si el color RGB especificado no existe, se realizará el tramado

. Parámetros ancho, número entero, ancho del pincel expresado en unidades lógicas

. Parámetros color, entero, color RGB del pincel; comando .DLL API_UpdateWindow, entero, "user32", "UpdateWindow", fuerza una actualización inmediata de la ventana y vuelve a dibujar todas las áreas previamente enmascaradas en la ventana (usadas en vb: if Cualquier parte del formulario o control de vb debe actualizarse, considere usarlo directamente) El método de actualización distinto de cero significa éxito, cero significa error

. Parámetro hwnd, entero, identificador de ventana a actualizar. Comando DLL API_DrawFocusRect, Integer, "user32", "DrawFocusRect", dibuja el rectángulo de enfoque. El rectángulo se completa con una operación diferente o en el estilo que marca el foco (el foco suele estar representado por una línea discontinua). Si se vuelve a llamar a esta función con los mismos parámetros, indica que el rectángulo de enfoque se ha eliminado. Un valor distinto de cero indica éxito y cero indica error. GetLastError está configurado

. Parámetro deviceSceneHandle, entero, identificador de escena del dispositivo

..Comando DLL API_CreateBrushExpansion, entero, "gdi32", "ExtCreatePen", crea un pincel extendido (decorativo o geométrico). Si la ejecución es exitosa, devuelve el. Mango de pincel extendido. 0 indica un error de ejecución. Una vez que el pincel ya no sea necesario, recuerda eliminarlo usando DeleteObject

. El parámetro tipo de pluma, entero, tipo de pluma proviene de la combinación (operación O) de cualquiera de las siguientes constantes en la matriz de constantes PS_COSMETIC o PS_GEOMETRIC: PS_ALTERNATE, PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_USERSTYLE, PS_INSIDEFRAME : estilo del pincel ;PS_ENDCAP_: la punta del pincel; PS_JOIN_: la forma de conectar segmentos de línea en el dibujo o líneas rectas en el trazado

. Parámetros ancho de punta, entero, especifica el ancho de la línea. El ancho de línea del pincel de geometría debe ser 1

.

Estructura de definición del pincel de parámetros, LOGBRUSH, , LOGBRUSH, , lbColor representa el color del pincel. Para pinceles decorativos, lbStyle es PS_SOLID; para pinceles geométricos, lbStyle representa el estilo real. Para los pinceles geométricos, se deben configurar todas las demás fuentes

. Parámetros El número de segmentos personalizados, un número entero, que representa el número de entradas en la matriz lpStyle si se especifica PS_USERSTYLE

. Parámetros customLine, entero, especifica "Pares línea/espacio para PS_USERSTYLE" (texto original: Pares línea/espacio para PS_USERSTYLE); comando .DLL API_MaskWindowRect, entero, "user32", "InvalidateRect", esta función enmascara el área del cliente de la ventana todo o parte del contenido. Un valor distinto de cero indica éxito, cero indica fracaso

. Parámetros identificador de ventana, entero, , identificador de ventana a enmascarar

Parámetros de máscara rectángulo, RECT, , RECT, una estructura rectangular utilizada para describir la parte rectangular a enmascarar. Toda la ventana se puede enmascarar (o deshabilitar) usando la función InvalidateRectBynum configurando lpRect en cero (tipo de datos largos)

. .DLL Comando API_RedrawWindow, Entero, "user32", "RedrawWindow", Redibujar toda o parte de la ventana, dependiendo de la configuración del indicador fuRedraw. Un valor distinto de cero indica éxito, cero indica error. Se establecerá GetLastError

. Parámetros identificador de ventana, número entero, identificador de ventana que se va a volver a dibujar. Cero significa actualizar la ventana del escritorio

. Parámetros rectángulo, RECT, , RECT, el área rectangular de la ventana que se va a volver a dibujar

. Parámetros región, número entero, un identificador de "región" que describe la región de la ventana que se va a volver a dibujar. "área": ​​​​área

. Parámetros modo de borrado, número entero, indicadores que especifican una operación de redibujado específica. Las siguientes constantes se pueden usar en combinación para realizar operaciones complejas de redibujado; RDW_ERASE: borre el fondo del área de redibujado antes de volver a dibujar. También se debe especificar RDW_INVALIDATE; RDW_FRAME: si el área de redibujado contiene un área que no es de cliente, se actualiza el área que no es de cliente. También se debe especificar RDW_INVALIDATE: envía un mensaje WM_PAINT a la ventana, incluso si el mensaje no es válido; RDW_INVALIDATE: desactiva (enmascara) el área de redibujado; RDW_NOERASE: desactiva la eliminación del fondo del área de redibujado; de áreas no cliente (si es parte de un área de redibujo). También se debe especificar RDW_VALIDATE; RDW_NOINTERNALPAINT: deshabilita cualquier mensaje WM_PAINT pendiente generado internamente o por esta función. Para áreas no válidas, aún se generan mensajes WM_PAINT; RDW_VALIDATE: verifica el área de rediseño; RDW_ERASENOW: elimina inmediatamente el área de rediseño especificada; RDW_UPDATENOW: actualiza inmediatamente el área de rediseño especificada; area); RDW_NOCHILDREN: La operación de redibujado no incluye ventanas secundarias (siempre que existan en el área de redibujado). Comando DLL API_PaintRectangleBorder,Integer, "user32", "FrameRect", Utiliza el pincel especificado para dibujar un borde alrededor de un rectángulo (que forma el marco) con un ancho de borde de una unidad lógica distinto de cero indica éxito, cero indica éxito. y cero indica falla. Se establecerá GetLastError

.

Parámetros deviceScene, entero, identificador de escena del dispositivo

Parámetros rectángulo, RECT, RECT, describen el rectángulo para dibujar el límite. Esto equivale a establecer el ancho del pincel en una unidad y usar la función rectángulo para dibujar un rectángulo

. Parámetros identificador del pincel, número entero, identificador del pincel que desea utilizar;

.