Делаю рулеры в окошках граф.редактора. Предполагается их отрисовывать в неклиентской области окна
есть CChildFrame. Есть мой класс CRuler. Все красиво рисуется.
Проблема в том, что по движению мышью надо перерисовать только прямоугольник, в котором происходят изменения, иначе дергается. Делаю это так:
void CRuler::setMousePos(long viPos) {
// ...
CRect invRect;
// Вычисляем прямоугольник
CRgn rgn;
rgn.CreateRectRgnIndirect(invRect);
HRGN hrgn = rgn;
pFrame->SendMessage(WM_NCPAINT, (WPARAM)hrgn, 0);
// ...
}
void CChildFrame::OnNcPaint() {
CWindowDC dc(this);
CRect invRect;
dc.GetClipBox(&invRect);
TRACE("OnNcPaint: (%d,%d,%d,%d)\n", invRect.left, invRect.top, invRect.right, invRect.bottom);
// invRect — не тот, который я послал, а _все_ окно.
// ...
}