¿Puedo pedir ayuda a expertos sobre cómo crear una interfaz gráfica para software escrito en lenguaje C?
¿Manejador? hOut
¿No válido? ShadowWindowLine(char?*cadena);? //Muestra una línea de caracteres en una ventana con un efecto de sombra y la ventana se muestra en el centro.
¿Anulado? DrawBox(bool? single? small_rect? rc);? //Dibujar un borde
¿Desactivar? Main()
{
¿Salir? =?GetStdHandle(STD_OUTPUT_HANDLE);? //Obtiene el identificador del dispositivo de salida estándar.
SetConsoleOutputCP(437);? //Establecer la página de códigos
ShadowWindowLine("¿Pantalla? ¿Respuesta? ¿Línea? ¿Palabras? ¿Y luego qué? ¿Centro? ¿Eso? ¿Ventana? ¿Qué usar? Sombra.");
cerrar identificador(hOut);? //Cierre el controlador del dispositivo de salida estándar.
}
¿Anulado? ShadowWindowLine(char?*str)
{
¿Console_Screen_Buffer_Information? bInformación? //Información del buffer de ventana
GetConsoleScreenBufferInfo(? Haote? ampbInfo?);? //Obtener información del búfer de la ventana
//?Calcular el tamaño y la posición de la ventana de visualización
int? x1,? y1,? x2,? y2,? ¿Numero? =?strlen(cadena);
x1? =?(bInfo.dwSize.X?-?chNum)/2? -?2;
y1? =?bInfo.dwTamaño.Y/2? -?2;
x2? =?x1? ?chNúm? ?4;
y2? =?y1? ?5;
¿Palabras? att1? =?intensidad_de_fondo;? //Atributo de sombra
¿Palabra? att0? =?primer plano_rojo? |¿Primer plano_verde? |¿Primer plano_azul? |?Prospect_Strength? |?
¿Fondo_rojo? |?Background_blue;? //Atributo de texto
¿Palabra? attTexto? =?primer plano_rojo? |foreground_strength;? //Propiedades del texto
//?Establecer sombra
¿Coordenadas? Bossado? =?{x1 1,? y1 1},? posTexto? =?{x1,? y 1 };
¿Para qué? (int?I = 0;?i lt5;?i)
{
FillConsoleOutputAttribute(hOut, att1, ?chNum? ?4, ?Posado? NULL);?
Bosado. y ;
}
//?Rellenar el fondo de la ventana
¿Para qué? (I = 0;?i lt5;?i)
{
FillConsoleOutputAttribute(hOut,?att0,?chNum??4,?posText,?NULL);?
posTexto. y ;
}
//?Escribir texto y bordes
posText. ¿incógnita? =?x1? ?2;
posText.
y? =?y1? ?2;
WriteConsoleOutputCharacter(hOut, str, ?strlen(str), ?posText, ?NULL);
Small_RECT? ¿rc? =?{x1,? y1,? x2-1,? y2-1};
DrawBox(sí, RC);
SetConsoleTextAttribute(hOut, binfo. atributos de vatios);? //Restaurar atributos originales
}
¿No es válido? DrawBox(bool? ¿Único? Small_rect?rc)
{
Carácter? ch cuadro[6];
¿Si? (b¿Soltero)?
{
chBox[0]? =?(char)0x da;? //Punto de la esquina superior izquierda
chBox[1]? =?(char)0x BF;? //Haga clic en la esquina superior derecha
chBox[2]? =?(char)0xc 0;? //Punto de la esquina inferior izquierda
chBox[3]? =?(char)0xd 9;? //Haga clic en la esquina inferior derecha
chBox[4]? =?(carácter)0x C4;? //¿Horizontal
chBox[5]? =?(carácter)0x B3;? //?Kenichi
}
Otros
{
chBox[0]? =?(char)0xc 9;? //Punto de la esquina superior izquierda
chBox[1]? =?(char)0xbb;? //Haga clic en la esquina superior derecha
chBox[2]? =?(char)0x c8;? //Punto de la esquina inferior izquierda
chBox[3]? =?(char)0x antes de Cristo;? //Haga clic en la esquina inferior derecha
chBox[4]? =?(carácter)0x CD;? //¿Horizontal
chBox[5]? =?(char)0xba;? //Kenichi
}
¿Coordenadas? pos? =?{rc. Izquierda,? rc. top };
WriteConsoleOutputCharacter(hOut, ampchBox[0],?1,?pos,?NULL);
¿Para qué? (Posición. NULL);
Posición. ¿incógnita? =?rc. Correcto;
WriteConsoleOutputCharacter(hOut, ampchBox[1],?1,?pos,?NULL);
¿Para qué? (posición.y?=?rc.top 1;?posición.Y ltrc.bottom;posición.Y)
{
Posición. ¿incógnita? =?rc. Izquierda;
WriteConsoleOutputCharacter(hOut, ampchBox[5], ?1, ?pos, ?NULL);
Posición. ¿incógnita? =?rc. Derecha;
WriteConsoleOutputCharacter(hOut, ampchBox[5], ?1, ?pos, ?NULL);
}
Posición. ¿incógnita? =?rc. Izquierda;? Ubicación. y? =?rc.
Abajo;
WriteConsoleOutputCharacter(hOut, ampchBox[2], ?1, ?pos, ?NULL);
¿Para qué? (Posición. NULL);
Posición. ¿incógnita? =?rc. Sí;
WriteConsoleOutputCharacter(hOut, ampchBox[3],?1,?pos,?NULL);
}