OnTimer()


はんにゃ  URL  2011-06-26 17:24:38  No: 72775  IP: 192.*.*.*

WindowsXP+VC++6+MFCでHPに出ている  一筆Loop紋様描画ソフト(アニメーション可)作成しています。

以下のようなコードで自動的に紋様の条件を変えては  描画をして、その結果(一筆Loopか複数のLoopか)を表示させています。そして紋様条件がその何れでも無い場合checkAll= 1はもともと描画をしないと考えています。
ところが  実際には紋様条件に合わなくても描画をします。その理由が分からなくて困っています。どうしたらよいか助言をおねがいします。

十分な理解の上でなく、こうしたらというサンプルを利用したレベルです。
コメントは小生の理解(そのつもりの)機能を記したものです。
void CChildView::OnTimer(UINT nIDEvent) // これで自動化する
{

編集 削除
はんにゃ  URL  2011-06-26 17:28:11  No: 72776  IP: 192.*.*.*

コードは以下の如くです
void CChildView::OnTimer(UINT nIDEvent) // これで自動化する
{
  // TODO: この位置にコマンド ハンドラ用のコードを追加してください

  switch (nIDEvent)
  {
    case 10://数字10は適当にきめている
    KillTimer(10);  //  ?  途中停止か?
    geNeration(0);   // 自動的に紋様条件を作成

    if( checkAll == 1)// 描画をする紋様条件が一致している
    {    
                     // 描画の関数 voidChildView::OnPaint()が働く
      Invalidate(FALSE);
     } // endof if(checkAll

                //最後の紋様条件でなければ  自動化を設定する                    if( m_alledge != 1 && bAutog == TRUE )
    {
        SetTimer(10, TIMER_INTERVAL, NULL);
    } 
    break;
  }
  CWnd::OnTimer(nIDEvent);
}//endof CWnd::OnTimer

編集 削除
はんにゃ  2011-06-26 17:30:19  No: 72777  IP: 192.*.*.*

改行表記が誤っており以下が正しいです

                //最後の紋様条件でなければ  自動化を設定する
  if( m_alledge != 1 && bAutog == TRUE )

編集 削除
はんにゃ  2011-06-26 17:34:35  No: 72778  IP: 192.*.*.*

このクラスのChildView.h には
#define TIMER_INTERVAL 0  とあります

編集 削除
えっと  2011-06-26 20:51:33  No: 72779  IP: 192.*.*.*

日本語でお願いします。
http://www.hyuki.com/writing/techask.html
一読を。何が問題かを箇条書きで書くと回答が付くかもしれません。

紋様ってなに? 紋様条件?

編集 削除
はんにゃ  2011-06-26 21:07:18  No: 72780  IP: 192.*.*.*

紋様とは  このソフトで  与えられた配列のタイル間の接続の条件によって描く線分と円弧で描かれた図案のことです。
かなり簡単な接続の条件でさまざまなパターンは得られます。この接続の条件を
紋様条件と呼んでいます

よろしく  おねがいします

編集 削除
はんにゃ  2011-06-27 05:17:16  No: 72781  IP: 192.*.*.*

描画の自動化とは  手動のときは紋様の条件を手動で設定後KeySを押すと描画をするのに対して、紋様の条件の全ての条件について、自動的に紋様条件を設定して、描画をするということです。

編集 削除
ホウジョウウサギ  2011-06-27 09:54:52  No: 72782  IP: 192.*.*.*

紋様条件を作成だの何だのが何やってるのか不明ですが……

提示コードでは
単にタイマ間隔で条件(checkAll==1)を調べて
Invalidate()をコールして再描画を促していることだけしか読み取れません.

で,他の要因でも再描画は発生する(OnPaint()は実行される)ので
>紋様条件に合わなくても描画をします
ということになっている……とか??

編集 削除
仲澤@失業者  2011-06-27 10:07:47  No: 72783  IP: 192.*.*.*

1.タイムアウト値に0を指定しているようですが、原理的に変ですよね。
  適切な値を指定してください。
2.また、タイムアウト値に、およそ20[ms]以下を指定しても
  そのとおりになりません。適切な値を指定してください。

編集 削除
ryo  2011-06-27 21:55:09  No: 72784  IP: 192.*.*.*

もう、いらっしゃらないかもしれないが

デバッグモード、ブレーク、変数ウォッチなどを利用して
どんな動作をしているか?変数の値が、どのときどんな値か?
を自分で調べるの一番です

編集 削除
えっと  2011-06-28 23:05:37  No: 72785  IP: 192.*.*.*

一筆Loop紋様描画ソフト
を作った所に聞いた方が有効な回答が得られるのでは?
多分ここにはそのソフトの存在と解決方法を知っている
方はいないかもしれません。
せめてソフトのリンク先でも提示してみては?

編集 削除
はんにゃ  URL  2011-07-02 17:26:24  No: 72786  IP: 192.*.*.*

みなさん  ありがとうございます
>1.タイムアウト値に0を指定しているようですが、原理的に変ですよね。
  適切な値を指定してください。
2.また、タイムアウト値に、およそ20[ms]以下を指定してもそのとおりになりません。適切な値を指定してください。

タイムアウト値の時間msが来たら、このOntime()が動作するということと理解しています。と言って、理解が不十分で  どのような時間が適切なのか戸惑っています。OnPaint()して  その過程での結果が出たら、次の  Case(10)の動作をさせるということ位しか分かっていない。
適切な時間とは描画の所要時間でしょうか?20mmsec程度ではないかと思います。
>せめてソフトのリンク先でも提示してみては?
このソフト全体はいろいろの方のの支援で作成したものです。OmPaint()はほとんど小生が作成しました。

編集 削除
仲澤@失業者  2011-07-04 10:21:24  No: 72787  IP: 192.*.*.*

少し動揺しています(vv;)。はんにゃさんの発言に
>#define TIMER_INTERVAL 0 とあります
とありました。また当然SetTimer()の第2引数が何であるか程度は
理解できているとの判断ですが間違っていますか。

編集 削除
仲澤@失業者  2011-07-04 10:30:05  No: 72788  IP: 192.*.*.*

当たり前ですが、CWnd::SetTimer()の話です。念のため(vv;)。

編集 削除