3

画面上に 01:02 のようなカウント ダウン タイマーを作成するというアイデアがありました (フルサイズ)。一つは、どうやって始めたらいいのか全く分からないということです。

私は基本的な c/c++、win32 API、および少しの gdi を知っています。

これを開始する方法についての指針はありますか?私のプログラムは、コンピューターを大きなストップウォッチにするようなものです(ただし、機能が追加されています)

コードを求めるのではなく、これを開始する方法についてのいくつかのアイデア/入門書です。主に Web の作業を行っているため、win プログラミングに少し慣れていません。

どんなアイデアでも大歓迎です

ありがとう

注: 速度のために、これを c/c++ で行う必要があると思います。私のストップウォッチ プログラムは、p3 800 mhz のような非常に遅い PC で実行されるため、速度は非常に重要です。

4

3 に答える 3

3

Windowsメッセージ処理とWin32APIの経験がある場合は、これで開始できます。

LRESULT WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
  HDC hdc; 
  PAINTSTRUCT ps; 
  RECT r; 
  char szBuffer[200]; 
  static int count = 120; 
  int seconds = 0;
  int minutes = 0;
  int hours  = 0;

  switch (message) { 
  case WM_CREATE: 
    // create a 1 second timer 
    SetTimer (hwnd, ID_TIMER, 1000, NULL); 
    return 0;      

  case WM_PAINT:
    if(count > 0)
    {
        hdc = BeginPaint (hwnd, &ps); 
        GetClientRect (hwnd, &r);
        hours = count / 3600;
        minutes = (count / 60) % 60;
        seconds = count % 60;
        wsprintf (szBuffer, "Hours: %d Minutes: %d Seconds: %d", hours, minutes, seconds); 
        DrawText (hdc, szBuffer, -1, &r, DT_LEFT); 
        EndPaint (hwnd, &ps); 
    }
    else
    {
        SendMessage (hwnd, WM_CLOSE, 0, 0L)
    }
    return 0; 

  case WM_TIMER: 
    count--;       
    InvalidateRect (hwnd, NULL, TRUE);
    return 0;        

  case WM_DESTROY: 
    KillTimer (hwnd, ID_TIMER); 
    PostQuitMessage (0); 
    return 0; 
  }  /* end switch */ 
 } 

タイマーの使用に関する適切なリンクは次のとおりです。

タイマーの使用

于 2009-01-27T18:48:13.057 に答える
0

タイマーを作成し、アプリケーションにペイントメッセージを送信してタイマーイベントに応答させます。アプリが終了したら、必ずタイマーを削除してください。

于 2009-01-27T18:08:23.667 に答える
0

時計は 1 秒あたり 1 画面変更で動作します。800MHz の CPU は、毎秒約 8 億の命令を処理します。これは必要以上に約 7 億 9900 万であるため、効率は問題になりません。ブラウザ内の Jvascript でも機能します。ただし、C または C++ が不適切であるという意味ではありません。

Win32 をプログラミングする最も簡単な方法は、サポート ライブラリを使用することです。wxWidgets と Qt は良い選択であり、どちらも無料です。ナットとボルトの面でかなり節約できます。基本的には、テキスト ボックス オブジェクトとタイマー オブジェクトを含む Window オブジェクトを作成し、タイマー ティックをテキスト更新に配線するだけです。

于 2009-01-29T10:43:36.460 に答える