68user's page 掲示板

Prev< No. 1059> Next  [最新発言に戻る] [過去ログ一覧]
No. 1059 # 68user 2000/08/08 (火) 22:51:30
まず、
    - Window?? というのは Xt のラベル
    - その下の服やらなんやらは Xlib
です。

Xlib の方は Expose が発生すると再描画するように EventHandler を
設定しています。しかし、Xt の方は Xt が勝手に Expose を取得し、
再描画しています。

で、表示される/されないの現象を見るに、
    - Xlib の方は、ウィンドウの一部が露出しただけで常に
        再描画するようになっています。なぜならウィンドウ全体である
        form に Expose イベントハンドラとして、全ての Xlib な画像を
        再描画するように設定されているからです。
    - Xt のウィジェットの方は、自分自身のウィジェットが
        露出しない限り、再描画しません
なので、xtshirts のウィンドウの半分を別のウィンドウで覆い、
その後 xtshirts ウィンドウを露出させると、隠れていなかった
部分のラベルが消えます。これは、隠れていなかった部分の
ウィジェットは再描画しなかったのに、Xlib の方が再描画
してしまったからでしょう。

対策としては、
    - Xlib の方でも本当に関係ある Expose だけを拾うようにする。
    - Xlib の方で Expose を受けたら再描画し、その後 XClearArea
        (だったかなぁ?) で隠れてしまったウィジェットの方に
        Expose イベントを送る
でしょうか。あるいは重ね合わせを簡単に指定できる方法が
あるのかもしれません。

以上、Xt 素人の意見でした。大外しの可能性もありますので、
盲目的に信用しないで下さい。

ちなみに initflag の部分は
    - 結局一度しか実行されない (main だから)
    - コールバックやイベントハンドラは一度設定したら、ずっと
        その設定が残る (再設定しない限り)
なので、意味はないと思います。

Prev< No. 1059> Next  [最新発言に戻る] [過去ログ一覧]