2013-06-19 38 views
2

我使用DrRacket 5.3.4獲取圖像的X Y當畫布已滾動

有一幀F的帆布Ç

我設置滾動條到畫布上。

我希望得到的圖像的座標 (不是主窗口中,框架的左上相對座標)

?我怎樣才能圖像的X和Y?

總之

,滾動條很感動,所以我可以看到圖像的區域,其x和y是從90,90至290,290

在這一刻,我將鼠標移動到窗口的左上角。並獲得0,0。

但我想得到90,90。

我該怎麼做?

謝謝!

#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) 

回答

0

像這樣:

(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))) 

一開始視圖啓動(多返回值),屬性包含滾動條的x和y的偏移量。因此,將其添加到當前的x和y位置可以爲您提供圖像上的位置。它可以給你的數字高於圖像的實際大小,所以你需要檢查img-w和img-w的值。