lepisme | 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 :
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
- {
- static long xchar, ychar;
- HDC hdc;
- PAINTSTRUCT ps;
- RECT rect;
- TEXTMETRIC tm;
- int retour = 0;
- switch (message)
- {
- case WM_CREATE:
- hdc = GetDC(hwnd);
- GetTextMetrics(hdc, &tm);
- xchar = tm.tmAveCharWidth;
- ychar = tm.tmHeight + tm.tmExternalLeading;
- ReleaseDC(hwnd, hdc);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- {
- int car = ' ';
- char szBuffer[50];
- short i;
- int Bottom = ps.rcPaint.bottom;
- int Left = ps.rcPaint.left;
- for (i = 0; i<40; i++)
- {
- wsprintf(szBuffer, " \"%c\" : %d Bottom: %d Left: %d ", car, car, Bottom, Left);
- TextOut(hdc, 10*xchar, ychar*i, szBuffer, strlen(szBuffer));
- car++;
- Sleep(100); // pour voir les étapes de l'affichage
- wsprintf(szBuffer, " \"%c\" : %d Bottom: %d Left: %d ", car, car, BottomH, Left);
- TextOut(hdc, 40*xchar, ychar*i, szBuffer, strlen(szBuffer));
- car++;
- }
- }
- EndPaint(hwnd, &ps);
- break;
- case WM_CLOSE:
- DestroyWindow(hwnd);
- break;
- case WM_DESTROY:
- // si fenetre 1
- if (hwnd == hwndGlobal)
- {
- PostQuitMessage(0);
- }
- break;
- default:
- retour = DefWindowProc(hwnd, message, wparam, lparam);
- }
- return retour;
|
|