Cómo configurar el fondo de la ventana para que sea transparente en la programación de Windows
#include "stdafx.h< / a>"#include ef="/s?wd=%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBuHTLmHRdPhDdnH9huAnd0ZwV5Hcvrjm3rH6 s PfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjTznHDznWDvrHn4rHT3P1Tz" target="_blank" class=" baidu -highlight">Función de devolución de llamada
NULL, //El identificador que apunta a la ventana principal o la ventana propietaria de la ventana creada, aquí está NULL NULL, //Identificador de menú, o especifica un identificador de ventana secundaria según el estilo de la ventana, aquí está NULL hInstance, //Relacionado con la ventana El identificador de la instancia del módulo asociado NULL);//Puntero a un valor que se pasa a la ventana WM_CREATE mensaje ShowWindow (hwnd, iCmdShow);//Mostrar ventana, hWnd: se refiere a identificador de ventana.
iCmdShow: especifique cómo mostrar la ventana UpdateWindow (hwnd); //Actualizar ventana, hWnd: se refiere a identificador de ventana while (GetMessage (&msg, NULL, 0, 0))// Bucle de mensajes { TranslateMessage (&msg) ;//Esta función convierte el mensaje de clave virtual en un mensaje de caracteres DispatchMessage (&msg) ;//Esta función distribuye un mensaje al programa de ventana} return msg.wParam;//wParam es el parámetro transportado por el mensaje, que puede ser un valor También puede ser una dirección}void SetIsotropic (HDC hdc, int cxClient, int cyClient){ SetMapMode (hdc, MM_ISOTROPIC); // La función SetMapMode establece el método de mapeo del entorno del dispositivo especificado. El método de mapeo define la medida de convertir unidades lógicas en unidades de dispositivo y define la dirección de los ejes X e Y del dispositivo // La unidad lógica se convierte en cualquier unidad con un eje de escala igual, es decir, uno. la unidad a lo largo del eje X es igual a una unidad a lo largo del eje Y SetWindowExtEx (hdc, 1000, 1000, NULL); //Utilice el valor especificado para establecer el rango de los ejes X e Y de las coordenadas del entorno del dispositivo especificado SetViewportExtEx ( hdc, cxClient / 2, -cyClient / 2, NULL) // Establece el origen de la ventana del entorno del dispositivo SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL); origen de la ventana}void RotatePoint (POINT pt[], int iNum, int iAngle){ //pt es una matriz que contiene uno o más puntos, iNum es el número de puntos, iAngle es el ángulo de rotación de cada punto int POINT ptTemp; ;//Defina una estructura de puntos para (i = 0; i < iNum; i++) { ptTemp.x = (int) (pt [i].x * cos (TWOPI * iAngle / 360) + pt[i].y * sin (TWOPI * iAngle / 360));// Convertir a coordenada x rotada ptTemp.y = (int) (pt [i].y * cos (TWOPI * iAngle / 360) - pt[i].x * sin (TWOPI * iAngle / 360)) ;// Convertir a coordenadas y rotadas pt[i] = ptTemp;// La nueva estructura de puntos reemplaza la estructura de puntos original}}void DrawClock (HDC hdc)// Se utiliza para dibujar puntos alrededor del reloj{ int iAngle; PUNTO pt[3];
(iAngle = 0; iAngle < 360; iAngle += 6) { pt[0].x = 0; pt[0].y = 900; RotatePoint (pt, 1, iAngle);//Se utiliza para diseñar el punto rotado; información de coordenadas pt[2].x = pt[2].y = iAngle % 5 ? 33 : 100 ;// Juzga el diámetro de los puntos durante todo el día pt[0].x -= pt[2].x / 2; pt[0].y -= pt[2].y / 2;//Obtiene las coordenadas de la esquina superior izquierda del rectángulo periférico de puntos alrededor del reloj pt[1].x = pt[0]. x + pt[ 2].x ; pt[1].y = pt[0].y + pt[2].y ;//Obtener las coordenadas de la esquina inferior derecha del rectángulo periférico de puntos alrededor del relojSelectObject ( hdc, GetStockObject (BLACK_BRUSH)); //Establece el identificador Ellipse (hdc, pt[0].x, pt[0].y, pt[1].x, pt[1].y //Dibuja un); elipse rodeada por el rectángulo especificado. La elipse se dibuja con el pincel seleccionado actualmente y se rellena con el pincel seleccionado actualmente}} void DrawHands (HDC hdc, SYSTEMTIME * pst, BOOL fChange) // Esta función se usa para dibujar las manecillas de la hora, los minutos y los segundos {estático PUNTO pt[3][5] = { 0, -150, 100, 0, 0, 600, -100, 0, 0, -150,// Las coordenadas de los cinco puntos de la manecilla de la hora 0, -200, 50, 0, 0, 800, -50 , 0, 0, -200,//Coordenadas de los cinco puntos del minuto 0, 0, 0, 0, 0, 0, 0, 0, 0, 800 } ;/ /Coordenadas de los cinco puntos del segundero int i, iAngle[3] ; POINT ptTemp[3][5] ; iAngle[0] = (pst->wHour * 30) % 360 + pst->wMinute / 2 ; //Se usa para obtener la desviación en el sentido de las agujas del reloj de la hora actual desde el ángulo direccional vertical iAngle[1] = pst->wMinute * 6;//Se usa para obtener el ángulo del minutero de la hora actual en el sentido de las agujas del reloj desde la dirección vertical iAngle[2] = pst->wSecond * 6;//Se utiliza para obtener la hora actual El ángulo en el que el segundero se desvía en el sentido de las agujas del reloj desde la dirección vertical memcpy (ptTemp, pt, sizeof (pt));//Copie la información de pt a ptTemp para (i = fChange? 0: 2; i < 3; i++)//fChange La función es volver a dibujar las manecillas de hora, minutos y segundos cuando es verdadero { RotatePoint (ptTemp[i], 5, iAngle[i]) ; hdc, ptTemp[i], 5) }}LRESULT CALLBACK WndProc (HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam){ static int cxClient, cyClient;