Posted for posterity and for archival searches. I was looking for a working solution to get a bitmap Ptr of the screen (both pre/post 3.5 routines). After much silence and a few wrong answers (or not complete/legal/buildable examples), I had placed this on the back burner for now. I had completed that part of my application using only 3.5 or better routines.
The Signature ++ example does NOT build in the current SDK and that's the reason most folks are scrathing thier heads. I found buildable source (and source that made sense to me) in the Beamer sample application. It is posted here for completeness. /*********************************************************************** * * FUNCTION: PrvGetBitmap * * DESCRIPTION: This routine creates a bitmap copy of the bits in the window passed * This is for compatability with pre version 3.5 roms as well as 3.5 roms * * PARAMETERS: winH window handle to create bitmap from * (output bitmap will have same dimensions as this window) * sizeP pointer to the size of the created bitmap * errorP pointer to any error encountered by this function * * RETURNED: Handle to the new bitmap * * ***********************************************************************/ static BitmapPtr PrvGetBitmap (WinHandle winH, UInt32 *sizeP, Err *errorP) { UInt16 width, height; UInt16 rowBytes; BitmapPtr bitmapP; UInt8 depth; WindowType *winP; *errorP = 0; *sizeP = 0; // can we use the new window functions? if (newAPI) { BitmapPtr winBmpP = WinGetBitmap(WinGetDrawWindow()); ColorTableType *clrTableP = BmpGetColortable(winBmpP); UInt8 depth = winBmpP->pixelSize; WinHandle winH; // we create a bitmap and then make a window to it so that we can // create a bitmap whose depth does not match that of the screen bitmapP = BmpCreate(drawArea.extent.x, drawArea.extent.y, depth, clrTableP, errorP); if (!*errorP) { winH = WinCreateBitmapWindow(bitmapP,errorP); } if (!*errorP) { // copy draw area into the bitmap WinCopyRectangle (WinGetDrawWindow(), winH, &drawArea, 0, 0, winPaint); WinDeleteWindow(winH,false); // compress the bitmap *errorP = BmpCompress(bitmapP,BitmapCompressionTypeScanLine); // get the size of the bitmap *sizeP = BmpSize(bitmapP); } } else { winP = WinGetWindowHandle(winH); width = winP->windowBounds.extent.x; height = winP->windowBounds.extent.y; depth = 1; // assume one pixel depth if ((width == 0) || (height == 0)) { *errorP = memErrNotEnoughSpace; return NULL; } // Create a display buffer for the window. Round the line width // up to an even word boundary. rowBytes = ((((width*depth)+15) >> 4) << 1); *sizeP = (rowBytes * height) + sizeof(BitmapType); // note that we do NOT output a color map here... bitmapP = (BitmapPtr) MemPtrNew(*sizeP); if (! bitmapP) { *errorP = memErrNotEnoughSpace; return NULL; } MemSet(bitmapP,*sizeP,0); // erase it ... bitmapP->width = width; bitmapP->height = height; bitmapP->rowBytes = rowBytes; bitmapP->pixelSize = depth; bitmapP->version = 1; // copy the bitmap contents from the offscreen window // The only way to do this on older ROMS is to acesss the obsolete v20 field. MemMove(bitmapP+1,winP->displayAddrV20, rowBytes * height); } return (bitmapP); } -- Matt Disher [EMAIL PROTECTED] -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/