Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1195 connectés 

  FORUM HardWare.fr
  Programmation
  C

  C & API Win32: région invalide à réafficher..

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C & API Win32: région invalide à réafficher..

n°1187475
lepisme
Posté le 30-08-2005 à 01:11:31  profilanswer
 

je débute en programmation windows en C (donc avec API Win32 ;) avec VC++6 ou 2003
 
j'ai codé un prog de base qui, dans la zone cliente d'une fenetre windows,
affiche des lignes de caractères (voir morceau de code ci-dessous).
 
en l'état actuel, à chaque fois qu'une région de la fenetre en question  
est rendue invalide:  
le code de la wndproc lié au message WM_PAINT appelle a nouveau  
toutes les fonctions, meme si la fct TextOut ne réaffiche réellement que la zone invalide,
on peut constater que toute la région cliente est passée en revue et que ça prend du temps..
 
OBJECTIF:
 
comment ne réafficher que la région invalide?
je vois qu'on peut récupérer les coordonnées de cette région dans la structure RECT
mais je ne sais pas comment procéder :(
 
help please
 
 
P.S. je n'ai pas internet actuellement.. je ne peux y accéder que très ponctuellement et 2-3 min seulement.. merci de votre compréhension.
 
Lep
 
voici une partie de mon code:

Code :
  1. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
  2. {
  3. static long xchar, ychar;
  4. HDC hdc;
  5. PAINTSTRUCT ps;
  6. RECT rect;
  7. TEXTMETRIC tm;
  8. int retour = 0;
  9. switch (message)
  10. {
  11. case WM_CREATE:
  12.  hdc = GetDC(hwnd);
  13.  GetTextMetrics(hdc, &tm);
  14.  xchar = tm.tmAveCharWidth;
  15.  ychar = tm.tmHeight + tm.tmExternalLeading;
  16.  ReleaseDC(hwnd, hdc);
  17.  break;
  18. case WM_PAINT:
  19.  hdc = BeginPaint(hwnd, &ps);
  20.  {
  21.   int car = ' ';
  22.   char szBuffer[50];
  23.   short i;
  24.   int Bottom = ps.rcPaint.bottom;
  25.   int Left = ps.rcPaint.left;
  26.   for (i = 0; i<40; i++)
  27.   {
  28.    wsprintf(szBuffer, " \"%c\" : %d   Bottom:  %d Left:  %d ", car, car, Bottom, Left);
  29.    TextOut(hdc, 10*xchar, ychar*i, szBuffer, strlen(szBuffer));
  30.    car++;
  31.    Sleep(100);  // pour voir les étapes de l'affichage
  32.    wsprintf(szBuffer, " \"%c\" : %d   Bottom:  %d Left:  %d ", car, car, BottomH, Left);
  33.    TextOut(hdc, 40*xchar, ychar*i, szBuffer, strlen(szBuffer));
  34.    car++;
  35.   }
  36.  }
  37.  EndPaint(hwnd, &ps);
  38.  break;
  39. case WM_CLOSE:
  40.  DestroyWindow(hwnd);
  41.  break;
  42. case WM_DESTROY:
  43.  // si fenetre 1  
  44.  if (hwnd == hwndGlobal)
  45.  {
  46.   PostQuitMessage(0);
  47.  }
  48.  break;
  49. default:
  50.  retour = DefWindowProc(hwnd, message, wparam, lparam);
  51. }
  52. return retour;


mood
Publicité
Posté le 30-08-2005 à 01:11:31  profilanswer
 

n°1187487
LeGreg
Posté le 30-08-2005 à 05:21:19  profilanswer
 

si ta fonction paint est lente, tu peux utiliser un double buffer.  
Tu ne rends dans ton back buffer que lorsque tu as besoin d'en changer le contenu. Lorsque tu reçois une commande paint, tu te contentes de copier le contenu du buffer dans ta fenetre en utilisant le rectangle partiel passé en argument à paint.

n°1187539
HelloWorld
Salut tout le monde!
Posté le 30-08-2005 à 09:28:53  profilanswer
 

Je crois que c'est le fait que le dessin apparaisse progressivement qui le dérange. Ca s'appelle le flickering. Ce que t'as donné LeGreg est la bonne solution.
Exemple ici:
http://msdn.microsoft.com/library/ [...] licker.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  C & API Win32: région invalide à réafficher..

 

Sujets relatifs
API Win32API pour manipulations des fichiers ascii
Capturer le contenu d'une fenetre - Win32Api Win32 : CreateRemoteThread
Api Windows : Cherche code complet pour GetOpenFileName(...)API de SIP
[RESOLU] [MySQL API C] Problème avec mysql_queryAPI à net use
Plus de sujets relatifs à : C & API Win32: région invalide à réafficher..


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR