Red de conocimiento informático - Material del sitio web - Cómo escribir una interfaz gráfica de usuario desde cero en C

Cómo escribir una interfaz gráfica de usuario desde cero en C

La biblioteca de interfaz gráfica de usuario puede ser grande o pequeña. La grande puede ser Qt WPF, por ejemplo, con millones de líneas de código; la pequeña puede ser WTL, por ejemplo, con sólo unos pocos archivos de encabezado.

Para la gente común, no espere poder crear una biblioteca de interfaz gráfica de usuario grande. Sería bueno escribir una más pequeña que pueda satisfacer sus propias necesidades y sea adecuada para ciertos tipos de aplicaciones. .

Una vez necesité una pequeña biblioteca GUI para escribir un instalador.

Este programa de instalación es bastante especial. Se utiliza para descargar e instalar software en Internet. Debe cumplir con los siguientes requisitos:

1. Un enlace estático, y depende del sistema. Cuanto menor sea el sexo, mejor.

2. El código ejecutable debe ser lo suficientemente pequeño. En términos generales, lo óptimo es alrededor de 500 KB.

3. Tiene efectos gráficos atractivos, como animación durante el proceso de instalación, apertura de sombra translúcida en la ventana, etc.

Obviamente es inapropiado escribir en Qt. Aunque he dicho muchas veces en Zhihu que la biblioteca Qt en realidad no es grande, todavía es un poco grande para escribir un programa de instalación. El archivo ejecutable pesa aproximadamente 2 MB.

No es adecuado utilizar MFC. El enlace estático de MFC es de aproximadamente 400 KB, contando el código y los recursos propios del programa de instalación, debe ser más de 500 KB.

Usar VC 6.0 para escribir MFC puede ser mucho más pequeño, pero usar esta antigüedad no es de mi agrado.

Escrito en WTL, debe ser muy pequeño. El enlace estático del programa que solo crea una ventana tiene solo unos 50 KB, pero no tiene funciones. Solo se puede crear simplemente con partes estándar básicas. Debe ser transparente. La ventana debe implementarse por sí misma utilizando otras API.

Escribamos uno nosotros mismos. Debería ser más pequeño y más práctico. Puede usarse como programa de instalación.

No busques multiplataforma, solo resuelve los problemas de Windows.

Para implementar la biblioteca GUI, existen varios subsistemas básicos:

1. Sistema de administración de ventanas, el código encapsula la API de Win, pero este trabajo es muy aburrido y problemático. use la clase de ventana implementada por WTL para agregar CWindow de WTL y use WTL para la administración en segundo plano. WTL me ayuda a crear la ventana. No uso la derivación porque no quiero WTL. No uso la derivación porque no quiero que WTL contamine el diseño de mi interfaz.

Utilicé un método de clase privada para encapsular WTL, que es invisible para el mundo exterior

/pseudocode

Clase RWindow: public RObject

{

privado:

RWindowPrivate *d;

}

clase RWindowPrivate

{< / p>

público:

CWindow m_wnd;

}

2.

Sistema de eventos, macro de mapeo de mensajes WTL Demasiado feo , Me gustan las señales/ranuras de Qt. Me gustan las señales/ranuras de Qt, pero no es fácil implementar señales/ranuras como Qt, es como inventar una sintaxis de extensión C

e implementar un preprocesamiento de compilación como MOC. Es lo mismo que el dispositivo, es demasiado laborioso. Usar Boost::signal

también es demasiado complicado. Boost introduce una gran biblioteca dependiente y espero poder usar el VC predeterminado para compilar esta biblioteca GUI, por lo que no quiero depender de ella. demasiadas otras bibliotecas y la función boost

dificultará la compilación.

Elegí utilizar la biblioteca ligera sigslot, /question/24462113/answer/27888139.