// Bounds returns the outer bounding box Rectangle of the *WindowBase, including // decorations. // // The coordinates are relative to the screen. func (wb *WindowBase) Bounds() Rectangle { var r win.RECT if !win.GetWindowRect(wb.hWnd, &r) { lastError("GetWindowRect") return Rectangle{} } return Rectangle{ int(r.Left), int(r.Top), int(r.Right - r.Left), int(r.Bottom - r.Top), } }
func (tw *TabWidget) resizePages() { var r win.RECT if !win.GetWindowRect(tw.hWndTab, &r) { lastError("GetWindowRect") return } p := win.POINT{ r.Left, r.Top, } if !win.ScreenToClient(tw.hWnd, &p) { newError("ScreenToClient failed") return } r = win.RECT{ p.X, p.Y, r.Right - r.Left + p.X, r.Bottom - r.Top + p.Y, } win.SendMessage(tw.hWndTab, win.TCM_ADJUSTRECT, 0, uintptr(unsafe.Pointer(&r))) for _, page := range tw.pages.items { if err := page.SetBounds( Rectangle{ int(r.Left - 2), int(r.Top), int(r.Right - r.Left + 2), int(r.Bottom - r.Top), }); err != nil { return } } }
func hBitmapFromWindow(window Window) (win.HBITMAP, error) { hdcMem := win.CreateCompatibleDC(0) if hdcMem == 0 { return 0, newError("CreateCompatibleDC failed") } defer win.DeleteDC(hdcMem) var r win.RECT if !win.GetWindowRect(window.Handle(), &r) { return 0, newError("GetWindowRect failed") } hdc := win.GetDC(window.Handle()) width, height := r.Right-r.Left, r.Bottom-r.Top hBmp := win.CreateCompatibleBitmap(hdc, width, height) win.ReleaseDC(window.Handle(), hdc) hOld := win.SelectObject(hdcMem, win.HGDIOBJ(hBmp)) flags := win.PRF_CHILDREN | win.PRF_CLIENT | win.PRF_ERASEBKGND | win.PRF_NONCLIENT | win.PRF_OWNED window.SendMessage(win.WM_PRINT, uintptr(hdcMem), uintptr(flags)) win.SelectObject(hdcMem, hOld) return hBmp, nil }