Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Вниз

Глюк при перерисовке   Найти похожие ветки 

 
Rel_   (2003-08-21 16:19) [0]

Мастера, помогите, пол дня вожусь.

Есть код события WM_PAINT, в котором учитывется позиции вертикального и горизонтального скроллеров.
(Пишу под билдером - наскоро переделал на делфи - главное, чтоб смысл был ясен).

var
paint : PAINTSTRUCT;
DC, mdc :HDC;
paintWidth, paintHeight : Integer;
saveBitmap : HBITMAP;
begin
//начинаю рисовать
DC :=BeginPaint(Handle,@paint);
mdc=0;
paintWidth=paint.rcPaint.right-paint.rcPaint.left;
paintHeight=paint.rcPaint.bottom-paint.rcPaint.top;

//определяюсь с размерами и пересоздаю битмап для отрисовки
if ((bitmapWidth<paintWidth)or(bitmapHeight<paintHeight)or(not tmpBM))
then begin
bitmapWidth:=max(paintWidth,bitmapWidth);
bitmapHeight:=max(paintHeight,bitmapHeight);

//предполагается, что bitmapWidth и bitmapHeight уже известны - это размеры скроллируемого битмапа; они могут быть больше клиентской части - для энтого и используется скроллер.

if( tmpBM ) DeleteObject(tmpBM);
tmpBM:=CreateDiscardableBitmap(hdc,bitmapWidth,bitmapHeight);
end

//далее просто рисую
if ( tmpBM and (mdc:=CreateCompatibleDC(hdc)) )
then begin
saveBitmap:=SelectObject(mdc,tmpBM);

FillRect(mdc,&TRect(0,0,bitmapWidth,bitmapHeight),brush);

int dx=GetScrollPos(Handle,SB_HORZ)+paint.rcPaint.left,
dy=GetScrollPos(Handle,SB_VERT)+paint.rcPaint.top;

//обратите внимание глюк здесь - эффект должен быть таким, чтобы при скроллировании отрисованная линия оставалась на месте

TRect r;
r.Left=2+dx; r.Top=25+dy; r.Right=25+dx; r.Bottom=paintWidth-2+dy;

MoveToEx(mdc, 10+r.Left,10+r.Top,0);
LineTo(mdc, 10+r.Left,200+r.Top);

// а вот так глюк исчезается, т.е. когда не использую dx,dy

r.Left=2; r.Top=55; r.Right=25; r.Bottom=paintWidth-2;
MoveToEx(mdc, 10+r.Left,10+r.Top,0);
LineTo(mdc, 10+r.Left,200+r.Top);

// теперь просто копирую изображение
BitBlt(hdc, paint.rcPaint.left, paint.rcPaint.top, paintWidth, paintHeight, mdc, dx, dy, SRCCOPY) ;

SelectObject(mdc,saveBitmap);
end;

DeleteDC(mdc);
EndPaint(Handle,&paint) ;

end;

Так вот глюк в следующем. Всё скроллируется отлично. Вот только все окна передвигаемые , например сверху вниз оставляют за собой отрисовываемую мной горизонтальную линию, причём ту, которая зависит от положения скроллера dx, dy. Со 2-ой линией всё отлично.


 
HolACost!   (2003-08-22 13:35) [1]

Удалено модератором
Примечание: Offtopic. Если нечего сказать - промолчи



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.01 c
3-89152
Игоряныч
2003-09-19 08:03
2003.10.27
Splash при подключении к БД через ADO???


1-89324
Tommy
2003-10-16 17:39
2003.10.27
И Опять stringGrid...


1-89235
BillyJeans
2003-10-14 13:59
2003.10.27
Маленький вопросик по ListView...


1-89234
Egor
2003-10-14 17:48
2003.10.27
Delphi && Microsoft Word


14-89548
J.C. code
2003-10-07 19:43
2003.10.27
Не компилится





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский