[C++] Pourquoi je n'ai pas de couleurs ?

Pourquoi je n'ai pas de couleurs ? [C++] - Programmation

Marsh Posté le 24-02-2002 à 10:46:19    

Je crée une fenetre avec CreateWindowEx().
Je crée un DC et je peux dessiner dedans. Seulement je m'aperçois que ma fenetre est en noir & blanc, et que je n'ai pas de couleurs (je ne peux pas dessiner un rectangle rouge par exemple). Quelle fonction appeler pour résoudre ce probléme ?

Reply

Marsh Posté le 24-02-2002 à 10:46:19   

Reply

Marsh Posté le 24-02-2002 à 11:14:02    

faut-il charger une palette ou un truc dans le genre (palette classique 16 couleurs ou 256 couleurs, c'est ça qu'il me faut) ?
Aidez moi !!!!!!!!

Reply

Marsh Posté le 24-02-2002 à 12:46:23    

Ben faut créer des brush, renseigne toi du coté de HBRUSH, et de CreateBrushIndirect de l'API win32

Reply

Marsh Posté le 24-02-2002 à 13:01:40    

Ah non mais sans parler de Brushs !
D'ailleurs même en créant un HBRUSH rouge, et bien le rectangle est grisé ! -> n&b

Reply

Marsh Posté le 24-02-2002 à 14:53:11    

Je vois pas comment tu veux faire sans brushes...

Reply

Marsh Posté le 24-02-2002 à 14:58:28    

Non tu comprends pas :
Je crée un Brush :
HBRUSH b;
b = CreateSolidBrush(...); de couleur ROUGE
selectobject(hdc,b);
bon tu me suis la ?
 
Après je fais Rectangle(hdc,...); et bien le rectangle n'est pas rouge mais grisé  :sweat:

Reply

Marsh Posté le 24-02-2002 à 17:01:16    

antsite a écrit a écrit :

Non tu comprends pas :
Je crée un Brush :
HBRUSH b;
b = CreateSolidBrush(...); de couleur ROUGE
selectobject(hdc,b);
bon tu me suis la ?
 
Après je fais Rectangle(hdc,...); et bien le rectangle n'est pas rouge mais grisé  :sweat:  




 
En faisant comme ça, (j'utilise les MFC mais ça revient au même) ça a toujours marché chez moi. Le rouge c'est RGBCOLOR(FF,00,00).


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 24-02-2002 à 17:03:25    

Mais oui chez moi aussi quand j'utilise les MFC y a pas de problèmes. Pour une fois que j'utilise pas MFC et ben ça merde et j'ai pas de couleurs ! pour rouge j'ai mis 0x000000FF ce qui revient au même.

Reply

Marsh Posté le 24-02-2002 à 17:12:57    

antsite a écrit a écrit :

Je crée un DC et je peux dessiner dedans.


comment ?
 
la méthode standard, c'est appeler BeginPaint() et EndPaint() dans WM_PAINT, ou GetDC() si tu veux dessiner hors d'un message WM_PAINT. si tu as un DC en mémoire, je suis pas bien sûr, mais tu dois devoir faire qqchose comme chopper le DC de l'écran, le passer à CreateCompatibleDC() (puis peut-être après utiliser CreateCompatibleBitmap()).

Reply

Marsh Posté le 24-02-2002 à 17:43:36    

memDC = CreateCompatibleDC(NULL);
 memBM = CreateCompatibleBitmap(memDC,WIDTH,HEIGHT);
 oldBM = (HBITMAP)SelectObject(memDC,memBM);
 
case WM_PAINT:
  {
   PAINTSTRUCT ps;
   RECT r;
   HDC hdc = BeginPaint(hwnd,&ps);
   GetClientRect(hwnd,&r);
   BitBlt(hdc,0,0,r.right,r.bottom,memDC,0,0,SRCCOPY)
 
 
;
   EndPaint(hwnd,&ps);
  }
  return 0;
 
et dans une autre fonction pour dessiner :
 HFONT f_cur;
 
 char version[] = "0.5";
 
 Rectangle(memDC,0,0,WIDTH,HEIGHT);
 
 SetBkColor(memDC,0x00FFFFFF);
 SetTextColor(memDC,0x000000FF);
 f_cur = CreateFont(10,0,0,0,0,0,0,0,0,0,0,0,0,"Arial" );

 


 
 SelectObject(memDC,f_cur);
 
 TextOut(memDC,4,2,version,strlen(version));
 
 {
  HDC hdc = GetDC(hwnd);
  BitBlt(hdc,0,0,WIDTH,HEIGHT,memDC,0,0,SRCCOPY);
  ReleaseDC(hwnd,hdc);
 }
voila en gros mon code et il m'écrite pas en rouge mais en noir

 

[jfdsdjhfuetppo]--Message édité par antsite--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 24-02-2002 à 17:43:36   

Reply

Marsh Posté le 24-02-2002 à 18:00:51    

il se passe quoi si tu dessines directement dans la fenêtre plutôt que dans ton memDC ? si tu essayes d'autres couleurs ?

Reply

Marsh Posté le 24-02-2002 à 18:37:50    

Avec les autres couleurs c pareil. Comment dessiner direct dans la fenetre ?

Reply

Marsh Posté le 24-02-2002 à 18:39:32    

à la place de memDC, tu utilises celui-là :
 
HDC hdc = GetDC(hwnd);

Reply

Marsh Posté le 24-02-2002 à 18:40:23    

ouais c ce que je pensais, je te redis ça.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed