2012-11-07 2 views
2

이 내 코드에서 캔버스의 배경을 설정할 수 없습니다 이유 : 맥 OS에라켓 : 창

#lang racket 

(require racket/gui) 

(define-values (screen-width screen-height) (get-display-size)) 

(define *app-width* 400) 

(define *app-height* 125) 

(define *vm-frame* (new frame% 
         [label "Test"] 
         [width *app-width*] 
         [height *app-height*] 
         [x (- (quotient screen-width 2) (quotient *app-width* 2))] 
         [y (- (quotient screen-height 2) (quotient *app-height* 2))] 
        )) 

(define frame-canvas% 
    (class canvas% 
    (super-new) 
    (inherit get-dc) 

    (define/override (on-paint) 
     (let ([my-dc (get-dc)]) 
     (send my-dc clear) 
     (send my-dc set-background "black"))))) 

(let ([frame-canvas (new frame-canvas% [parent *vm-frame*])]) 
    (send *vm-frame* show #t)) 

, 이것은 정상입니다, 검은 배경 가진 응용 프로그램을 보여줍니다. 하지만 Windows에서는 배경이 흰색입니다. 왜? Racket 버전은 5.3이고, 5.3 버그입니다.

답변

3

set-backgroundclear의 순서를 반대로하십시오.

clear을 호출하면 현재 배경의 색을 사용하여 채우기를 수행합니다. 만약 당신의 on-paint이 적어도 두 번 이상 호출 되었다면, 검은 배경을 관찰 할 것입니다. 두 번째 시간 이후로 현재 배경색이 검은 색이 될 것이기 때문입니다. 나는 이것이 당신이 관찰 한 플랫폼 - 특정 차이를 설명하는 것이라고 생각합니다.

+0

예, 작동했습니다. 대단히 감사합니다. – simmone