- Код: Выделить всё
hDC = GetDC(0)
GetClientRect hWndForm, WindowRect
MapWindowPoints hWndForm, 0, FrameRect, 2
...
hBrush = GetStockObject(GRAY_BRUSH)
hOldBrush = SelectObject(hDC, hBrush)
PatBlt ..., PATINVERT
PatBlt ..., PATINVERT
PatBlt ..., PATINVERT
PatBlt ..., PATINVERT
SelectObject hDC, hBrush
ReleaseDC 0, hDC
RedrawWindow 0,0,0,RDW_ALLCHILDREN Or RDW_UPDATENOW
Проблема в том, что VB 6 использует окно рабочего стола вместо окна формы для рисования рамки выделения. Из-за этого каждая операция PatBlt длится около 0,026 секунды, все четыре операции вместе - около 0,1 секунды, что довольно существенно для рисования.
В Windows 7 проблема устраняется отключением композиции рабочего стола (в настройках быстродействия системы или в настройках ярлыка).
В Windows 8 проблема устраняется установкой совместимости с Windows Vista SP 2 или ниже.