Рисование только в заданном месте окна.
От: RomikB  
Дата: 24.02.05 11:14
Оценка:
Есть у меня окно и заданная облать на нем (прямоугольник).

Нужно сделать так чтобы некая функция могла рисовать только в этой области, т.е. нечто вроде:

OnPaint
{
...
PaintInRect(...);
...
}

PaintInRect
{
//рисование только в заданой области.
}
Re: Рисование только в заданном месте окна.
От: SergH Россия  
Дата: 24.02.05 11:17
Оценка:
Здравствуйте, RomikB, Вы писали:

RB>Есть у меня окно и заданная облать на нем (прямоугольник).


RB>Нужно сделать так чтобы некая функция могла рисовать только в этой области, т.е. нечто вроде:


RB>OnPaint

RB>{
RB>...
RB> PaintInRect(...);
RB>...
RB>}

RB>PaintInRect

RB>{
RB> //рисование только в заданой области.
RB>}

CreateRectRgn + SelectObject
Делай что должно, и будь что будет
Re[2]: Рисование только в заданном месте окна.
От: RomikB  
Дата: 24.02.05 11:29
Оценка:
Здравствуйте, SergH, Вы писали:

RB>>Есть у меня окно и заданная облать на нем (прямоугольник).

RB>>Нужно сделать так чтобы некая функция могла рисовать только в этой области, т.е. нечто вроде:
RB>>OnPaint
RB>>{
RB>>...
RB>> PaintInRect(...);
RB>>...
RB>>}
RB>>PaintInRect
RB>>{
RB>> //рисование только в заданой области.
RB>>}

SH>CreateRectRgn + SelectObject


А можно пример? Допустим линию диагональную нарисовать, а Rect = 200,100,400,300

Я просто никогда с таким не сталкивался.
Re[3]: Рисование только в заданном месте окна.
От: SergH Россия  
Дата: 24.02.05 11:37
Оценка:
Здравствуйте, 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, ...)
{
//рисование только в заданой области.
}


Я хотя бы правильно понял задачу?
Делай что должно, и будь что будет
Re[4]: Рисование только в заданном месте окна.
От: Pavel Dvorkin Россия  
Дата: 24.02.05 11:50
Оценка:
Здравствуйте, 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 может рисовать везде, где ей вздумается в пределах окна , а проявится это только в заданой области.
With best regards
Pavel Dvorkin
Re[5]: Рисование только в заданном месте окна.
От: RomikB  
Дата: 24.02.05 12:02
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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 только этот регион был отображен.
Re[6]: Рисование только в заданном месте окна.
От: SergH Россия  
Дата: 24.02.05 12:06
Оценка:
Здравствуйте, RomikB, Вы писали:

RB>Скорее мне надо второе, т.е. чтобы координаты сдвинулись в эту область,


Координаты — SetViewportExtEx, SetMapMode.

RB>и из того что было нарисовано в PaintInRect только этот регион был отображен.


Это как раз то, что я написал
Делай что должно, и будь что будет
Re[6]: Рисование только в заданном месте окна.
От: Pavel Dvorkin Россия  
Дата: 24.02.05 12:06
Оценка:
Здравствуйте, RomikB, Вы писали:

RB>Здравствуйте, Pavel Dvorkin, Вы писали:



RB>Скорее мне надо второе, т.е. чтобы координаты сдвинулись в эту область, и из того что было нарисовано в PaintInRect только этот регион был отображен.


Тогда делай то, что посоветовал SergH, а координаты можешь сдвинуть SetWindowOrgEx
With best regards
Pavel Dvorkin
Re[7]: Рисование только в заданном месте окна.
От: RomikB  
Дата: 24.02.05 15:38
Оценка:
Здравствуйте, SergH, Вы писали:

RB>>Скорее мне надо второе, т.е. чтобы координаты сдвинулись в эту область,

SH>Координаты — SetViewportExtEx, SetMapMode.
RB>>и из того что было нарисовано в PaintInRect только этот регион был отображен.
SH>Это как раз то, что я написал

Возник ещё вопрос как после этого вернуть обратно старый регион?

...
HRGN __old = SelectObject( __rgn );
...
PaintInRect(...);
...
SelectObject( __old );
...


этот код не работет.
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.