本文整理汇总了Golang中github.com/lxn/win.GetDC函数的典型用法代码示例。如果您正苦于以下问题:Golang GetDC函数的具体用法?Golang GetDC怎么用?Golang GetDC使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetDC函数的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: calculateTextSizeImpl
func (wb *WindowBase) calculateTextSizeImpl(text string) Size {
hdc := win.GetDC(wb.hWnd)
if hdc == 0 {
newError("GetDC failed")
return Size{}
}
defer win.ReleaseDC(wb.hWnd, hdc)
hFontOld := win.SelectObject(hdc, win.HGDIOBJ(wb.window.Font().handleForDPI(0)))
defer win.SelectObject(hdc, hFontOld)
var size Size
lines := strings.Split(text, "\n")
for _, line := range lines {
var s win.SIZE
str := syscall.StringToUTF16(strings.TrimRight(line, "\r "))
if !win.GetTextExtentPoint32(hdc, &str[0], int32(len(str)-1), &s) {
newError("GetTextExtentPoint32 failed")
return Size{}
}
size.Width = maxi(size.Width, int(s.CX))
size.Height += int(s.CY)
}
return size
}
示例2: calculateMaxItemTextWidth
func (cb *ComboBox) calculateMaxItemTextWidth() int {
hdc := win.GetDC(cb.hWnd)
if hdc == 0 {
newError("GetDC failed")
return -1
}
defer win.ReleaseDC(cb.hWnd, hdc)
hFontOld := win.SelectObject(hdc, win.HGDIOBJ(cb.Font().handleForDPI(0)))
defer win.SelectObject(hdc, hFontOld)
var maxWidth int
count := cb.model.ItemCount()
for i := 0; i < count; i++ {
var s win.SIZE
str := syscall.StringToUTF16(cb.itemString(i))
if !win.GetTextExtentPoint32(hdc, &str[0], int32(len(str)-1), &s) {
newError("GetTextExtentPoint32 failed")
return -1
}
maxWidth = maxi(maxWidth, int(s.CX))
}
return maxWidth
}
示例3: dialogBaseUnits
func (wb *WindowBase) dialogBaseUnits() Size {
// The window may use a font different from that in WindowBase,
// like e.g. NumberEdit does, so we try to use the right one.
window := windowFromHandle(wb.hWnd)
hdc := win.GetDC(wb.hWnd)
defer win.ReleaseDC(wb.hWnd, hdc)
hFont := window.Font().handleForDPI(0)
hFontOld := win.SelectObject(hdc, win.HGDIOBJ(hFont))
defer win.SelectObject(hdc, win.HGDIOBJ(hFontOld))
var tm win.TEXTMETRIC
if !win.GetTextMetrics(hdc, &tm) {
newError("GetTextMetrics failed")
}
var size win.SIZE
if !win.GetTextExtentPoint32(
hdc,
dialogBaseUnitsUTF16StringPtr,
52,
&size) {
newError("GetTextExtentPoint32 failed")
}
return Size{int((size.CX/26 + 1) / 2), int(tm.TmHeight)}
}
示例4: Screenshot
// Screenshot returns an image of the window.
func (wb *WindowBase) Screenshot() (*image.RGBA, error) {
if hBmp, err := hBitmapFromWindow(wb); err != nil {
return nil, err
} else {
var bi win.BITMAPINFO
bi.BmiHeader.BiSize = uint32(unsafe.Sizeof(bi.BmiHeader))
hdc := win.GetDC(0)
if ret := win.GetDIBits(hdc, hBmp, 0, 0, nil, &bi, win.DIB_RGB_COLORS); ret == 0 {
return nil, newError("GetDIBits get bitmapinfo failed")
}
buf := make([]byte, bi.BmiHeader.BiSizeImage)
bi.BmiHeader.BiCompression = win.BI_RGB
if ret := win.GetDIBits(hdc, hBmp, 0, uint32(bi.BmiHeader.BiHeight), &buf[0], &bi, win.DIB_RGB_COLORS); ret == 0 {
return nil, newError("GetDIBits failed")
}
width := int(bi.BmiHeader.BiWidth)
height := int(bi.BmiHeader.BiHeight)
im := image.NewRGBA(image.Rect(0, 0, width, height))
n := 0
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
r := buf[n+2]
g := buf[n+1]
b := buf[n+0]
n += 4
im.Set(x, height-y, color.RGBA{r, g, b, 255})
}
}
return im, nil
}
}
示例5: initCharWidth
func (le *LineEdit) initCharWidth() {
font := le.Font()
if font == le.charWidthFont {
return
}
le.charWidthFont = font
le.charWidth = 8
hdc := win.GetDC(le.hWnd)
if hdc == 0 {
newError("GetDC failed")
return
}
defer win.ReleaseDC(le.hWnd, hdc)
defer win.SelectObject(hdc, win.SelectObject(hdc, win.HGDIOBJ(font.handleForDPI(0))))
buf := []uint16{'M'}
var s win.SIZE
if !win.GetTextExtentPoint32(hdc, &buf[0], int32(len(buf)), &s) {
newError("GetTextExtentPoint32 failed")
return
}
le.charWidth = int(s.CX)
}
示例6: newCanvasFromHWND
func newCanvasFromHWND(hwnd win.HWND) (*Canvas, error) {
hdc := win.GetDC(hwnd)
if hdc == 0 {
return nil, newError("GetDC failed")
}
return (&Canvas{hdc: hdc, hwnd: hwnd}).init()
}
示例7: init
func init() {
// Retrieve screen DPI
hDC := win.GetDC(0)
defer win.ReleaseDC(0, hDC)
screenDPIX = int(win.GetDeviceCaps(hDC, win.LOGPIXELSX))
screenDPIY = int(win.GetDeviceCaps(hDC, win.LOGPIXELSY))
// Initialize default font
var err error
if defaultFont, err = NewFont("MS Shell Dlg 2", 8, 0); err != nil {
panic("failed to create default font")
}
}
示例8: hBitmapFromImage
func hBitmapFromImage(im image.Image) (win.HBITMAP, error) {
var bi win.BITMAPV5HEADER
bi.BiSize = uint32(unsafe.Sizeof(bi))
bi.BiWidth = int32(im.Bounds().Dx())
bi.BiHeight = -int32(im.Bounds().Dy())
bi.BiPlanes = 1
bi.BiBitCount = 32
bi.BiCompression = win.BI_BITFIELDS
// The following mask specification specifies a supported 32 BPP
// alpha format for Windows XP.
bi.BV4RedMask = 0x00FF0000
bi.BV4GreenMask = 0x0000FF00
bi.BV4BlueMask = 0x000000FF
bi.BV4AlphaMask = 0xFF000000
hdc := win.GetDC(0)
defer win.ReleaseDC(0, hdc)
var lpBits unsafe.Pointer
// Create the DIB section with an alpha channel.
hBitmap := win.CreateDIBSection(hdc, &bi.BITMAPINFOHEADER, win.DIB_RGB_COLORS, &lpBits, 0, 0)
switch hBitmap {
case 0, win.ERROR_INVALID_PARAMETER:
return 0, newError("CreateDIBSection failed")
}
// Fill the image
bitmap_array := (*[1 << 30]byte)(unsafe.Pointer(lpBits))
i := 0
for y := im.Bounds().Min.Y; y != im.Bounds().Max.Y; y++ {
for x := im.Bounds().Min.X; x != im.Bounds().Max.X; x++ {
r, g, b, a := im.At(x, y).RGBA()
bitmap_array[i+3] = byte(a >> 8)
bitmap_array[i+2] = byte(r >> 8)
bitmap_array[i+1] = byte(g >> 8)
bitmap_array[i+0] = byte(b >> 8)
i += 4
}
}
return hBitmap, nil
}
示例9: hBitmapFromWindow
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
}