[WinApi] problem z napisami

0

Witam
Mam problem z wyswietlaniem napisow...
Robie pewien programik ktory pobiera dane od uzytkownika (liczby) i w zaleznosci od wyniku wysietla dany komunikat...(TextOut) i tutaj pojawia sie problem gdyz napis (jezeli umieszcze w WM_PAINT) zmieni sie dopiero przy minimalizacji/maksymalizacji. Probowalem w innych miejscach ale tez nic

Mam wiec pytanie gdzie umiescic funkcje odpowiedzialna za wyswietlanie?

Z gory dzieki

Pozdrawiam

0

kiedy zmieniasz napis zastosuj InvalidateRect

0

nie jestem pewien ale mozna tez chyba wyslac SendMessage z komunikatem WM_PAINT.

0

To może nie przejść, gdyż system uzna zawartość okna za prawidłową i BeginPaint() nic nie da.

0

jak już napisałem InvalidateRect - wyjaśnienie: w uogólnieniu InvalidateRect (hwnd, 0, 0); wymusza na systemie wysłanie wm_paint do okna a co za tym idzie jego odświeżenie...

0
Deus napisał(a)

jak już napisałem InvalidateRect - wyjaśnienie: w uogólnieniu InvalidateRect (hwnd, 0, 0); wymusza na systemie wysłanie wm_paint do okna a co za tym idzie jego odświeżenie...

To już lepiej użyć RedrawWindow z flagami RDW_INVALIDATE i RDW_UPDATENOW - większa pewność, że WM_PAINT będzie wysłane natychmiast.

0
Deus napisał(a)

jak już napisałem InvalidateRect - wyjaśnienie: w uogólnieniu InvalidateRect (hwnd, 0, 0); wymusza na systemie wysłanie wm_paint do okna a co za tym idzie jego odświeżenie...

Sposób wydaje mi się dobry tylko nagłówek tej funkcji jest taki:
BOOL InvalidateRect(
HWND hWnd, // handle to window
CONST RECT* lpRect, // rectangle coordinates
BOOL bErase // erase state
);

więc chyba powinieneś podać jeszcze jeden parametr(true or false)

0

przecież podałem:
-hwnd - wiadomo
-0 - całe okno
-0 - false /przecież false to po prostu 0/

0

sorry źle spojrzałem [browar]

0

dzieki za wszystkie odpowiedzi, szkoda tylko, ze nadla mi nie dziala :/
musze cos zle robic, w ktorym miejscu najlepiej wstawic ten kod

pozdrawiam

0

Wyswietl tekst, zamaluj kolorem tla, wyswietl nowy tekst. Jak to moze nie dzialac? :)

0

musze cos zle robic, w ktorym miejscu najlepiej wstawic ten kod

Jeżeli w komunikacie WM_PAINT ma być rysowany text to:

char g_text[100]; // <--- zmienna globalna

PAINTSTRUCT ps;
HDC hdc;
...

case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps);
  TextOut(hdc,nXStart,nYStart,g_text,strlen(g_text));
  EndPaint(hWnd,&ps);
  retrun 0;

Wywołanie:

strcpy(g_text,"text text text");
RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_UPDATENOW);

To jest uproszczony i nietestowany kod ale powinien zadziałać ;)

0

no wlasnie zwykle wyswietlanie dziala mi oki
niestety z tym kopiowaniem do tablicy tez nie dziala bo pojawiaja sie jakies dziwne znaki i sie dopiera zmienia (wyswietlaja sie inne dziwne) po maksymalizacji okna

juz sam nie wiem

0

niestety z tym kopiowaniem do tablicy tez nie dziala bo pojawiaja sie jakies dziwne znaki i sie dopiera zmienia (wyswietlaja sie inne dziwne) po maksymalizacji okna

Dziwne znaki pojawiają się bo nie "wyzerowałeś" zmiennej g_text:

// gdzieś gdzie inicjujejsz inne zmienne globalne wstaw:
g_text[0]=0;
0

ups moj blad :) tablica byla jako lokalna
sory, ze zawracalem glowe :)

jeszcze raz dzieki :)

0

a ja mam pytanie odnosnie tego tematu: jakie sa wartosci RGB dla standardowego kolru windowsa?

pzdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1