再描画の一般的な方法とは?

このQ&Aのポイント
  • 再描画の一般的な方法を教えてください。セレクトボックスとテキストボックスがある場合、再描画のためにフラグやメモリの利用が考えられます。
  • 再描画にはセレクトボックスのチェック状態を調べる方法やフラグを利用する方法があります。テキストボックスの描画はフラグの値を参照すると良いでしょう。
  • 複雑な計算やファイルの読み込み結果によってテキストボックスの値が決まる場合には、フラグを用意して再描画することが推奨されます。また、セレクトボックスやテキストボックスが多い場合には、メモリを利用して再描画する方法も考えられます。
回答を見る
  • ベストアンサー

再描画の一般的な方法

再描画の一般的な方法を教えてください。 セレクトボックスとテキストボックスが2つずつ。 □■□□ 2番が選択されています □□□■ 4番が選択されています こんな窓が、別窓に隠れてから復活して再描画する場合、 case WM_PAINT: でセレクトボックスのチェック状態を 調べるのはよくなく、再描画のために、フラグを用意して、 セレクトボックスに変化があった場合はフラグを書き替えて、 テキストボックスの描画はフラグの値を参照した方がいいと 思いました。 この例の場合はセレクトボックスを調べるだけだから セレクトボックスを調べてもいいと思うけど、もっと複雑な計算をしたり 大きなファイルを読み込ませた結果でテキストボックスの値が決まる場合の ことを考えたら、フラグを用意するのがいいと思いました。 でも、セレクトボックスとテキストボックスがもっとたくさんあったり した場合には、フラグの数が多くなるから、フラグを参照するより、 再描画のために、表示に変化があった場合には、窓のクライアント全体を メモリに保存しておいて、再描画ではメモリから表示した方がいいとも 思いました。 たくさんの種類のセレクトボックスとか文字とかがある窓は 普通はどんな風に再描画させているんですか?

  • A__
  • お礼率59% (194/328)

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

  • ベストアンサー
noname#30727
noname#30727
回答No.1

またまた、お邪魔します。 以前の質問と同じような回答になるのですが、これも別ウィンドウですから、親ウィンドウの WM_PAINT とは無関係です。それぞれのコントロールは無効領域が発生すると勝手に再描画します。標準のコントロールだけを貼り付けたダイアログボックを作成する場合、おそらく描画処理は一切必要無いでしょう。 状態の取得に関しては、そのたびに SendMessage するのでもいいのですが、コントロールによっては変更された事を親ウィンドウに通知してくるものもあるので、そのメッセージを拾って変数に保存するようにすれば、よりイベントドリブンな無駄の少ないプログラムになると思います。

A__
質問者

お礼

