Affichage d’une sortie de chaîne dans une fenêtre à l’aide de C (dans l’API WIN32)

Je veux un moyen approprié pour que je puisse sortir une chaîne de caractères et l’afficher sur une fenêtre créée. J’avais utilisé la fonction textout (), mais comme elle ne peint que la fenêtre, une fois la fenêtre réduite et restaurée, les données affichées dans la fenêtre disparaissent. De même, lorsque les données à afficher dépassent la taille de Window, seules les données correspondant à la taille de la fenêtre sont affichées et les autres données sont tronquées. Existe-t-il un autre moyen de générer des données sur une fenêtre?

Vous pouvez placer un contrôle Static ou Edit (Etiquette et une zone de texte) sur votre fenêtre pour afficher les données.

Appelez l’un d’entre eux pendant WM_CREATE :

 HWND hWndExample = CreateWindow("STATIC", "Text Goes Here", WS_VISIBLE | WS_CHILD | SS_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL); 

Ou

 HWND hWndExample = CreateWindow("EDIT", "Text Goes Here", WS_VISIBLE | WS_CHILD | ES_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL); 

Si vous utilisez une Edit l’utilisateur pourra également faire défiler, copier et coller le texte.

Dans les deux cas, le texte peut être mis à jour à l’aide de SetWindowText() :

 SetWindowText(hWndExample, TEXT("Control ssortingng")); 

( Curtosy de Daboyzuk )

TextOut devrait fonctionner parfaitement, si cela est fait dans WM_PAINT, il devrait être dessiné à chaque fois. (y compris sur minimiser et redimensionner)

 LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_PAINT: PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 10, 10, TEXT("Text Out Ssortingng"),strlen("Text Out Ssortingng")); EndPaint(hWnd, &ps); ReleaseDC(hWnd, hdc); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } 

Vous pourriez également être intéressé par DrawText

 LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_PAINT: PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); RECT rec; // SetRect(rect, x ,y ,width, height) SetRect(&rec,10,10,100,100); // DrawText(HDC, text, text length, drawing area, parameters "DT_XXX") DrawText(hdc, TEXT("Text Out Ssortingng"),strlen("Text Out Ssortingng"), &rec, DT_TOP|DT_LEFT); EndPaint(hWnd, &ps); ReleaseDC(hWnd, hdc); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } 

Qui va dessiner le texte sur votre fenêtre dans un rectangle donné,


Dessiner le texte sera Wrap Word à l’intérieur du rectangle donné.
Si vous voulez avoir toute votre fenêtre comme zone de dessin, vous pouvez utiliser GetClientRect(hWnd, &rec); au lieu de SetRect(&rec,10,10,100,100);