★初心者にVisual C++を教えるスレ★ Part15

このエントリーをはてなブックマークに追加
685デフォルトの名無しさん
再描画がうまくいきません

ファイルをダウンロードするhttpクライアントを作っています。
全体の何%ダウンロードしたかをリアルタイムで表示させたいの
ですが、再描画がうまくいかないのでできないです。
100%ダウンロードした後にのみ再描画が起きるだけです。

recv関数(サーバからデータを受け取る関数)を呼び出すたびに、
UpdateAllViews(NULL)を呼び出しているのですが、再描画ができないです。

プログラムが何か作業をしているときは、再描画はできないのでしょうか?
686デフォルトの名無しさん:04/11/07 13:04:49
俺だったら通信部分を別スレッドに分けると思う。
687デフォルトの名無しさん:04/11/07 13:04:54
メッセージが飛べない状況では描画はできない。
688デフォルトの名無しさん:04/11/07 13:06:48
UpdateAllViewのあと
viewにWM_PAINTを送った?
689デフォルトの名無しさん:04/11/07 13:16:33
>>688
おいおい、自分でWM_PAINTを送信したら駄目だろ。

InvalidateRect(NULL);
UpdateWindow();

とすべき。
690685:04/11/07 13:36:16
>>689
試していますが、コンパイルが通らないです。
MFCを使って組んでて、documentクラスの関数内では使えないのかな?
691685:04/11/07 13:43:13
>>689
VIEWクラスにontimer関数を作ってそこから、
InvalidateRect(NULL);
UpdateWindow();
を実行したけど、症状は変わらないです。
692685:04/11/07 13:46:30
>>686
マルチスレッドって奴ですか?
なんか難しそうだな。
693デフォルトの名無しさん:04/11/07 13:53:26
関数{
 ループ{
  recv();
  UpdateAllViews();
 }
}

こんな感じでやってるんでしょ?
694685:04/11/07 13:57:58
>>693
そうです。

またそれとは別にVIEWクラスにsettimerを作って
一秒おきにontimerを実行させて
>>691のようなこともやってみましたが、無理でした。
695デフォルトの名無しさん:04/11/07 14:01:43
>>694
うん、関数の中にいる間は更新されないよ。
通信を非同期にするとか別スレッドにするとかしないと。
696685:04/11/07 14:04:03
>>695
ありがとうございます。スレッドについて勉強してみます。
出直しますわ。みなさん、どうもありがとね。