Таймером вызываю функцию SendMessage(hWnd, WM_PAINT, NULL, NULL);
Блок обработки WM_PAINT выглядит так:
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetPixel(hdc, x++, 30, RGB(0,0,0));
EndPaint(hWnd, &ps);
break;
Точки рисуются только тогда, когда Виндовз сама пошлет WM_PAINT.
Вопрос: почему точки не рисуются по таймеру?
Здравствуйте, dap, Вы писали:
dap>Таймером вызываю функцию SendMessage(hWnd, WM_PAINT, NULL, NULL);
dap>Блок обработки WM_PAINT выглядит так:
dap>dap>case WM_PAINT:
dap> hdc = BeginPaint(hWnd, &ps);
dap> SetPixel(hdc, x++, 30, RGB(0,0,0));
dap> EndPaint(hWnd, &ps);
dap> break;
dap>
dap>Точки рисуются только тогда, когда Виндовз сама пошлет WM_PAINT.
dap>Вопрос: почему точки не рисуются по таймеру?
InvalidateRect(hWnd, nil, True);
Здравствуйте, dap, Вы писали:
dap>Таймером вызываю функцию SendMessage(hWnd, WM_PAINT, NULL, NULL);
dap>Блок обработки WM_PAINT выглядит так:
dap>dap>case WM_PAINT:
dap> hdc = BeginPaint(hWnd, &ps);
dap> SetPixel(hdc, x++, 30, RGB(0,0,0));
dap> EndPaint(hWnd, &ps);
dap> break;
dap>
dap>Точки рисуются только тогда, когда Виндовз сама пошлет WM_PAINT.
dap>Вопрос: почему точки не рисуются по таймеру?
Была такая фигня, юзай или Invalidate или еще круче RedrawWindow.
Здравствуйте, dap, Вы писали:
dap>Таймером вызываю функцию SendMessage(hWnd, WM_PAINT, NULL, NULL);
dap>Блок обработки WM_PAINT выглядит так:
dap>dap>case WM_PAINT:
dap> hdc = BeginPaint(hWnd, &ps);
dap> SetPixel(hdc, x++, 30, RGB(0,0,0));
dap> EndPaint(hWnd, &ps);
dap> break;
dap>
dap>Точки рисуются только тогда, когда Виндовз сама пошлет WM_PAINT.
dap>Вопрос: почему точки не рисуются по таймеру?
Потому что DC, созданный BeginPaint, клиппирован по текущему невалидному региону. То есть если не было вызвано никаких InvalidateRect / InvalidateRgn, то невалидных областей у окна не будет и BeginPaint даст тебе DC с пустой областью отрисовки. А если InvalidateRect / InvalidateRgn были вызваны, то Windows пошлет тебе WM_PAINT и сама, без твоего вмешательства. Вывод: либо по таймеру делай InvalidateRect, либо создавай DC с помощью GetDC().
Здравствуйте, dap, Вы писали:
dap>Таймером вызываю функцию SendMessage(hWnd, WM_PAINT, NULL, NULL);
dap>Блок обработки WM_PAINT выглядит так:
dap>dap>case WM_PAINT:
dap> hdc = BeginPaint(hWnd, &ps);
dap> SetPixel(hdc, x++, 30, RGB(0,0,0));
dap> EndPaint(hWnd, &ps);
dap> break;
dap>
dap>Точки рисуются только тогда, когда Виндовз сама пошлет WM_PAINT.
dap>Вопрос: почему точки не рисуются по таймеру?
Просто у тя недействительный прямоугольник не изменяется и WM_PAINT понимает что рисовать то нечего... поэтому и не рисует точки...
Если написать в таймере
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW);
то должно рисоваться.... правда мерцать могит, но это уже другая история