Здравствуйте, RomikB, Вы писали:
RB>Есть у меня окно и заданная облать на нем (прямоугольник).
RB>Нужно сделать так чтобы некая функция могла рисовать только в этой области, т.е. нечто вроде:
RB>OnPaint RB>{ RB>... RB> PaintInRect(...); RB>... RB>}
RB>PaintInRect RB>{ RB> //рисование только в заданой области. RB>}
Здравствуйте, SergH, Вы писали:
RB>>Есть у меня окно и заданная облать на нем (прямоугольник). RB>>Нужно сделать так чтобы некая функция могла рисовать только в этой области, т.е. нечто вроде: RB>>OnPaint RB>>{ RB>>... RB>> PaintInRect(...); RB>>... RB>>} RB>>PaintInRect RB>>{ RB>> //рисование только в заданой области. RB>>}
SH>CreateRectRgn + SelectObject
А можно пример? Допустим линию диагональную нарисовать, а Rect = 200,100,400,300
Здравствуйте, RomikB, Вы писали:
SH>>CreateRectRgn + SelectObject
RB>А можно пример? Допустим линию диагональную нарисовать, а Rect = 200,100,400,300
Можно, но лень, постараюсь обойтись без примера. Я себе это вижу примерно так:
OnPaint
{
HDC hdc = ... ; // Как-то получили
HRGN hrgn = CreateRectRgn(..);
SelectObject(hdc, hrgn); // теперь всё рисование в hdc ограничено регионом, то есть нашим прямоугольником
PaintInRect(hdc, ...);
..
}
PaintInRect(HDC hdc, ...)
{
//рисование только в заданой области.
}
Здравствуйте, SergH, Вы писали:
SH>Можно, но лень, постараюсь обойтись без примера. Я себе это вижу примерно так:
SH>
SH>OnPaint
SH>{
SH>HDC hdc = ... ; // Как-то получили
SH>HRGN hrgn = CreateRectRgn(..);
SH>SelectObject(hdc, hrgn); // теперь всё рисование в hdc ограничено регионом, то есть нашим прямоугольником
SH>PaintInRect(hdc, ...);
SH>..
SH>}
SH>PaintInRect(HDC hdc, ...)
SH>{
SH>//рисование только в заданой области.
SH>}
SH>
Насколько я понимаю, человек не совсем точно объяснил, что ему надо. Либо он хочет просто рисовать в определенной области, либо же хочет рисовать во всем окне, но так, чтобы только в этой области что-то рисовалось, а вся остальная часть окна при этом не изменялась.
Если первое — рисуй сам там где надо и не рисуй где не надо.
Если второе — то PaintInRect может рисовать везде, где ей вздумается в пределах окна , а проявится это только в заданой области.
SH>>OnPaint
SH>>{
SH>>HDC hdc = ... ; // Как-то получили
SH>>HRGN hrgn = CreateRectRgn(..);
SH>>SelectObject(hdc, hrgn); // теперь всё рисование в hdc ограничено регионом, то есть нашим прямоугольником
SH>>PaintInRect(hdc, ...);
SH>>..
SH>>}
SH>>PaintInRect(HDC hdc, ...)
SH>>{
SH>>//рисование только в заданой области.
SH>>}
SH>>
PD>Насколько я понимаю, человек не совсем точно объяснил, что ему надо. Либо он хочет просто рисовать в определенной области, либо же хочет рисовать во всем окне, но так, чтобы только в этой области что-то рисовалось, а вся остальная часть окна при этом не изменялась.
PD>Если первое — рисуй сам там где надо и не рисуй где не надо. PD>Если второе — то PaintInRect может рисовать везде, где ей вздумается в пределах окна , а проявится это только в заданой области.
Скорее мне надо второе, т.е. чтобы координаты сдвинулись в эту область, и из того что было нарисовано в PaintInRect только этот регион был отображен.
Здравствуйте, RomikB, Вы писали:
RB>Здравствуйте, Pavel Dvorkin, Вы писали:
RB>Скорее мне надо второе, т.е. чтобы координаты сдвинулись в эту область, и из того что было нарисовано в PaintInRect только этот регион был отображен.
Тогда делай то, что посоветовал SergH, а координаты можешь сдвинуть SetWindowOrgEx
Здравствуйте, SergH, Вы писали:
RB>>Скорее мне надо второе, т.е. чтобы координаты сдвинулись в эту область, SH>Координаты — SetViewportExtEx, SetMapMode. RB>>и из того что было нарисовано в PaintInRect только этот регион был отображен. SH>Это как раз то, что я написал
Возник ещё вопрос как после этого вернуть обратно старый регион?