R@kot |
Отправлено: 11.02.2005, 01:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Народ, помогите! Требуется создать такую вот прогу: имеется форма с вырезанным посередине прямоугольником (т.е. в этом прямоугольнике видно всё, что находится за формой программы). Как вырезать прямоугольник я знаю:
CODE |
HRGN MyRgn;
MyRgn = CreateRectRgn (0, 0, 500, 500);
CombineRgn (MyRgn, MyRgn, CreateRectRgn(100, 100, 400, 400), RGN_XOR);
SetWindowRgn (Handle, MyRgn, true);
|
Задача в том, чтобы можно было сохранять ту картинку, которая видна точно в вырезанном прямоугольнике. Если у кого есть какие-нибудь мысли по этому поводу — ПЛИЗ, напишите!
|
|
full_lamer |
Отправлено: 11.02.2005, 09:08 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
CODE |
Form1->Canvas->CopyRect(TRect (300, 100, 400, 200), Form1->Canvas, TRect (100, 100, 200, 200));
|
Отредактировано full_lamer — 11/02/2005, 18:14
|
|
Sl@Sh |
Отправлено: 11.02.2005, 18:47 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
QUOTE | CODE | Form1->Canvas->CopyRect(TRect (300, 100, 400, 200), Form1->Canvas, TRect (100, 100, 200, 200));
|
|
Мне кажеться тут будет другой результат
Думаю правильней будет так :
CODE |
TCanvas *hDesk = new Graphics::TCanvas();
TRect cRect = Rect(Left + 100, Top + 100, Left + 400, Top + 400);
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
try
{
hDesk->Handle = GetDC(0);
Bmp->Width = 300;
Bmp->Height = 300;
Bmp->Canvas->CopyRect(cRect, hDesk, cRect);
}
__finally
{
Bmp->SaveToFile("tmp.bmp");
delete Bmp;
delete hDesk;
}
|
Отредактировано Sl@Sh — 11/02/2005, 19:50
|
|
R@kot |
Отправлено: 12.02.2005, 01:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Во-первых, всем спасибо, что откликнулись! Однако возникли некоторые проблемы:
full_lamer, приведённая строчка кода конечно прикольная, но откуда мне теперь изображение взять-то ? Будь добр, напиши какой-нибудь примерчик, сохраняющий полученное изображение в файл.
Sl@Sh, у тебя все понятно написано, но вот результат немного огорчает: в результате выполнения кода получается полностью белая картинка (300х300) и всё Как получить нормальное изображение экрана за формой?
|
|
Sl@Sh |
Отправлено: 12.02.2005, 16:12 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Извините, я поспешил и как говорится людей насмешил
Картинка не белая, а вы просто наверное прогу в проводнике тестировали. Короче картинка как-бы смешена.
Напишите это :
CODE | Bmp->Canvas->CopyRect(Rect(0, 0, 300, 300), hDesk, cRect); |
Вместо этого :
CODE | Bmp->Canvas->CopyRect(cRect, hDesk, cRect); |
Должно работать.
Удачи !
|
|
R@kot |
Отправлено: 13.02.2005, 01:37 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Sl@Sh, спасибо большое! Теперь всё действительно работает!
|
|
|