68user's page 掲示板

Prev< No. 1061〜1064> Next  [最新発言に戻る] [過去ログ一覧]
No. 1061 # gongo [E-mail] 2000/08/09 (水) 21:13:23
@68user様
Xtのラベルを表示させないようにするのは成功しました。
結局各ウィジェットごとにExposeイベントの処理を行うことにしました。
そこで次に各ウィジェットごとに服の色を変えようかと思い、
DrawOnWidgetの中でdrawgcの属性値を変えようとしたのですが
どうもうまくいきません。1つのGCを各ウィジェットに対して
属性値を変えつつ使い回すのは無理なのでしょうか。
どうしても最初の窓用に設定した色で全て塗りつぶされてしまいます。
プログラムはこちらです↓
http://www.din.or.jp/~gongo/xtshirts.c
http://www.din.or.jp/~gongo/color.dat
http://www.din.or.jp/~gongo/fixedcolor.dat
http://www.din.or.jp/~gongo/polygon.dat
http://www.din.or.jp/~gongo/outline.dat

まだ先の話ですが、いずれは1つの窓をクリックすることで
全ての服の色に影響を与え、再描画するようにしたいと考えております。
どうか宜しくお願い致します。

No. 1062 # 68user 2000/08/09 (水) 21:54:47
たぶん、DrawOnWidget の fscanf で、バッファオーバーランを
起こしています。そのため windownum が上書きされ、値が常に
0になってます。例えば POLNUM の数を増やすと動作しました。

開発初期段階のうちから
    if ( j >= sizeof(polpoints)/sizeof(polpoints[0]) ){
        オーバーラン
    }
というような自動チェックのコードを仕込んでおくこと
をお勧めします。

あと、デバッグは、もうちょっと注意深くやってみましょう。
XChangeGC 周辺で windownum や pixelnum[windownum] の
値を表示させるだけで、おそらく気づいたことでしょうから。

No. 1063 # 68user 2000/08/09 (水) 22:16:39
ちゃうな。POLNUM は正しいのか。というわけで、
    誤: fscanf("%d%*c%d%*c",&polpoints[j].x,&polpoints[j].y);
    正: fscanf("%hd%*c%hd%*c",&polpoints[j].x,&polpoints[j].y);
ですかね。XPoint のメンバ x,y は int でなく
short int です。

No. 1064 # gongo [E-mail] 2000/08/10 (木) 00:16:58
@68user様
お手数おかけ致しまして申し訳ございませんでした。
DrawOnWidgetに入った時点でwindownumがきちんと受け渡されて
表示されていたので、てっきり大丈夫なのだと思いこんでいました。
以後もう少し気をつけてデバック致します。

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