• ベストアンサー

MFCのタイマーのつかい方を教えてください

タイマーのつかい方が今ひとつ分かりません。 MFCでタイピングのゲームを作成しているのですが、 25問を解き、正解だった場合もしくは制限時間を超えてしまった場合、次の問題を表示したいと思っております。 下記がプログラム内容です。 void CProgramView::Loop1(CDC* pDC) { CProgramDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if((m_nRight<26)|(0<m_nRight)) { m_nRight=0; //正解数 m_nQuestion=1; //問題数 } Haikei(pDC); //問題表示領域の枠表示 Tokei(pDC); //時計の秒針が表示される枠表示 Moji(pDC); //問題文表示 OnChar(ch, count,flags); //入力 if(m_fTimer==FALSE) { SetTimer(123,250,NULL); //タイマーをセット if(m_nQuestion<26) //25問以上問題を解いていないケース { m_fTimer = FALSE; } else m_fTimer = TRUE; //全問解いた場合 } Loop0(pDC); //秒針の描画クラス if(m_nx==715) //タイムアウトだった場合 { KillTimer(123); NGPaper(pDC); m_nQuestion++; //問題をカウント m_sAnser.Empty(); //回答文字列をクリア pDoc->GetNextSet(); //次の問題を取得する InvalidateRect(NULL); } if(m_nQuestion<m_nCount) //正解だった場合 { KillTimer(123); //タイマーを切る Tokei(pDC); //秒針の画像を消すために時計の画面を再描画 Right(pDC); //正解した場合の画像を描画 Haikei(pDC); //問題文・回答を消すために問題表示領域の枠を再描画 PartsPaper1(pDC); //正解した場合の壁紙を表示 m_nQuestion++; //問題数をカウント m_sAnser.Empty(); //回答文字列をクリアする pDoc->GetNextSet(); //次の問題を取得する InvalidateRect(NULL); } } そして、この動作を25問、解くまでループさせる関数として以下の関数を作成しました。 void CProgramView::Loop2(CDC* pDC) { if(m_fTimer==FALSE) { Loop1(pDC); } } //タイマーの内容 void CProgramView::OnTimer(UINT nIDEvent) { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください if(nIDEvent == 123) { InvalidateRect(NULL); } CView::OnTimer(nIDEvent); } しかし、実際にこのプログラムを実行すると入力し、正解する間は次の問題が表示されるのですが、タイマーが切れません。 そして、制限時間になるとそこまで解いていた問題から凄い勢いで描画が始まり、止まりません。 おそらくタイマーが正常に使えていないという可能性が考えられるのですが・・・。 希望としては、25問を順次解き、解き終わった後は画像を描画し、次の問題を表示したいのですが、どうしたら良いか教えてください。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

Windowsアプリの場合 WM_何とかといったメッセージをWindowsから受け取って動作する仕組みになっています ボタンを押したのであれば WM_COMMANDとどのボタンかのパラメータ 再描画なら WM_PAINTといった具合です このメッセージポンプは CWinAppの派生クラスに実装されています ですからボタンを押した際の処理を OnButton1 などのイベントハンドラと メッセージ振り分けようのメッセージマップでといった具合でMFCは構成されています このポンプは1つ(または複数)の関数から抜け出た後に戻ることになっています 関数内ではポンプ機能は働きません void OnButton1() {   CString ss;   for( int n = 0; n <= 100; n++ ) {     ss.Format( "%d", n );     m_Static1.SetWindowText( ss );   } } といった関数があった場合 作者は ラベルの表示を 0から100まで変化させたかったとしても 実際には 100しか表示されないということになります なぜなら コントロールの再描画がこの関数の中では一切そのチャンスがないからです // ボタンの押した時は カウンタをリセット、フラグをセット、タイマーをセットするだけ void OnButton1() {   if ( m_bflag == FALSE ) {     m_myCnt = 0;     SetTimer( 100, 500, NULL );   }   m_myFlag = TRUE; } //ここでメッセージポンプへ返る // 500msごとに呼び出されるタイマーイベントでラベルへの設定を変更する void OnTimer( UINT nIDEvent ) {   if ( nIDEvent == 100 ) {     CSTring ss;     ss.Format( "%d" , m_myCnt );     // ラベルへデータを設定     m_Static1.SetWindowText( ss );     myCnt++;     if ( myCnt == 100 ) {       // カウンタが終了値になったなので タイマーを止め       // フラグをリセット       KillTimer( 100 );       m_bFlag = FALSE;     }   } } //次のイベント発生のためここでメッセージポンプへ返る といった具合に作成します

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Windowsのタイマーを使うのであれば メッセージポンプを動作させないといけないと思います メッセージポンプとはウィンドウズの基本システムです GetMessageやPeekMessage、DiapatchMessage/TranslateMessage などで構成します MFCを使うなら AfxGetApp()->PumpMessage(); でいいようです 流れとしては 1) 問題文の選定 1-2) タイマーを設定 SetTimer 2) 入力値のチェック 2-1) 正解/不正解時のカウント 2-2) タイマーの停止 2-3) 25問未満の場合 1)へ戻って処理続行 3) タイマーイベントで時間切れの処理 3-1) 25問未満の場合 1)へ戻って処理続行 といった関数を用意して、それぞれの処理後関数から抜けるようにしましょう

