Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo configurar el fondo de la ventana para que sea transparente en la programación de Windows

Cómo configurar el fondo de la ventana para que sea transparente en la programación de Windows

#include "stdafx.h< / a>"#include #include < math. h>#define ID_TIMER 1#define TWOPI (2 * 3.14159)LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);//El primero es un Función de devolución de llamada declaración int WINAPI WinMain (HINSTANCE hInstance, //El identificador de la instancia actual de la aplicación HINSTANCE hPrevInstance, //El identificador de la instancia anterior de la aplicación PSTR szCmdLine, //Puntero a la cadena de la línea de comando de la aplicación int iCmdShow)//Indica cómo se muestra la ventana { static TCHAR szAppName[] = TEXT ("Clock") ; HWND hwnd;// Manejador de la instancia actual MSG msg;//Mensaje WNDCLASS wndclass;// Nombre de clase wndclass.style = CS_HREDRAW | CS_VREDRAW;//Cómo se muestra la ventana, aquí se muestra el redibujado horizontal y el redibujado vertical wndclass.lpfnWndProc = WndProc;//Window

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 wndclass.cbClsExtra = 0;// Extensión de ventana, aquí está 0 wndclass.cbWndExtra = 0;// Extensión de instancia de ventana, aquí está 0 wndclass.hInstance = hInstance;// Instancia de ventana handle wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);//El modo de visualización de la ventana, configurado aquí para el tipo de aplicación wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);//El modo de visualización del mouse, configurado aquí es el tipo estándar wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);//Configurando el color de fondo de la ventana, aquí está configurado en blanco wndclass.lpszMenuName = NULL;//Menú de ventana, aquí no hay menú y está configurado a NULL wndclass.lpszClassName = szAppName ;// Nombre de clase de ventana if (!RegisterClass (&wndclass))// Registrar ventana, si el registro falla, se generará el siguiente mensaje { MessageBox (NULL, TEXT ("¡El programa requiere Windows NT!") ), szAppName, MB_ICONERROR) ; return 0 } //// Crea una ventana si la función tiene éxito, el valor de retorno es el identificador de la nueva ventana: si la función falla, el valor de retorno es NULL. hwnd = CreateWindow (szAppName, TEXT ("Reloj analógico"),//El nombre de la ventana WS_OVERLAPPEDWINDOW,//Especifica el estilo de la ventana creada CW_USEDEFAULT,//Especifica la posición horizontal inicial de la ventana, si este parámetro está configurado a CW_USEDEFAULT, el sistema es la ventana Seleccione la coordenada predeterminada de la esquina superior izquierda e ignore el parámetro Y CW_USEDEFAULT, // Especifique la posición vertical inicial de la ventana CW_USEDEFAULT, // Especifique el ancho de la ventana en unidades de dispositivo, luego el sistema selecciona un ancho predeterminado para la ventana CW_USEDEFAULT, // Especifica la altura de la ventana en unidades de dispositivo. Si se establece en CW_USEDEFAULT, el sistema ignora el parámetro nHeight.

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;