Canvas 获取图像';滚动画布时的s x y
我正在使用DrRacket 5.3.4 有一个框架f,画布c 我将滚动条设置为画布 我想得到图像的坐标 (非主窗口,框架的左上相对坐标) 如何获取图像的x和y 简而言之,滚动条被移动了,所以我可以看到图像的区域,其x和y在90,90到290之间 此时,我将鼠标移到窗口的左上角。然后得到0,0 但我想得到90,90 我该怎么做 谢谢Canvas 获取图像';滚动画布时的s x y,canvas,scheme,scrollbar,racket,Canvas,Scheme,Scrollbar,Racket,我正在使用DrRacket 5.3.4 有一个框架f,画布c 我将滚动条设置为画布 我想得到图像的坐标 (非主窗口,框架的左上相对坐标) 如何获取图像的x和y 简而言之,滚动条被移动了,所以我可以看到图像的区域,其x和y在90,90到290之间 此时,我将鼠标移到窗口的左上角。然后得到0,0 但我想得到90,90 我该怎么做 谢谢 #lang racket/gui (require racket/draw) (define f (new frame% [label "hey
#lang racket/gui
(require racket/draw)
(define f
(new frame%
[label "hey"]
[width 200]
[height 200]))
(define img (read-bitmap "some_image.png"))
(define img-w (send img get-width))
(define img-h (send img get-height))
(define (pcb c dc)
(send dc draw-bitmap img 0 0))
(define my_c%
(class canvas%
(define/override (on-event e)
(printf "x: ~a y: ~a \n" (send e get-x) (send e get-y)))
(super-new)))
(define c (new my_c%
[parent f]
[style (list 'hscroll 'vscroll)]
[paint-callback pcb]))
(send c init-auto-scrollbars img-w img-h 0 0)
(send f show #t)
像这样:
(define my_c%
(class canvas%
(define/override (on-event e)
(let-values (((x y) (send this get-view-start)))
(printf "x: ~a y: ~a \n" (+ x (send e get-x)) (+ y (send e get-y)))))
(super-new)))
get view start(多返回值)属性包含滚动条的x和y偏移。因此,将其添加到当前的x和y位置可以得到图像上的位置。它可以给你比图像实际大小更大的数字,所以你需要对照你的img-w和img-w值来检查