Win32 APIで描画がおかしくなる原因とは?

このQ&Aのポイント
  • Win32 APIのプログラムにおいて、長時間放置すると描画が正常にできなくなる現象が発生しています。
  • 特にEllipse()のペンの部分がなくなってしまったり、動作中に円の中の数字が乱れて表示されることがあります。
  • これはプログラム内での誤った処理やリソースの解放の不備が原因で起こる可能性があります。
回答を見る
  • ベストアンサー

Win32 API 途中から描画がおかしくなる

クライアント領域内を跳ね返りながらひたすら動き回るプログラムを作りました。 うまく動いていると思っていたのですが、1,2分放置しておくと描画がうまく できていない状態になることに気づきました。 下の図はそれぞれの状態のときのスクリーンショットをペイントで編集してまとめたものです。 右下が通常の状態です。 青いハッチブラシ、黒いペン、太字のフォントで成り立ってます。 それが放置しておくと左下の状態のようにEllipse()のペンの部分がなくなってしまいます。 このプログラムは練習でEllipseの代わりにFillRgnを使って右下のようにしたものを 後からつくったのですが、そっちのプログラムは動かしてから放置しておいたら 左上のようになって、次に右上のような状態になってしまいました。 右上は動作中円の中を数字が目まぐるしく動いていました。 考えられる原因は何かありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>考えられる原因は何かありますでしょうか? ソースコードの掲示なしでは回答の範囲が狭まるだけですよ? 現状だと…リソースリークでもしているんじゃないですか?としか。 描画処理、どうやってます? GDIオブジェクト作成して、使用したあと破棄してますか? # というか、こういうパターンだと最初に作成して使い回すモノかと。 # 描画のたびに生成と破棄を繰り返すのではなく。

luna3x
質問者

お礼

回答ありがとうございます。 スレッド内でDeleteObject(hRgn)が抜けていました。 解決しました。

関連するQ&A

  • 数学C 行列の問題です

    左上3a^2-3 右上3a 左上 -1 右上-3a-2 * 左下2a^2-a-2 右下2a-1 左下 a 右下3a^2+2a-3 見にくくてすみません。 よろしくお願いいたします。

  • Excel  並べ替え印刷方法

    エクセルでA4サイズの紙に4つ図形描画が作っています。 図形描画の中に数字が、 左上から1、右上2、左下に3、右下に4になるように数字が入っています。 これを88番まで(24枚)印刷しています。 毎回、はさみで切って手作業で1~88まで並び替えしています。 はさみで切るだけの印刷方法はないでしょうか?

  • VC++ ドラッグしながらの図の描画に関して

    描画に関して質問があります。 アクセサリのペイントツールのようにマウスドラッグしながら長方形を描画させたいのですが、 ドラッグの際に既に描画してあった長方形を消去する方法が理解できません。 具体的には以下のような方法です。 // ドラッグ中の描画処理 SetROP2( hDC, R2_NOT ); // 前景モードを変更 hPen = CreatePen( PS_DOT, 1, RGB(0, 55, 0) ); // 黒い点線のペンを作成 hBrush = (HBRUSH)GetStockObject( NULL_BRUSH ); // 空のブラシを取得 SelectObject( hDC, hPen ); // 作成したペンを使用するように設定 SelectObject( hDC, hBrush ); // 取得したブラシを使用するように設定 Rectangle( hDC, start.x, start.y, old_end.x, old_end.y ); // 四角形を描画 SetROP2とブラシは共に塗りつぶしを指定するものですが、これらを併用することによって何故既存の図形を消去していくことができるのかわかりません。 疑問になったのでブラシに関する記述を消去し実行してみると長方形内部の色が反転されましたが、これは理解できます。 しかし、これにブラシに関する記述を復元させることにより、なぜ内部が真っ白になるのかがわかりません。 また、塗りつぶしはSetROP2とブラシのどちらが先に行うのでしょうか?お手数ですが回答よろしくお願いします。

  • この数学の問題が意味不明です。

    この数学の問題が意味不明です。 m = ( a[括弧内の左上] b[右上] c[左下] d[右下] ) は2×2の行列である。tM と detM を次で定義する。 tM = ( a [括弧内の左上] c [右上] b [左下] d [右下] ), detM = ad - bc. A = ( 1 [括弧内の左上] x [右上] 1/2 [左下] y [右下] ) とする。 tA( 0 [括弧内の左上] 1 [右上] 1 [左下] 0 [右下] )A = ( 1 [括弧内の左上] 0 [右上] 0 [左下] -1 [右下] ) 且つ detA = 1 を満たすxとyを求めよ。 解:x= -1 y=1/2 この回答の解説を、わかる人は言葉を添えて丁寧に説明しください、お願いします。 自分は、行列の意味と、tMとdetM とかの意味がわかりません。高校三年生初期の知識だけあります。 教えてくれたら本当に助かります。

  • 漢字の書き順について教えてください

    いつもお世話になっております。 先日画数の多い漢字を調べたところ、龍龍                         龍龍と、 龍の字を四つ並べた漢字が有るということを知りました。 この漢字の書き順はどのようになりますでしょうか? (龍をどの順番で書けば良いのか、悩んでいます) 左上→右上→左下→右下 左上→左下→右上→右下 どの順番が正しいのでしょうか? どなたか教えていただけると幸いです。 よろしくお願いします。

  • γの書きかた

    ギリシャ文字のγ(ガンマ)を書くときに、左上から右下へ書き下ろすのか、 右上から左下書き下ろすのか、どちらが正しい書き順なのでしょうか? 私は、左上から書き始めますが、あっているのでしょうか? どうでもいい質問かもしれませんが、うやむやした気分を晴らしたいので、よろしくお願いします。

  • 数Cの問題です!

    今使ってる参考書の問題で、 「Xを任意の2×2行列とするとき、つねにAX=XAが成り立つ 2×2行列Aを求めよ」 というのがあるんですけど、 解答では計算しやすいためにXを(右上1左上0右下0左下0)と (右上0左上1右下0左下0)とおいているんですが、 なんでXを1つじゃなく2つおいてるんですか?? 問題文のどこで2つおくと判断するんでしょうか。 教えて下さい!

  • A6データをA4用紙に印刷するには?

    使用しているのはword2007です。 A4用紙にA6データを4ページずつ印刷することは出来ています。 しかし、印刷されたものは 左上が1ページ、右上が2ページ 左下が3ページ、右下が4ページ となります 右上が1ページ、左上が2ページ、 右下が3ページ、左下が4ページ、 となるように印刷するには、どうしたらいいでしょうか?

  • プリンタのトラブル

    プリンタで、「用紙あたりのページ数」を4に設定して印刷すると、印刷順序が、 『右上 ⇒ 左上 ⇒ 右下 ⇒ 左下』 となってしまいます。 これでは見にくいので、 『左上 ⇒ 右上 ⇒ 左下 ⇒ 右下』 としたいのですが、設定方法が良く分かりません。 (なお使用機種は、hp deskjet 948c です。) 設定方法をご存知の方がいらっしゃいましたら教えていただけないでしょうか。 よろしくお願いします。

  • 背景を四隅に固定する

    背景の画像を右上、右下、左上、左下の全てに固定したいと思います。 過去の質問(http://oshiete1.goo.ne.jp/qa1871874.html)を見て右下と左下には固定できたのですが、 あとの2つをどうやればいいか分かりません。 どうすれば良いのでしょうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう