Python win32: FillSolidRect работает только если вызов> = 20 раз - PullRequest
0 голосов
/ 02 апреля 2011

Я пытаюсь нарисовать прямоугольник на моем экране, используя библиотеки python win32. По какой-то причине это работает, если я вызываю FillSolidRect 20 раз подряд, но если я вызываю его меньше, чем это, он не работает. Кто-нибудь может дать подсказку, почему?

import time

from ctypes import windll
from win32api import GetSystemMetrics
import win32ui, win32con

screen_width, screen_height = GetSystemMetrics(0), GetSystemMetrics(1)
dc = windll.user32.GetDC(0)
screen_dc = win32ui.CreateDCFromHandle( dc )
shot_dc = screen_dc.CreateCompatibleDC()
shot_bitmap = win32ui.CreateBitmap()
shot_bitmap.CreateCompatibleBitmap(screen_dc, screen_width, screen_height)
shot_dc.SelectObject(shot_bitmap)
shot_dc.BitBlt((0, 0), (screen_width, screen_height), screen_dc, (0, 0), win32con.SRCCOPY)

' Have to draw >= 20(?) times or nothing will get drawn (for some reason).'
for i in range(20):  screen_dc.FillSolidRect((0,0,100,100), 0x000000),

time.sleep(1)
screen_dc.BitBlt((0, 0), (screen_width, screen_height), shot_dc, (0, 0), win32con.SRCCOPY)

1 Ответ

1 голос
/ 04 апреля 2011

Windows ставит в очередь / пакетирует определенные операции GDI для повышения производительности.См. GdiFlush для получения дополнительной информации о том, как переопределить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...