[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    {
    From: peter.gruhn@delta.com (Peter Gruhn)

     Ka> I've had little luck in finding out how to do more general drawing in
     Ka> an offscreen bitmap (say, with a compatible bitmap created from an
     Ka> HWindow's DC).

    I'm assuming you have a DC already off screen that you can blit from?
    You can draw to it too. Just like a normal DC. I'm worrying now that I
    don't quite understand either your problem or just what your code looks
    like.

     Ka> Many thanks for your help.

    Hey, it's late, I'll see what I can write...there didn't take long. I
    was able to draw rectangles off screen and blit them to the main window.
    You ought to be able to do whatever drawing function you want. I took
    some short cuts regarding colour depth and bitmap size (hard coding
    rules OK!)

    by Peter Gruhn
     it's small and useless and stupid and somebody
     might find it useful, so I release this program
     into the public domain for the good of all
     sentient species the universe over. 7-8-1994
    }

    program offscree;

    {you have tpw not bp? your uses will be a little different}
    uses owindows,winprocs,wintypes;

    type
      TMyApp=object(tapplication)
        procedure initmainwindow; virtual;
        end;

      PMyWin=^TMyWin;
      TMyWin=object(TWindow)
        procedure Paint(PaintDC: HDC; var PaintInfo: TPaintStruct); virtual;
        end;

    procedure TMyApp.initmainwindow;
    begin
      mainwindow:=new(pmywin,init(nil,'Try this...'));
    end;

    procedure TMyWin.Paint;
    var adc:hdc;
        abmp:hbitmap;
        i:integer;
        s:string;
    begin
    {Create stuff}
      adc:=createcompatibledc(paintdc);
      {I believe that I am cheating here, by just divving number of bits
       by 2 as I happen to know that right now I am in 16 colour mode.
       You will forgive me.}
      abmp:=createcompatiblebitmap(paintdc,300 div 2,300 div 2);
      abmp:=selectobject(adc,abmp);

    {Blank off screen bitmap of random data}
      bitblt(adc,0,0,300,300,adc,0,0,whiteness);

    {Draw something}
      for i:=0 to 1024 do
        begin
        rectangle(adc,random(300),random(300),random(300),random(300));
        str(i:5,s);                    {textify i for...}
        s[6]:=#0;                      {null terminator}
        textout(paintdc,10,10,@(s[1]),byte(s[0])); {just to count so it don't look
    plain}
        end;

    {blit it to the window}
      bitblt(paintdc,10,10,300,300,adc,0,0,srccopy);

    {Kill stuff}
      deleteobject(selectobject(adc,abmp));
      deletedc(adc);
    end;

    var app:TMyApp;

    begin
      app.init('frog');
      app.run;
      app.done;
    end.

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]