各位大虾,小弟初学VC,有谁能指点一下定时器的作用?谢谢!

解决方案 »

  1.   

    Creating a Timer
    The following example uses the SetTimer function to create two timers. The first timer is set for every 10 seconds, the second for every 5 minutes. // Set two timers. 
     
    SetTimer(hwnd,             // handle to main window 
        IDT_TIMER1,            // timer identifier 
        10000,                 // 10-second interval 
        (TIMERPROC) NULL);     // no timer callback 
     
    SetTimer(hwnd,             // handle to main window 
        IDT_TIMER2,            // timer identifier 
        300000,                // 5-minute interval 
        (TIMERPROC) NULL);     // no timer callback 
    To process the WM_TIMER messages generated by these timers, add a WM_TIMER case statement to the window procedure for the hwnd parameter. case WM_TIMER: 
     
        switch (wParam) 
        { 
            case IDT_TIMER1: 
                // Process the 10-second timer. 
     
                 return 0; 
     
            case IDT_TIMER2: 
                // Process the 5-minute timer.             return 0; 
        } 
    An application can also create a timer whose WM_TIMER messages are processed not by the main window procedure but by an application-defined callback function, as in the following code sample, which creates a timer and uses the callback function MyTimerProc to process the timer's WM_TIMER messages. // Set the timer. 
     
    SetTimer(hwnd,                // handle to main window 
        IDT_TIMER3,               // timer identifier 
        5000,                     // 5-second interval 
        (TIMERPROC) MyTimerProc); // timer callback 
    The calling convention for MyTimerProc must be based on the TimerProc callback function. If your application creates a timer without specifying a window handle, your application must monitor the message queue for WM_TIMER messages and dispatch them to the appropriate window. Note that GetMessage can return -1 if there is an error.HWND hwndTimer;   // handle to window for timer messages 
    MSG msg;          // message structure 
     
        while (GetMessage(&msg, // message structure 
                NULL,           // handle to window to receive the message 
                NULL,           // lowest message to examine 
                NULL)          // highest message to examine 
               != 0 && GetMessage(&msg, NULL, NULL, NULL) != -1)
        { 
     
            // Post WM_TIMER messages to the hwndTimer procedure. 
     
            if (msg.message == WM_TIMER) 
            { 
                msg.hwnd = hwndTimer; 
            } 
     
            TranslateMessage(&msg); // translates virtual-key codes 
            DispatchMessage(&msg);  // dispatches message to window 
        } 
      

  2.   

    --------------------------------Using Timer Functions to Create a Mousetrap
    Sometimes it is necessary to prevent more input while you have a cursor on the screen. One way to accomplish this is to create a special routine that traps mouse input until a specific event occurs. Many developers refer to this routine as "building a mousetrap." The following example uses the SetTimer and KillTimer functions to create a simple mousetrap. SetTimer creates a timer that sends a WM_TIMER message every 10 seconds. Each time the application receives a WM_TIMER message, it records the cursor location. If the current location is the same as the previous location and the application's main window is minimized, the application moves the cursor to the icon. When the application closes, KillTimer stops the timer. HICON hIcon1;               // icon handle 
    POINT ptOld;                // previous cursor location 
    UINT uResult;               // SetTimer's return value 
    HINSTANCE hinstance;        // handle to current instance 
     
    //
    // Perform application initialization here. 
    //
     
    wc.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(400)); 
    wc.hCursor = LoadCursor(hinstance, MAKEINTRESOURCE(200)); 
     
    // Record the initial cursor position. 
     
    GetCursorPos(&ptOld); 
     
    // Set the timer for the mousetrap. 
     
    uResult = SetTimer(hwnd,             // handle to main window 
        IDT_MOUSETRAP,                   // timer identifier 
        10000,                           // 10-second interval 
        (TIMERPROC) NULL);               // no timer callback 
     
    if (uResult == 0) 

        ErrorHandler("No timer is available."); 

     
    LONG APIENTRY MainWndProc( 
        HWND hwnd,          // handle to main window 
        UINT message,       // type of message 
        WPARAM  wParam,     // additional information 
        LPARAM  lParam)     // additional information 

     
        HDC hdc;        // handle to device context 
        POINT pt;       // current cursor location 
        RECT rc;        // location of minimized window 
     
        switch (message) 
        { 
            //
            // Process other messages. 
            // 
     
            case WM_TIMER: 
            // If the window is minimized, compare the current 
            // cursor position with the one from 10 seconds 
            // earlier. If the cursor position has not changed, 
            // move the cursor to the icon. 
     
                if (IsIconic(hwnd)) 
                { 
                    GetCursorPos(&pt); 
     
                    if ((pt.x == ptOld.x) && (pt.y == ptOld.y)) 
                    { 
                        GetWindowRect(hwnd, &rc); 
                        SetCursorPos(rc.left, rc.top); 
                    } 
                    else 
                    { 
                        ptOld.x = pt.x; 
                        ptOld.y = pt.y; 
                    } 
                } 
     
                return 0; 
     
            case WM_DESTROY: 
     
            // Destroy the timer. 
     
                KillTimer(hwnd, IDT_MOUSETRAP); 
                PostQuitMessage(0); 
                break; 
     
            //
            // Process other messages. 
            // 
     

    Although the following example also creates a mousetrap, it processes the WM_TIMER message through the application-defined callback function MyTimerProc, rather than through the application's message queue. UINT uResult;               // SetTimer's return value 
    HICON hIcon1;               // icon handle 
    POINT ptOld;                // previous cursor location 
    HINSTANCE hinstance;        // handle to current instance 
     
    //
    // Perform application initialization here. 
    //
     
    wc.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(400)); 
    wc.hCursor = LoadCursor(hinstance, MAKEINTRESOURCE(200)); 
     
    // Record the current cursor position. 
     
    GetCursorPos(&ptOld); 
     
    // Set the timer for the mousetrap. 
     
    uResult = SetTimer(hwnd,      // handle to main window 
        IDT_MOUSETRAP,            // timer identifier 
        10000,                    // 10-second interval 
        (TIMERPROC) MyTimerProc); // timer callback 
     
    if (uResult == 0) 

        ErrorHandler("No timer is available."); 

     
    LONG APIENTRY MainWndProc( 
        HWND hwnd,          // handle to main window 
        UINT message,       // type of message 
        WPARAM  wParam,     // additional information 
        LPARAM   lParam)    // additional information 

     
        HDC hdc;            // handle to device context 
     
        switch (message) 
        { 
        // 
        // Process other messages. 
        // 
     
            case WM_DESTROY: 
            // Destroy the timer. 
     
                KillTimer(hwnd, IDT_MOUSETRAP); 
                PostQuitMessage(0); 
                break; 
     
            //
            // Process other messages. 
            // 
     

     
    // MyTimerProc is an application-defined callback function that 
    // processes WM_TIMER messages. 
     
    VOID CALLBACK MyTimerProc( 
        HWND hwnd,        // handle to window for timer messages 
        UINT message,     // WM_TIMER message 
        UINT idTimer,     // timer identifier 
        DWORD dwTime)     // current system time 

     
        RECT rc; 
        POINT pt; 
     
        // If the window is minimized, compare the current 
        // cursor position with the one from 10 seconds earlier. 
        // If the cursor position has not changed, move the 
        // cursor to the icon. 
     
        if (IsIconic(hwnd)) 
        { 
            GetCursorPos(&pt); 
     
            if ((pt.x == ptOld.x) && (pt.y == ptOld.y)) 
            { 
                GetWindowRect(hwnd, &rc); 
                SetCursorPos(rc.left, rc.top); 
            } 
            else 
            { 
                ptOld.x = pt.x; 
                ptOld.y = pt.y; 
            } 
        } 
    }