Andreas, thanks for the input. I have my code working to some degree, I can load a png into memory and draw it, not problem. But I also want to change the image, that is stretch it like a dock stretches, and I was using GDI+ like so when answering WM_PAINT prompts to get my images altered as I wanted them: case WM_PAINT: HDC hdc = BeginPaint(hWnd, &ps); OnPaint(hdc); //bunch of gdi functions to create desired image, stretch it without scaling EndPaint(hWnd, &ps); now, I understand we don't use WM_PAINT to update image, so how would you draw the image using gdi+ and then get it into the layeredwindow? Would I draw to a hdc using gdi, then store that hdc as a bitmap, and use that when preparing to UpdateLayeredWindow? I'll keep struggling with it.