★初心者にVisual C++を教えるスレ★ Part15
685 :
デフォルトの名無しさん:
再描画がうまくいきません
ファイルをダウンロードするhttpクライアントを作っています。
全体の何%ダウンロードしたかをリアルタイムで表示させたいの
ですが、再描画がうまくいかないのでできないです。
100%ダウンロードした後にのみ再描画が起きるだけです。
recv関数(サーバからデータを受け取る関数)を呼び出すたびに、
UpdateAllViews(NULL)を呼び出しているのですが、再描画ができないです。
プログラムが何か作業をしているときは、再描画はできないのでしょうか?
俺だったら通信部分を別スレッドに分けると思う。
メッセージが飛べない状況では描画はできない。
UpdateAllViewのあと
viewにWM_PAINTを送った?
>>688 おいおい、自分でWM_PAINTを送信したら駄目だろ。
InvalidateRect(NULL);
UpdateWindow();
とすべき。
690 :
685:04/11/07 13:36:16
>>689 試していますが、コンパイルが通らないです。
MFCを使って組んでて、documentクラスの関数内では使えないのかな?
691 :
685:04/11/07 13:43:13
>>689 VIEWクラスにontimer関数を作ってそこから、
InvalidateRect(NULL);
UpdateWindow();
を実行したけど、症状は変わらないです。
692 :
685:04/11/07 13:46:30
>>686 マルチスレッドって奴ですか?
なんか難しそうだな。
関数{
ループ{
recv();
UpdateAllViews();
}
}
こんな感じでやってるんでしょ?
694 :
685:04/11/07 13:57:58
>>693 そうです。
またそれとは別にVIEWクラスにsettimerを作って
一秒おきにontimerを実行させて
>>691のようなこともやってみましたが、無理でした。
>>694 うん、関数の中にいる間は更新されないよ。
通信を非同期にするとか別スレッドにするとかしないと。
696 :
685:04/11/07 14:04:03
>>695 ありがとうございます。スレッドについて勉強してみます。
出直しますわ。みなさん、どうもありがとね。