球拍:为什么不能在Windows中设置画布的背景

时间:2012-11-07 04:15:53

标签: racket

这是我的代码:

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

在Mac OS上,这是正常的,显示一个黑色背景的应用程序。   但在窗户上,背景是白色的。   为什么? Racket版本是5.3,这是一个5.3 bug?

1 个答案:

答案 0 :(得分:3)

颠倒set-backgroundclear的顺序。

clear的调用使用当前背景的颜色进行填充。如果你的on-paint被称为至少不止一次,那么你会观察到黑色背景,因为第二次,当前背景颜色将是黑色。我怀疑这是解释您观察到的平台特定差异的原因。