Re: Bitmap clearing
- Posted by jordah at btopenworld.com Jan 30, 2003
- 415 views
hi Patrick, Oops, that's my mistake sorry about that. My routines were a bit doggy too. I hope that didn't give you much of a head-ache. "Smallest and easiest bugs to fix, are the hardest to find" Sir LoJiK 2002 Jordah ----- Original Message ----- From: <Patrick.Barnes at transgrid.com.au> To: "EUforum" <EUforum at topica.com> Subject: RE: Bitmap clearing > > Hey Jordah... > I found an error in your PatBLT procedure... I didn't notice until now, because some of the pixmap wasn't clearing correctly, and I couldn't figure out why: > > >------------------------------------------- > >procedure PatBlt(atom hdc,atom x,atom y,atom cx,atom cy,atom rop) > >------------------------------------------- > > if not w32Func(zPatBlt,{hdc,x,y,cy,cy,rop}) then > > warnErr("PatBlt Failed") \-------perhaps that should be cx? > > end if > >end procedure > > Very frustrating, I tore my program almost to pieces looking for the bug, and it was your fault all along! :oP > > Hopefully you don't have that same error sitting somewhere. > > Thanks for the demo. VERY useful. > > -Pat > > -----Original Message----- > From: jordah at btopenworld.com [mailto:jordah at btopenworld.com] > Sent: Saturday, 25 January 2003 15:49 > To: EUforum > Subject: Re: Bitmap clearing > > > Hi Patrick, > > I alittle bit under-estimated win32lib. It does alot of work for the > end-user. Its getDC has a very kewl construct. also, i have attached > BlankPixmap() which is a faster way to blank a pixmap. > > Try this demo in the win32lib directory because it requires mail.bmp > > Hope this helps. > Jordah. > > --------------------------------------------------------- > --File : Demo For Patrick > --Version: > --Date : > --Author : Jordah Ferguson > --------------------------------------------------------- > > include win32lib.ew > ------------------------------------------- > > constant > MainWindow = create(Window,"Demo for > Patrick",0,Default,Default,600,400,0), > Pixmap1 = create(Pixmap,"",0,0,0,300,300,0), > zPatBlt = > registerw32Function(gdi32,"PatBlt",{C_LONG,C_LONG,C_INT,C_INT,C_INT,C_INT},C > _INT), > ------------------------------------------- > Bitmap1 = loadBitmapFromFile(current_dir()&"\\mail.bmp") > > ------------------------------------------- > procedure PatBlt(atom hdc,atom x,atom y,atom cx,atom cy,atom rop) > ------------------------------------------- > if not w32Func(zPatBlt,{hdc,x,y,cy,cy,rop}) then > warnErr("PatBlt Failed") > end if > end procedure > > ------------------------------------------- > global procedure stretchBlt( atom dst, integer dstX, integer dstY, > atom src, integer srcX, integer srcY, > integer destWide, integer destHigh, > integer srcWide, integer srcHigh, > integer rop ) > ------------------------------------------- > atom srcDC, dstDC > srcDC = getDC( src ) > dstDC = getDC( dst ) > if not w32Func( xStretchBlt, { > dstDC, dstX, dstY, > destWide, destHigh, > srcDC, > srcX, srcY, > srcWide, srcHigh, > rop} ) then > warnErr( "stretchBlt:StretchBlt failed." ) > end if > releaseDC( dst ) > releaseDC( src ) > end procedure > > ------------------------------------------- > procedure BlankPixmap(integer Pixmap,atom BkColor) > ------------------------------------------- > atom hdc,brush,oldbrush > sequence rect > rect = getRect(Pixmap) > hdc = getDC(Pixmap) -- This already performs selectobject() > brush = w32Func(xCreateSolidBrush,{BkColor}) > oldbrush = w32Func(xSelectObject,{hdc,brush}) > PatBlt(hdc,rect[1],rect[2],rect[3],rect[4],#00F00021) > oldbrush = w32Func(xSelectObject,{hdc,oldbrush}) > oldbrush = w32Func(xDeleteObject,{brush}) > releaseDC(hdc) > end procedure > > > ------------------------------------------- > procedure DrawToPixmap(integer Pix,atom hBmp,atom px,atom py,atom bitcx,atom > bitcy) > ------------------------------------------- > sequence rect > rect = getRect(hBmp) > stretchBlt(Pix,px,py,hBmp,0,0,bitcx,bitcy,rect[3],rect[4],SRCCOPY) > end procedure > > ------------------------------------------- > procedure DrawToScreen(integer dest,integer Pix,atom x,atom y,atom cx,atom > cy) > ------------------------------------------- > sequence rect > rect = getRect(Pix) > stretchBlt(dest,x,y,Pix,0,0,cx,cy,rect[3],rect[4],SRCCOPY) > end procedure > > ------------------------------------------- > procedure onPaint_Proc(integer id,integer event,sequence params) > ------------------------------------------- > sequence rect,rec,re > re = getClientRect(MainWindow) > rect = getRect(Pixmap1) > rec = getRect(Bitmap1) > BlankPixmap(Pixmap1,White) > > DrawToPixmap(Pixmap1,Bitmap1,floor((rect[3]-rec[3])/2)-40,floor((rect[4]-rec > [4])/2)-40,rec[3]+40,rec[4]+40) > DrawToScreen(MainWindow,Pixmap1,re[1],re[2],re[3],re[4]) > end procedure > setHandler(MainWindow,w32HPaint,routine_id("onPaint_Proc")) > > ------------------------------------------- > procedure onResize_Proc(integer id,integer event,sequence params) > ------------------------------------------- > DrawToScreen(MainWindow,Pixmap1,0,0,params[2],params[3]) > end procedure > setHandler(MainWindow,w32HResize,routine_id("onResize_Proc")) > > > ------------------------------------------- > WinMain(MainWindow,Normal) > > > --- > > > TOPICA - Start your own email discussion group. FREE! > > > *********************************************************************** > > > *********************************************************************** > > > > TOPICA - Start your own email discussion group. FREE! > ---