windows - Python win32: FillSolidRect virker kun hvis call >=20 gange

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at tegne et rektangel på min skærm ved hjælp af win32 python libs. Af en eller anden grund virker det, hvis jeg kalder FillSolidRect 20 gange i træk, men hvis jeg kalder det mindre end det, virker det ikke. Kan nogen give et antydning til hvorfor?


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)

Bedste reference


Windows køer/batches visse GDI-operationer for at forbedre ydeevnen. Se GdiFlush for flere oplysninger om, hvordan man tilsidesætter dette. [2]