Is it possible to skin a window and add your own look (images) to it? Like load an image for the titlebar, scrollbars, progress bars, etc.?
Thanks
Thanks
Strict Const HTCAPTION = 2 Const RGN_XOR = 3 Extern "Win32" Function SetWindowRgn(hWnd, hRgn, bRedraw) Function CreateRectRgn(nLeftRect, nTopRect, nRightRect, nBottomRect) Function CombineRgn(hrgnDest, hrgnSrc1, hrgnSrc2, fnCombineMode) End Extern Local skinPmap:TPixmap = LoadPixmapPNG(LoadBank("http::homepage.ntlworld.com/mollymole/storage/skin.png")) If skinPmap = Null Then RuntimeError "Oi...Where's me picture?" Local window:TGadget = CreateWindow("", 100, 100, skinPmap.width, skinPmap.height, Null, WINDOW_HIDDEN) SkinWindow(window, skinPmap) ShowGadget(window) Local canvas:TGadget = CreateCanvas(0, 0, ClientWidth(window), ClientHeight(window), window) Local hWnd = QueryGadget(window, QUERY_HWND) Repeat Select WaitEvent() Case EVENT_MOUSEDOWN ReleaseCapture() SendMessageA(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, Null) Case EVENT_KEYDOWN If CurrentEvent.data = 27 Then End Case EVENT_GADGETPAINT SetGraphics CanvasGraphics(canvas) DrawPixmap skinPmap, 0, 0 Flip End Select Forever End Function SkinWindow(window:TGadget, skin:TPixmap) Local rectRgn = CreateRectRgn(0, 0, GadgetWidth(window), GadgetHeight(window)) Local hWnd = QueryGadget(window, QUERY_HWND_CLIENT) For Local pixY=0 Until skin.height Local startFlag = 0 Local startX = 0 Local maskLine, pixX For pixX=0 Until skin.width Local argb = ReadPixel(skin, pixX, pixY) If argb & $ff000000 = 0 If startFlag = 0 startFlag = 1 startX = pixX EndIf Else If startFlag startFlag = 0 maskLine = CreateRectRgn(startX, pixY, pixX, pixY + 1) CombineRgn(rectrgn, rectrgn, maskLine, RGN_XOR) DeleteObject(maskLine) EndIf EndIf Next If startFlag maskLine = CreateRectRgn(startX, pixY, pixX, pixY + 1) CombineRgn(rectrgn, rectrgn, maskLine, RGN_XOR) DeleteObject(maskLine) EndIf Next SetWindowRgn(hWnd, rectrgn, True) End Function