def METHOD_NAME(self, dispatch_fn):
    c_rect = RECT()
    windll.user32.GetClientRect(self.hwnd, byref(c_rect))
    pt = POINT(x=0, y=0)
    windll.user32.ClientToScreen(self.hwnd, byref(pt))
    x_offset, y_offset = pt.x, pt.y
    usable_w, usable_h = float(c_rect.w), float(c_rect.h)
    while True:
        try:
            t = self.touch_events.pop()
        except:
            break
        # adjust x,y to window coordinates (0.0 to 1.0)
        x = (t.screen_x() - x_offset) / usable_w
        y = 1.0 - (t.screen_y() - y_offset) / usable_h
        # actually dispatch input
        if t.event_type == 'begin':
            self.uid += 1
            self.touches[t.id] = WM_MotionEvent(
                self.device, self.uid, [x, y, t.size()])
            dispatch_fn('begin', self.touches[t.id])
        if t.event_type == 'update' and t.id in self.touches:
            self.touches[t.id].move([x, y, t.size()])
            dispatch_fn('update', self.touches[t.id])
        if t.event_type == 'end' and t.id in self.touches:
            touch = self.touches[t.id]
            touch.move([x, y, t.size()])
            touch.update_time_end()
            dispatch_fn('end', touch)
            del self.touches[t.id]