|
发表于 2013-1-16 21:56:48
|
显示全部楼层
本帖最后由 Jen 于 2013-1-16 22:01 编辑
你的画分割线相关的编码(pDrawTmpLine)可能会导致内存泄露,闪烁很厉害,写的比较随便。100ms的间隔会减少闪烁,但可能导致不能Pixel to Pixel改变。
Excel的分割线就不闪。Flexcell的分割线也不闪,而且最小改变是Pixel为单位。不知道是怎样做到的。
- ScreenDC = GetDC(0)
- OldDrawMode = SetROP2(ScreenDC, R2_XORPEN)
- hPen = CreatePen(0, 4, RGB(150, 150, 150))
- hOldPen = SelectObject(ScreenDC, hPen)
- Case WM_MOUSEMOVE
- '100毫秒响应一次消息
- If GetTickCount - t < 100 Then
- SetROP2 ScreenDC, OldDrawMode
- SelectObject ScreenDC, hOldPen
- DeleteObject hPen
- ReleaseDC 0, ScreenDC
- Exit Sub
- Else
- t = GetTickCount
- End If
-
- ‘。。。
- Call pDrawTmpLine(ScreenDC, p1.x, p1.y, p2.x, p2.y) '擦除线
- ’。。。
- Call pDrawTmpLine(ScreenDC, p1.x, p1.y, p2.x, p2.y) '擦除线
- SetROP2 ScreenDC, OldDrawMode
- SelectObject ScreenDC, hOldPen
- DeleteObject hPen
- ReleaseDC 0, ScreenDC
复制代码 |
|