SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Emperorxdevil en Jueves 2 de Agosto de 2007, 00:19

Título: Duda Al Pintar Texto En Consola
Publicado por: Emperorxdevil en Jueves 2 de Agosto de 2007, 00:19
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
Título: Re: Duda Al Pintar Texto En Consola
Publicado por: Karman en Jueves 2 de Agosto de 2007, 02:43
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
Título: Re: Duda Al Pintar Texto En Consola
Publicado por: Emperorxdevil en Jueves 2 de Agosto de 2007, 14:29
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
Título: Re: Duda Al Pintar Texto En Consola
Publicado por: Eternal Idol en Jueves 2 de Agosto de 2007, 15:19
La documentacion de Windows, en este caso para la consola, es la MSDN (http://msdn2.microsoft.com/en-us/library/ms682010.aspx).
Título: Re: Duda Al Pintar Texto En Consola
Publicado por: Geo en Jueves 2 de Agosto de 2007, 20:39
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 (http://msdn2.microsoft.com/en-us/library/ms687401.aspx) de la API de Windows.