I've made serious progress, but I'm having trouble with two things. 1) The mouse - I'm not getting any WM_MOUSEMOVE messages to the app windows. Anyone seen this before? 2) I've broken fillspans for DRAWABLE_WINDOWs. I can fix it by drawing into the root window hdc always, but that's defeating the purpose - all we gain is the pretty task bar entries :[.
2) I'm working on, I suspect it's a coordinate translation thing. I get lovely background stipple but not (AFAICT solid fills). Anyway, the reason for the email: Harold: I thought you might like to see the little todo: I've added. Creating a single combined clipping region using CombineRgn will allow you to move the for (iX= ..)loop from within the while (nbox--) loop, thus saving multiple selectClipRgn+deleteObject + bitblt calls, which may make the native engine quite a bit faster. I *will* do this optimisation here and elsewhere, but only after I get the fills working for 'native' windows first. Rob /* TODO: create a single commbined clipping region */ nbox = REGION_NUM_RECTS (pClip); pbox = REGION_RECTS (pClip); while (nbox--) { hrgn = CreateRectRgn (pbox->x1, pbox->y1, pbox->x2, pbox->y2); SelectClipRgn (pGCPriv->hdcMem, hrgn); DeleteObject (hrgn); hrgn = NULL; for (iX = fullX1; iX < fullX2; iX += pStipple->drawable.width) { int width; if ((iX + pStipple->drawable.width) > fullX2) width = fullX2 - iX; else width = pStipple->drawable.width; BitBlt (pGCPriv->hdcMem, iX, fullY1, width, 1, hdcStipple, 0, fullY1 % pStipple->drawable.height, g_copyROP[pGC->alu]); } pbox++; }