• Domingo 15 de Diciembre de 2024, 07:00

Autor Tema:  Duda Al Pintar Texto En Consola  (Leído 1771 veces)

Emperorxdevil

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Duda Al Pintar Texto En Consola
« en: Jueves 2 de Agosto de 2007, 00:19 »
0
Hola a todos.

Verán, estoy intentando pintar texto de color sobre la ventana tipica que se abre en un programa C de consola con API.

Resulta que estoy un poco perdido, porque creo que no se me olvida nada y en consola no sale el texto coloreado ni sin colorear.

El code es este:

Código: Text
  1.  
  2.  
  3. char s[]="Texto"; // texto que quiero pintar de rojo
  4.  
  5. HWND h;
  6. HDC hd;
  7.  
  8.  
  9. h = FindWindow("ConsoleWindowClass", NULL);  // obtengo el handle
  10. hd=GetDC(h) // obtengo el handle del contexto
  11.  
  12.         SetTextColor(hd, 0x00FF0000); // defino el color rojo..
  13.    TextOut(hd, 10, 5, s, lstrlen(s)); // intento pintarlo en el area cliente de la ventana
  14.  
  15.  

Podeis decirme por qué no "pinta" el texto ?
No es la Api correcta ?

Gracias

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Duda Al Pintar Texto En Consola
« Respuesta #1 en: Jueves 2 de Agosto de 2007, 02:43 »
0
Ese tipo de errores suele ser común, ya que en realidad el pintado de un area debe realizarce al resivir el mensaje del sistema WM_PAINT, de todas formas logré que funcione el código de la siguiente manera:

Código: Text
  1.  
  2. ///////////////////////////////////
  3. //compile as console mode app
  4. #include <windows.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. int main(void){
  10.  
  11.   HWND h;
  12.   HDC hdc;
  13.   SetLastError(0);
  14.  
  15.   char s[]="Texto"; // texto que quiero pintar de rojo
  16.   h = FindWindow("ConsoleWindowClass", NULL);  // obtengo el handle
  17.   hdc=GetDC(h); // obtengo el handle del contexto
  18.  
  19.   SetTextColor(hdc,0xff00FF); // defino el color rojo..
  20.   TextOut(hdc, 30, 25, s, lstrlen(s)); // intento pintarlo en el area cliente de la ventana
  21.   ValidateRect(h,NULL);
  22.   system("pause");
  23. }
  24.  
  25.  

con ValidateRect(h,NULL) excluís una parte (o toda como en este caso) de la pantalla de la próxima "pintada" de windows...

S2

Emperorxdevil

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Duda Al Pintar Texto En Consola
« Respuesta #2 en: Jueves 2 de Agosto de 2007, 14:29 »
0
Rayos !! La API ValidateRect no estaba en mi base de datos.
Weno, me estoy bajando varios libros de la API para completarla.

Al final conseguí pintar texto de esta forma:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. void menu(void);
  6.  
  7. HWND hConsole;
  8.  
  9.  
  10.  
  11. void main() {
  12.  
  13.   menu();
  14.   getchar();
  15.  
  16. }
  17.  
  18.  
  19.  
  20. void menu(void)
  21.  {
  22.  
  23.  
  24.    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  25.  
  26.    SetConsoleTextAttribute(hConsole, 2);
  27.  
  28.  
  29.     printf("\n\n(Texto en verde) El StdHWND es: %d ",hConsole);
  30.  
  31.  
  32.    SetConsoleTextAttribute(hConsole, 5);
  33.    printf("\n\n\n");
  34.  
  35. }
  36.  
  37.  


Gracias por el soporte !!

Salu2

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda Al Pintar Texto En Consola
« Respuesta #3 en: Jueves 2 de Agosto de 2007, 15:19 »
0
La documentacion de Windows, en este caso para la consola, es la MSDN.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Duda Al Pintar Texto En Consola
« Respuesta #4 en: Jueves 2 de Agosto de 2007, 20:39 »
0
Cita de: "Emperorxdevil"
Podeis decirme por qué no "pinta" el texto ?
No es la Api correcta ?
No es la función correcta :P. Tú quieres escribir en una ventana de consola, y usas una función para escribir a un form (en este caso se hace como en el ejemplo de Karman), para lo que tú quieres puedes usar la función estándar printf (como finalmente lo hiciste) o la función ConsoleWrite de la API de Windows.
La imaginación es el límite.
Hardware & Software | Mexchip