まだそれを作ってなくて、想像だけで再描画が大変だと 思っていたけど、これもそれぞれのオブジェクトが別窓 だから再描画の必要がなかったんですねー。 それを考えたら、TextOut( ) がたくさんある hWnd の 再描画は、TextOut( ) を hWnd でなく、 CreateWindow( ) で別窓に書けば、条件による 書き換えとか再描画が楽になると思いました。 状態の取得は SendMessage(hWnd, ... がよさそうですか。 ありがとうございます。

関連するQ&A

  • 描画キャンバス内に書かれた図形から描画キャンバスをはずしたい

    ワード2003です 表の中に描画キャンバスでワードアート、テキストボックス等を描いた文書が知人から送られてきました 描画キャンバスを削除したいのですがクリックしても描かれたワードアートやテキストボックスが選択されて描画キャンバスが選択できませんので描画キャンバスが削除できません ワードアートやテキストボックスを活かして描画キャンバスだけを削除する方法がありますか教えてください

  • 描画オブジェクトについて

     テキストボックスでいれた文字の下に、写真をいれてその下にテキストボックスで文字を入れています。写真の上に気になる余白があり写真を上に引き上げようとするのですがレイアウトに変化がありません。描画オブジェクトを使っているからでしょうか?描画オブジェクトを解除するにはどうしたらいいでしょうか?

  • PictureBoxの描画を消さない方法

    VisualBasic2005において、プログラミングを制作しています。 計測器にて計測した値を読み込み、くり返し処理を用いてPictureBoxに描画したいのですが、前のデータを消さずに次のデータをプロットしていく方法がわかりません。 前のデータを消さずに塗り足していく方法はないでしょうか? また、この値はコンボボックスから読み込んでいるのですが、くり返し処理によってコンボボックスの値を読み取る場合、終了値はどのように設定すればいいのでしょう? 初期値はいいとして、終了値は計測回数によって変わるため明確な値はないのですが、「値がなくなったら終わり」ということを指定するにはどうコードを組めばいいのでしょうか? ご指導よろしくお願いいたします。 全体的な流れを記しておきます。 計測→コンボボックスに値を格納→ボタンによってコンボボックスの値を(全て)読み込み、PictureBoxに全て描画 コンボボックスの値の読み込み、描画にくり返し処理を用いています。 よろしくお願いいたします。

  • アイパッドでダブルタップからJQueryを動したい

    アイパッドでダブルタップをしたらセレクトボックスに値を入れて展開したいのですが、アイパッドではダブルタップすると拡大縮小を繰り返すだけです。 こちらのサイトを拝見して、 http://blog.webcreativepark.net/2010/08/16-110311.html プログラムを入れ込んでみたのですが、うまくいきません。 セレクトボックスをPタグで囲んでみたり、Pをselectに変えたりしたのですが、セレクトボックスに値が入りません。 (パソコン上ではダブルクリックでセレクトボックスに値がはいって展開します。) 気になるのは、data("dblTap")というフラグを用意して・・・という文章がありますが、このフラグはどこに用意すればいいのでしょうか。 素人の質問で申し訳ございませんが、おわかりの方がいらっしゃいましたら教えてください。 よろしくお願いいたします。

  • エクセルの図形描画のこと

    エクセルのあるシートに、オートシェイプの図形とテキストボックスの文字が無数に描画してあります。これらを全てまとめて、"セルに合わせて移動やサイズ変更をしない"に一括変更するにはどうすればいいでしょうか? 対象オブジェクトを全てセレクト状態にしてから、マウス右クリックで"オブジェクトの書式設定"を選択してみると、対象が多すぎるようで書式設定ウインドウが出てきませんでした。

  • ラジオボタンの選択項目

    ラジオボタンの選択項目を、セレクトボックスとテキストボックスにするにはどのようにしたらいいのでしょうか? またJavaScriptを用いてラジオボタンの値と選択されたセレクトボックス、テキストボックスの値をsubmitさせるにはどのようにするのでしょうか? ご存知の方いらっしゃいましたらお願いします。

  • Excel シート内を全削除する方法

    社内のWebページの入力フォームをExcelに貼り付けました。 すると、一部はセルに値が入り、一部はテキストボックス(?)として貼り付きました。このセルに入った値を別のシートで参照することにしました。そのシートに貼り付いているものを一度全てクリアして貼り付け直したいのですが、クリアする方法をご教授下さい。 普通に全選択から削除すればセルの値しか削除されません。テキストボックス(?)は、画像のように選択できないので、選択-右クリックから削除ができません。シートごと削除すれば、参照が消えます。もちろんそのまま上から貼り付けても良さそうですが、テキストボックスが何重にも貼り付くことになりそうです。

  • テキストボックスにセルの値を複写する方法

    Excel VB (Excel 2007) の質問 Sheet1のセルD1、D2、D3に文字が入力されています。 そして同じシート上の任意の場所にテキストボックスが配置されています。 テキストボックスには"テキスト ボックス 1"、"テキスト ボックス 2"、"テキスト ボックス 3"と名前がつけられています。 セルD1の値を"テキスト ボックス 1"に複写、セルD2の値を"テキスト ボックス 2"に、セルD3の値を"テキスト ボックス 3"に 複写したいのですがどのようにすればいいのでしょうか。 インターネットのQ&Aで調べましたが同じような質問でも難しすぎて理解できません。 例えば以下のように簡単にできないでしょうか。 D1の値を"テキスト ボックス 1"に複写する場合 Range("D1").Select Selection.Copy ActiveSheet.Text."テキスト ボックス 1".Activate  'テキストボックスを選択(アクティブ)する記述が解りません。 ActiveSheet.Paste                 ’選択したテキストボックスに貼り付ける方法もわかりません。 勿論上記の記述ではうまくいきません。 VB初心者でお手数をおかけしますがよろしくお願いします。

  • Ajaxで加工したページの初期化について

    ページ上にテキストボックスやセレクトボックスがたくさんあります。 セレクトボックスAで選択した値に基づいて、セレクトボックスBやテキストボックスに一つの値を表示しています(セレクトボックスは選択不可状態になる)。 セレクトボックスAで選択しないときは、セレクトボックスBには予め選択肢が入っています。 セレクトボックスAで選択して、セレクトボックスBにデータを表示した後、 リセットボタンを押したらセレクトボックスBは初期状態の予め選択肢が入っている状態に戻したいです。 そして、セレクトボックスCには、別の選択肢を入れ直したいです。 このようなセレクトボックス、テキストボックスともに何十個もあるので、出来たら一括で初期状態に戻し、その後、セレクトボックスの選択肢の変更などのAjax加工をしたいと思っています。 ページのツールバーのページ更新ボタンを押すと、ページがリロードされて、初期化されるので、 window.location.reload(); と設定した後、さらにAjaxでセレクトボックスなどの変更をするプログラムを組んだのですが、 window.location.reload(); この後の処理が動いてくれません。 ページをリロードすると、その後の処理が無効?になってしまうのでしょうか。 一つずつセレクトボックスやテキストボックスのデータを削除して、さらに値をセットしてというのが効率が悪い気がして、 ページリロードのように、ページを初期化した後、必要なセレクトボックスやテキストボックスだけAjax処理をしたいなあと思うのですが、どのようにするのがいいのでしょうか。 効率のいいやり方をご存じの方がいらっしゃいましたらぜひ教えてください。 分かりづらいと思いますので、分からない点はご質問頂けたらと思います。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • セレクトボックスに追加する方法!

    HTMLのフォームでテキスト入力の欄で5行にわたって 名前が表示されていると考えて2行目と5行目を選択して そのテキストフォームの下にインプットボタンがありそれを押すとセレクトボックスの中にある値に先ほど2つ選択した値を追加したい場合どういうロジックを書けばいいのでしょうか? 何分プログラムを勉強し始めたばかりなのでご教授ください。

専門家に質問してみよう