[C con Clase] Controles de Windows API 32

Daniel de Dios El Ignorado daniel.dedios en hotmail.com
Vie Feb 14 13:14:35 CET 2020


Gracias Salvador.  Nuevamente te doy las gracias por la información, que me será muy útil, ahora tengo mucho que leer, comprender y experimentar, pues veo que hay varias formas de conseguir lo que quiero.  El tener el control sobre los controles era imprescindible para programar en serio, pero se puede conseguir añadir más cosas con la superclase.  Ya veremos, es cosa de probarlo.

Saludos
Daniel de Dios "El Ignorado"


________________________________
De: Cconclase <cconclase-bounces en listas.conclase.net> en nombre de Salvador Pozo <salvador en conclase.net>
Enviado: martes, 11 de febrero de 2020 17:12
Para: cconclase en listas.conclase.net <cconclase en listas.conclase.net>
Asunto: Re: [C con Clase] Controles de Windows API 32

Hola:

Esto es un tema "avanzado" del API de Windows. :)

Lo que necesitas para personalizar más un control es crear una subclase. La documentación de microsoft explica cómo hacerlo:
https://docs.microsoft.com/en-us/windows/win32/winmsg/about-window-procedures

Básicamente consiste en crear tu propio procedimiento de ventana para el control que quieres modificar, y usar la función: SetWindowLong
http://winapi.conclase.net/curso/?winfun=SetWindowLong

Para que los mensajes se envíen a ese procedimiento. Una vez que hayas procesado los mensajes que te interese, el resto se envían al procedimiento de ventana original usando CallWindowProc y la dirección del procedimiento que has debido conservar previamente, y que te devuelve SetWindowLong.

DdD> En cuanto a los problemas con los fuentes y colores, ha de ser algún problema con los includes, pues parece que no reconoce las funciones como parte de una DLL, y parece que el link, espera resolver los problemas con una biblioteca estática.  (Por cierto, ¿como se indica que funciones ha de buscar en una DLL en concreto?)
DdD> ¿Hay que indicar algo en los includes, o se ha de añadir la DLL, en cuestión en el Link como se con las bibliotecas estáticas?

La función SetBkColor requiere la DLL Comctl32.dll, deberías añadirla en la configuración del proyecto para que se enlace.

No sé qué compilador estás usando, y la forma de añadir librerías en la fase
de enlazado es diferente en cada uno. En el caso de Code::Blocks es en "opciones de proyecto", "Linker settings", "Link libraries". Basta con añadir el nombre de la librería, sin el "DLL", en este caso "comctl32".

Aunque usando este IDE aparentemente no es necesario, ya que el propio IDE carga esa DLL para su uso, y enmascara los errores en el proyecto. Esto puede ser un problema cuando se ejecute la aplicación y ninguna otra haya cargado esa librería. :(

Hasta pronto.

--
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20200214/ad805b6a/attachment-0001.html>


Más información sobre la lista de distribución Cconclase