Procedura okna:
LRESULT CALLBACK ProceduraOkna(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc = 0;
PAINTSTRUCT ps = {0};
RECT pole = { 0 };
pole.left = 1;
pole.top = 1;
pole.right = 200;
pole.bottom = 200;
switch (message)
{
case WM_CREATE:
MessageBox(0, "Zaraz Wyświetle Okno!! Okno zostaje własnie utworzone", "informacja", MB_OK | MB_ICONINFORMATION);
return 0;
case WM_PAINT:
{
InvalidateRect(hwnd, &pole, TRUE);
hdc = BeginPaint(hwnd, &ps);
std::cout << "Pozycja bottom: " << ps.rcPaint.bottom << std::endl;
WyswietlTekst(hdc, ps.rcPaint);
EndPaint(hwnd, &ps);
return 0;
}
case WM_CLOSE:
if (IDYES == MessageBox(hwnd, "Czy na pewno zamknąć okno??", "Informacja", MB_YESNO | MB_ICONQUESTION))
return DefWindowProc(hwnd, message, wParam, lParam);
else
return 0;
case WM_DESTROY:
MessageBox(0, "Koniec Programu Okno zostaje zniszczone!!", "Informacja", MB_OK | MB_ICONINFORMATION);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
i teraz tak jak podaje w funkcji InvalidateRect strukturę RECT wypełnioną własnymi współrzędnymi , a funkcja BeginPaint zwraca w Pointstruct jakąś inną wartość, dlaczego?? tak ma być?? z tego co wyczytałem begin paint powinno my malować według tego co podam w invaliddatarect
Teraz np bottom ma 261, ja podałem 200 w invaliddatarect, a samo okno ma większe wymiary, więc skąd ta wartość??
Zauważyłem że ta funkcja nie jest mi potrzebna.
Mogę ją usunąć, i wyjdzie to samo
odpowiedź użytkownika kAzek
Mogę się mylić ale wydaje mi się że skoro wywołujesz InvalidateRect w obsłudze komunikatu WM_PAINT a 2 komunikaty nie mogą przecież być jednocześnie obsługiwane musisz czekać na WM_ERASEBKGND (komunikat prawdopodobnie wtedy jest wysyłany z tym że nie wiem czy zawsze jest wysyłany czy zależy od