2

この私のコード:

#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 では、これは正常な動作で、背景が黒いアプリを表示します。ただし、Windows では背景は白です。なんで?ラケットのバージョンは5.3ですが、5.3のバグですか?

4

1 に答える 1

3

との順序を逆にset-backgroundclearます。

への呼び出しclearは、現在の背景の色を使用して塗りつぶしを行います。どういうわけか、on-paint少なくとも 2 回以上呼び出された場合、2 回目以降は現在の背景色が黒になるため、背景が黒になります。これが、あなたが観察したプラットフォーム固有の違いを説明していると思います。

于 2012-11-07T05:39:35.140 に答える