// create an Alpha Icon or Cursor from an Image // http://support.microsoft.com/kb/318876 func createAlphaCursorOrIconFromImage(im image.Image, hotspot image.Point, fIcon bool) (win.HICON, error) { hBitmap, err := hBitmapFromImage(im) if err != nil { return 0, err } defer win.DeleteObject(win.HGDIOBJ(hBitmap)) // Create an empty mask bitmap. hMonoBitmap := win.CreateBitmap(int32(im.Bounds().Dx()), int32(im.Bounds().Dy()), 1, 1, nil) if hMonoBitmap == 0 { return 0, newError("CreateBitmap failed") } defer win.DeleteObject(win.HGDIOBJ(hMonoBitmap)) var ii win.ICONINFO if fIcon { ii.FIcon = win.TRUE } ii.XHotspot = uint32(hotspot.X) ii.YHotspot = uint32(hotspot.Y) ii.HbmMask = hMonoBitmap ii.HbmColor = hBitmap // Create the alpha cursor with the alpha DIB section. hIconOrCursor := win.CreateIconIndirect(&ii) return hIconOrCursor, nil }
func (b *nullBrush) Dispose() { if b.hBrush != 0 { win.DeleteObject(win.HGDIOBJ(b.hBrush)) b.hBrush = 0 } }
func (b *SolidColorBrush) Dispose() { if b.hBrush != 0 { win.DeleteObject(win.HGDIOBJ(b.hBrush)) b.hBrush = 0 } }
func (p *nullPen) Dispose() { if p.hPen != 0 { win.DeleteObject(win.HGDIOBJ(p.hPen)) p.hPen = 0 } }
func (p *GeometricPen) Dispose() { if p.hPen != 0 { win.DeleteObject(win.HGDIOBJ(p.hPen)) p.hPen = 0 } }
// Dispose releases the os resources that were allocated for the Font. // // The Font can no longer be used for drawing operations or with GUI widgets // after calling this method. It is safe to call Dispose multiple times. func (f *Font) Dispose() { for dpi, hFont := range f.dpi2hFont { if dpi != 0 { win.DeleteObject(win.HGDIOBJ(hFont)) } delete(f.dpi2hFont, dpi) } }
func (bmp *Bitmap) Dispose() { if bmp.hBmp != 0 { win.DeleteObject(win.HGDIOBJ(bmp.hBmp)) win.GlobalUnlock(bmp.hPackedDIB) win.GlobalFree(bmp.hPackedDIB) bmp.hPackedDIB = 0 bmp.hBmp = 0 } }
func (cw *CustomWidget) bufferedPaint(canvas *Canvas, updateBounds Rectangle) error { hdc := win.CreateCompatibleDC(canvas.hdc) if hdc == 0 { return newError("CreateCompatibleDC failed") } defer win.DeleteDC(hdc) buffered := Canvas{hdc: hdc, doNotDispose: true} if _, err := buffered.init(); err != nil { return err } w, h := int32(updateBounds.Width), int32(updateBounds.Height) if w < 1 { w = 1 } if h < 1 { h = 1 } hbmp := win.CreateCompatibleBitmap(canvas.hdc, w, h) if hbmp == 0 { return lastError("CreateCompatibleBitmap failed") } defer win.DeleteObject(win.HGDIOBJ(hbmp)) oldbmp := win.SelectObject(buffered.hdc, win.HGDIOBJ(hbmp)) if oldbmp == 0 { return newError("SelectObject failed") } defer win.SelectObject(buffered.hdc, oldbmp) win.SetViewportOrgEx(buffered.hdc, -int32(updateBounds.X), -int32(updateBounds.Y), nil) win.SetBrushOrgEx(buffered.hdc, -int32(updateBounds.X), -int32(updateBounds.Y), nil) err := cw.paint(&buffered, updateBounds) if !win.BitBlt(canvas.hdc, int32(updateBounds.X), int32(updateBounds.Y), w, h, buffered.hdc, int32(updateBounds.X), int32(updateBounds.Y), win.SRCCOPY) { return lastError("buffered BitBlt failed") } return err }