nanami_wic
質問者

補足

ご解答ありがとうございます。 メッセージポンプ・・・!?根本的な問題が解決していないのだと気付かされました。 そこで大変、申し訳ないのですが、具体的なメッセージポンプの利用方法を教えていただけないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★よく読んでいませんが…。 ・単純に経過時間を計測したいのなら GetTickCount() 関数を使います。  (他にもGetTickCount64、timeGetTime、QueryPerformanceCounterなど) サンプル: DWORD m_dwStart; ←メンバ変数に加える // 問題の出題開始時 m_dwStart = GetTickCount(); // 問題の出題終了時 DWORD dwDiff = (GetTickCount() - m_dwStart); if ( dwDiff < (3 * 60 * 1000) ){  3分以内ならこちらで処理 } else{  3分以上ならこちらで処理 } このような感じで分岐すれば良いでしょう。

nanami_wic
質問者

お礼

ご解答ありがとうございます。 言葉が足りなく申し訳ございません。 時間計測がしたいというよりも、時間経過後の再度、最初の動作に戻り、ループさせたいのです。 お手数をおかけし申し訳ございません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MFCプログラミング

    MFCのダブルバッファリングを用いて画面を切り替えるプログラムを作ったのですが 画面がちらついてしまいます、どう修正すればよいか教えてください // CgraphView 描画 void CgraphView::OnDraw(CDC* pDC) { CgraphDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: この場所にネイティブ データ用の描画コードを追加します。 CRect myRect; GetClientRect(myRect); if(background_color == 0) pDC->FillSolidRect(myRect, RGB(255, 255, 255)); else if(background_color == 1) pDC->FillSolidRect(myRect, RGB(153, 204, 255)); else pDC->FillSolidRect(myRect, RGB(255, 153, 204)); //ダブルバッファに関するコード CRect rc; GetClientRect(&rc); bkDC.CreateCompatibleDC(pDC); bkBMP.CreateCompatibleBitmap(pDC, rc.right, rc.bottom); CBitmap Bitmap, *pOldBitmap; pOldBitmap = bkDC.SelectObject(&bkBMP); //これから、すべての描画は、裏画面bkDCにおいて行う bkDC.FillSolidRect(rc, RGB(255, 255, 255)); int x, y, sx, sy; if(draw_state == 0) { bkDC.SetTextColor(RGB(0, 0, 0)); bkDC.TextOut(400, 500, _T("Start")); sx = 128;//表示するビットマップの横の大きさ sy = 128;//表示するビットマップの縦の大きさ y = 300;//表示するビットマップの左上の頂点のy座標 x = 50; draw_school(x, y, sx, sy); x = 200; draw_health(x, y, sx, sy); x = 350; draw_environment(x, y, sx, sy); } else if(draw_state == 1) { CRect myRect; GetClientRect(myRect); pDC->FillSolidRect(myRect, RGB(255, 255, 255)); } //裏画面bkDCにおいて、すべての描画を行った後 //裏画面を表画面に送る pDC->BitBlt(0, 0, rc.right, rc.bottom, &bkDC, 0, 0, SRCCOPY); bkDC.SelectObject(pOldBitmap); //裏画面を消去 bkBMP.DeleteObject(); bkDC.DeleteDC(); void CgraphView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。 bitmap[0].LoadBitmap(IDB_BITMAP1); bitmap[1].LoadBitmap(IDB_BITMAP2); bitmap[2].LoadBitmap(IDB_BITMAP3); bitmap[3].LoadBitmap(IDB_BITMAP4); bitmap[4].LoadBitmap(IDB_BITMAP5); bitmap[5].LoadBitmap(IDB_BITMAP6); Bmp_ID = 0; //タイマーをスタート SetTimer(ID_BITMAP, TIMER_MS_BITMAP, NULL); //画面再描画のタイマーをスタートする SetTimer(ID_REDRAW, TIMER_MS_FPS, NULL); Bmp_ID = 0; } void CgraphView::OnTimer(UINT_PTR nIDEvent) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 if(nIDEvent == ID_BITMAP) Bmp_ID = (Bmp_ID+1) % 2; if(nIDEvent == ID_REDRAW) InvalidateRect(NULL, FALSE); CView::OnTimer(nIDEvent); } void CgraphView::OnDestroy() { CView::OnDestroy(); // TODO: ここにメッセージ ハンドラ コードを追加します。 KillTimer(ID_BITMAP); KillTimer(ID_REDRAW); } void CgraphView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 mouse_x = point.x; mouse_y = point.y; if(draw_state == 0) { if(mouse_x > 400 && mouse_y > 500) { draw_state = 1; } } CView::OnLButtonDown(nFlags, point); } BOOL CgraphView::OnEraseBkgnd(CDC* pDC) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 return TRUE; //return CView::OnEraseBkgnd(pDC); }

  • win32api 画面のちらつき

    win32api ビットマップを描画したとき、タイマーで少しずつ動かしているのですが、 画面がかなりちらつきます。   調べても、イマイチわからなくてどうすればいいかわかりません。 是非、わかりやすく教えていただきたいです。   タイマーの中身です。 ugokuはタイマーがあるかないかを判断するためにいれました。 なかなかいい方法が見つからなかったので。 playermukiはそのままです。 case WM_TIMER:  ugoku=1; if(playermuki==1){ playerX-=3; InvalidateRect(VisualWnd,NULL,TRUE); }else if(playermuki==2){ playerX+=3; InvalidateRect(VisualWnd,NULL,TRUE); }else if(playermuki==3){ playerY+=3; InvalidateRect(VisualWnd,NULL,TRUE); }else if(playermuki==4){ playerY-=3; InvalidateRect(VisualWnd,NULL,TRUE); } break; また、タイマーをセットするとき case WM_KEYDOWN: if(wParam==VK_RIGHT){ playermuki=1; if(ugoku==0){ SetTimer(VisualWnd,ID_T_UGOKI,50,NULL); } }else if(wParam==VK_LEFT){ playermuki=2; if(ugoku==0){ SetTimer(VisualWnd,ID_T_UGOKI,50,NULL); } }else if(wParam==VK_UP){ playermuki=3; if(ugoku==0){ SetTimer(VisualWnd,ID_T_UGOKI,50,NULL); } }else if(wParam==VK_DOWN){ playermuki=4; if(ugoku==0){ SetTimer(VisualWnd,ID_T_UGOKI,50,NULL); } } return 0; タイマーを切るとき case WM_KEYUP: if(wParam==VK_RIGHT){ KillTimer(VisualWnd,ID_T_UGOKI); ugoku=0; }else if(wParam==VK_LEFT){ KillTimer(VisualWnd,ID_T_UGOKI); ugoku=0; }else if(wParam==VK_UP){ KillTimer(VisualWnd,ID_T_UGOKI); ugoku=0; }else if(wParam==VK_DOWN){ KillTimer(VisualWnd,ID_T_UGOKI); ugoku=0; } return 0;

  • CDCオブジェクトの作成について

    // あまり意味はないのですが、 //CDCのオブジェクトを宣言して、 //そこへ図形を描画して、 //クライエント領域にBitBltするときは、 //どうすればいいですか? //CreateCompatibleDCが関係していると思っています。 //ですが、上手く描画できません。 //教えてください、 //お願いします。 void CProject1View::OnDraw(CDC* pDC) { CProject1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; ////////////////////////////////////////////////////// CDC imageDC; CPen pen,*oldpen; pen.CreatePen(PS_SOLID,3,RGB(255,0,0)); imageDC.CreateCompatibleDC(pDC); for(int i=0;i<100;i++) { for(int j=0;j<100;j++) { imageDC.SetPixel(i,j,RGB(128,0,0)); } } oldpen=imageDC.SelectObject(&pen); imageDC.Rectangle(50,50,400,300); pDC->BitBlt(0,0,600,600,&imageDC,0,0,SRCCOPY); imageDC.SelectObject(oldpen); ////////////////////////////////////////////////////// }

  • excel VBA タイマー表示について

    お世話になります。 excelで計算問題のプログラムを組んでいます。 計算時間を表示しながら、問題を解くようにしたいと考えています。 タイマー表示を下記で行っていますが、セルに文字を入力するとタイマーが止まってしまいます。タイマーを動作させながら、文字入力を行うことは、Excelでは無理でしょうか? キー入力中、タイマー停止であれば、達成済みです。 動作は次のようにしています。 1)問題スタートで、下記タイマーを起動 2)答えをキー入力しEnterキーで答え合わせ 3)指定問題数終了で、タイマー停止 4)正解率、トータル時間を表示 Do Until blnStop = True Cells(3, 10) = Int((Timer - dblTimer) * 100) / 100 DoEvents Loop

  • Visual Studioのタイマ処理を使って描画を行うプログラムを

    Visual Studioのタイマ処理を使って描画を行うプログラムを 作成したのですがうまくいきません. プログラムの開発環境はWindows XP SP2でVC++6.0 外部に接続したセンサからのデータを50Hzで サンプリングして そのデータを元に描画を行う予定なのですが計測時間が100秒を超えると 異常終了してしまいます. 原因がよく分かりません. どうしたらよいのでしょうか? void CMyDlg::OnSamplingStart() { i=0; // サンプリング用タイマ開始 //なぜか12にするとちょうど50Hzでサンプリングする SetTimer(1,12,NULL); // 0.02秒毎タイマ割り込み,50Hz } void CMyDlg::OnTimer(UINT nIDEvent) { /* ここで,センサからのデータをサンプリングし,いろいろな計算をする. */ CDC* pDC=m_pict.GetDC(); CRect myRECT; m_pict.GetClientRect(myRECT); pDC->FillSolidRect(myRECT, RGB(255,255,255)); CPen BlueBoldPen,*OldBlueBoldPen; BlueBoldPen.CreatePen(PS_SOLID,5,RGB(0,0,255)); OldBlueBoldPen=pDC->SelectObject(&BlueBoldPen); pDC->MoveTo((int)(X0/10),(int)(Y0/10)); pDC->LineTo((int)(L3_x[i]/10),(int)(L3_y[i]/10)); pDC->LineTo((int)(C7_x[i]/10),(int)(C7_y[i]/10)); // ペンを元に戻す pDC->SelectObject(OldBlueBoldPen); BlueBoldPen.DeleteObject(); m_time=(double)i/50; UpdateData(FALSE); i=i+1; CDialog::OnTimer(nIDEvent); } 計測終了はボタンを押して終了します. どうが具体的な解決策を教えてください.

  • 画像の印刷について

    環境はWIN98 VC++6.0 MFCです。 初めて印刷に挑戦します。 TextOut()で書いた文字は印刷プレビューでちゃんと表示されましたが、以下のようにして取りこんだ画像を印刷プレビューで見ても何も表示されません。 どうしたら印刷できるようになりますか? void CXxxView::OnDraw(CDC* pDC) { CXxxDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: この場所にネイティブ データ用の描画コードを追加します。 CDC myDC; CBitmap myBMP; myBMP.LoadBitmap(IDB_BITMAP3); myDC.CreateCompatibleDC(pDC); CBitmap* oldBMP=myDC.SelectObject(&myBMP); pDC->BitBlt(10,10,60,100,&myDC,0,0,SRCCOPY); myDC.SelectObject(oldBMP); }

  • OnTimerの使い方

    <環境> WIN98 VC++6.0 MFC  こんな感じで3秒経過するとメッセージボックスを表示していますが、 メッセージボックスのOKボタンを何度も押さないとメッセージボックスが 閉じない時が有ります。 (どうやらメッセージボックスが何個も作られている) どうしてなのでしょうか? BOOL CAbcDlg::OnInitDialog() { // TODO: 特別な初期化を行う時はこの場所に追加してください。 SetTimer(1, 1000, NULL); m_cnttime = 0; 略 void CAbcDlg::OnTimer(UINT nIDEvent) { m_cnttime++; if ( m_cnttime >= 3 ) { AfxMessageBox(""); KillTimer(nIDEvent); } CDialog::OnTimer(nIDEvent); }

  • タイマーと表示の連動の仕方を

    私はiPhoneSDK、xcodeを使い研究を行っています。objective-Cに慣れていないため、つまずいているところがあります。どうかご協力をお願いします。 教えてもらいたいのは、タイマーと文字の表示を連動させたいと言うことです。 タイマーアプリは以下のサイトを参照して作っています。 http://d.hatena.ne.jp/moto_maka/20081210/1228855024 これに、文字を表示するLabelを加え、タイマーが例えば5.000を刻んだら文字を表示するということをしたいです。 Labelの追加はすでに終えています。やりたいのは ”start”をタッチ{      (タイマーの動作、すでに書かれている)      if(タイマーが5.000を刻んだ){         文字を表示(ここの書き方もOK)      } } として、このifのところを仕上げたいのですがうまくいきません。文法がおかしいか、変数の設定が原因か。実装しても文字が表示されない(あるいはタッチと同時に表示)です。そのファイル(~.m)も添付しておきます。(ただし、そちらでは-5.000からスタートして0.000で表示したいというように作っています) なにとぞご協力をお願いします。

  • コンパイルエラー

    int m_nTypeCounter=0; と定義した変数を使い if((pDoc->m_sRomaji).GetAt(&m_nTypeCounter)==m_sStr) { m_sAnser += m_sStr; m_nTypeCounter++; } とした際、コンパイルエラーが 『C:\project\2008年課題\コピー ~ 問題・時計領域のみ再描画tokeidouga\ProgramView.cpp(536) : error C2664: 'GetAt' : 1 番目の引数を 'int *' から 'int' に変換できません。 (新しい機能 ; ヘルプを参照)』 この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。』 と表示されます。 どうしたら良いのでしょうか。 よろしくお願いします。

  • ダブルバッファについて

    スタート画面にBitmapを用いたアニメーションを用いて、次の場面に移動したいのですが 実行すると画面がちかちかしてしまいます。どう直せばよいか教えてもらえると助かります プログラムはVisualStudio2008のMFCでやっています #include "stdafx.h" #include "graph.h" #include "graphDoc.h" #include "graphView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif //全域変数 CDC bkDC; CBitmap bkBMP; #define ID_REDRAW 30 #define TIMER_MS_FPS 1000/30 #define ID_BITMAP 60 #define TIMER_MS_BITMAP 300 #include <math.h> int draw_state = 0; float mouse_x = -1.0, mouse_y = -1.0; // CgraphView IMPLEMENT_DYNCREATE(CgraphView, CView) BEGIN_MESSAGE_MAP(CgraphView, CView) // 標準印刷コマンド ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview) ON_COMMAND(ID_BK_WHITE, &CgraphView::OnBkWhite) ON_COMMAND(ID_BK_BLUE, &CgraphView::OnBkBlue) ON_COMMAND(ID_BK_PINK, &CgraphView::OnBkPink) ON_WM_TIMER() ON_WM_DESTROY() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() // CgraphView コンストラクション/デストラクション CgraphView::CgraphView() : background_color(0) , draw_state(0) , Bmp_ID(0) { // TODO: 構築コードをここに追加します。 background_color = 0; int draw_state = 0; } CgraphView::~CgraphView() { } BOOL CgraphView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを // 修正してください。 return CView::PreCreateWindow(cs); } // CgraphView 描画 void CgraphView::OnDraw(CDC* pDC) { CgraphDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: この場所にネイティブ データ用の描画コードを追加します。 //ダブルバッファに関するコード CRect rc; GetClientRect(&rc); bkDC.CreateCompatibleDC(pDC); bkBMP.CreateCompatibleBitmap(pDC, rc.right, rc.bottom); bkDC.SelectObject(&bkBMP); //描画は、裏画面bkDCにおいて行う bkDC.FillSolidRect(rc, RGB(153, 204, 255)); int x, y, sx, sy; if(draw_state == 0) { bkDC.SetTextColor(RGB(255, 255, 255)); bkDC.TextOut(480, 580, _T("Start")); sx = 128; sy = 128; y = 340; x = 200; draw_school(x, y, sx, sy);//定義は省略 x = 400; draw_health(x, y, sx, sy);//定義は省略 x = 600; draw_environment(x, y, sx, sy);//定義は省略 } else if(draw_state == 1) { CRect myRect; GetClientRect(myRect); pDC->FillSolidRect(myRect, RGB(0, 0, 0)); } //裏画面を表画面に送る //pDC->BitBlt(0, 0, rc.right, rc.bottom, &bkDC, 0, 0, SRCCOPY); //裏画面を消去 bkBMP.DeleteObject(); bkDC.DeleteDC(); //実行画面のプログラムを省略    void CgraphView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。 bitmap[0].LoadBitmap(IDB_BITMAP1); bitmap[1].LoadBitmap(IDB_BITMAP2); bitmap[2].LoadBitmap(IDB_BITMAP3); bitmap[3].LoadBitmap(IDB_BITMAP4); bitmap[4].LoadBitmap(IDB_BITMAP5); bitmap[5].LoadBitmap(IDB_BITMAP6); //タイマーをスタート SetTimer(ID_BITMAP, TIMER_MS_BITMAP, NULL); //画面再描画のタイマーをスタートする SetTimer(ID_REDRAW, TIMER_MS_FPS, NULL); Bmp_ID = 0; } void CgraphView::OnTimer(UINT_PTR nIDEvent) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 if(nIDEvent == ID_BITMAP) Bmp_ID = (Bmp_ID+1) % 2; if(nIDEvent == ID_REDRAW) InvalidateRect(NULL, FALSE); CView::OnTimer(nIDEvent); } void CgraphView::OnDestroy() { CView::OnDestroy(); // TODO: ここにメッセージ ハンドラ コードを追加します。 KillTimer(ID_BITMAP); KillTimer(ID_REDRAW); } void CgraphView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 mouse_x = point.x; mouse_y - point.y; if(draw_state == 0) { if(mouse_x > 420 && mouse_y > 500) { draw_state = 1; } } CView::OnLButtonDown(nFlags, point); } //以下は関数の定義なので省略

このQ&Aのポイント
  • 特打25周年キャンペーンでいただいた特打をWin11へインストールし、起動するとDirector Playerエラー「スクリプトエラー。継続しますか?」のエラー画面が表示されて正常に起動しない。
  • 修復で再セットアップを試みたが結果は同じ。メモリーも8GB空きがあります。
  • 同エラーで解決された方。アドバイスをお願い致します。
回答を見る

専門家に質問してみよう