#include <windows.h>
#include <math.h>#define ID_TIMER    1
#define TWOPI       (2 * 3.14159)LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int cyChar ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("Cloick") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;
     
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("Clock"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
     
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
     
     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}void SetIsotropic (HDC hdc, int cxClient, int cyClient)
{
     SetMapMode (hdc, MM_ISOTROPIC) ;
     SetWindowExtEx (hdc, 1000, 1000, NULL) ;
     SetViewportExtEx (hdc, cxClient / 2, -cyClient / 2, NULL) ;
     SetViewportOrgEx (hdc, cxClient / 2,  cyClient / 2, NULL) ;
}void RotatePoint (POINT pt[], int iNum, int iAngle)
{
     int   i ;
     POINT ptTemp ;
     
     for (i = 0 ; i < iNum ; i++)
     {
          ptTemp.x = (int) (pt[i].x * cos (TWOPI * iAngle / 360) +
               pt[i].y * sin (TWOPI * iAngle / 360)) ;
          
          ptTemp.y = (int) (pt[i].y * cos (TWOPI * iAngle / 360) -
               pt[i].x * sin (TWOPI * iAngle / 360)) ;
          
          pt[i] = ptTemp ;
     }
}void DrawClock (HDC hdc)
{
     int   iAngle ;
     POINT pt[3] ;
     
     for (iAngle = 0 ; iAngle < 360 ; iAngle += 6)
     {
          pt[0].x =   0 ;
          pt[0].y = 900 ;
          
          RotatePoint (pt, 1, iAngle) ;
          
          pt[2].x = pt[2].y = iAngle % 5 ? 33 : 100 ;
          
          pt[0].x -= pt[2].x / 2 ;
          pt[0].y -= pt[2].y / 2 ;
          
          pt[1].x  = pt[0].x + pt[2].x ;
          pt[1].y  = pt[0].y + pt[2].y ;
          
          SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;
          
          Ellipse (hdc, pt[0].x, pt[0].y, pt[1].x, pt[1].y) ;
     }
}void DrawHands (HDC hdc, SYSTEMTIME * pst, BOOL fChange)
{
     static POINT pt[3][5] = { 0, -150, 100, 0, 0, 600, -100, 0, 0, -150,
                               0, -200,  50, 0, 0, 800,  -50, 0, 0, -200,
                               0,    0,   0, 0, 0,   0,    0, 0, 0,  800 } ;
     int          i, iAngle[3] ;
     POINT        ptTemp[3][5] ;
     
     iAngle[0] = (pst->wHour * 30) % 360 + pst->wMinute / 2 ;
     iAngle[1] =  pst->wMinute  *  6 ;
     iAngle[2] =  pst->wSecond  *  6 ;
     
     memcpy (ptTemp, pt, sizeof (pt)) ;
     
     for (i = fChange ? 0 : 2 ; i < 3 ; i++)
     {
          RotatePoint (ptTemp[i], 5, iAngle[i]) ;
          
          Polyline (hdc, ptTemp[i], 5) ;
     }
}// ------------------------------------------------
// Window 1: Display increasing sequence of numbers
// ------------------------------------------------
LRESULT CALLBACK WndProc1 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static int        cxClient, cyClient ;
     static SYSTEMTIME stPrevious ;
     BOOL              fChange ;
     HDC               hdc ;
     PAINTSTRUCT       ps ;
     SYSTEMTIME        st ;
          
     switch (message)
     {
     case WM_CREATE :
          SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
          GetLocalTime (&st) ;
          stPrevious = st ;
          return 0 ;
          
     case WM_SIZE :
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
          return 0 ;
          
     case WM_TIMER :
          GetLocalTime (&st) ;
                    
          fChange = st.wHour   != stPrevious.wHour ||
                    st.wMinute != stPrevious.wMinute ;
          
          hdc = GetDC (hwnd) ;
          
          SetIsotropic (hdc, cxClient, cyClient) ;
          
          SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
          DrawHands (hdc, &stPrevious, fChange) ;
          
          SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
          DrawHands (hdc, &st, TRUE) ;
          
          ReleaseDC (hwnd, hdc) ;
          
          stPrevious = st ;
          return 0 ;
          
     case WM_PAINT :
          hdc = BeginPaint (hwnd, &ps) ;
          
          SetIsotropic (hdc, cxClient, cyClient) ;
          DrawClock    (hdc) ;
          DrawHands    (hdc, &stPrevious, TRUE) ;
          
          EndPaint (hwnd, &ps) ;
          return 0 ;
          
     case WM_DESTROY :
          KillTimer (hwnd, ID_TIMER) ;
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
// ------------------------------------------------------
// Window 2: Display increasing sequence of prime numbers
// ------------------------------------------------------LRESULT CALLBACK WndProc2 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static int        cxClient, cyClient ;
     static SYSTEMTIME stPrevious ;
     BOOL              fChange ;
     HDC               hdc ;
     PAINTSTRUCT       ps ;
     SYSTEMTIME        st ;
          
     switch (message)
     {
     case WM_CREATE :
          SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
          GetLocalTime (&st) ;
          stPrevious = st ;
          return 0 ;
          
     case WM_SIZE :
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
          return 0 ;
          
     case WM_TIMER :
          GetLocalTime (&st) ;
                    
          fChange = st.wHour   != stPrevious.wHour ||
                    st.wMinute != stPrevious.wMinute ;
          
          hdc = GetDC (hwnd) ;
          
          SetIsotropic (hdc, cxClient, cyClient) ;
          
          SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
          DrawHands (hdc, &stPrevious, fChange) ;
          
          SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
          DrawHands (hdc, &st, TRUE) ;
          
          ReleaseDC (hwnd, hdc) ;
          
          stPrevious = st ;
          return 0 ;
          
     case WM_PAINT :
          hdc = BeginPaint (hwnd, &ps) ;
          
          SetIsotropic (hdc, cxClient, cyClient) ;
          DrawClock    (hdc) ;
          DrawHands    (hdc, &stPrevious, TRUE) ;
          
          EndPaint (hwnd, &ps) ;
          return 0 ;
          
     case WM_DESTROY :
          KillTimer (hwnd, ID_TIMER) ;
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
下面还有!!!

解决方案 »

  1.   

    接上面!!!
    // ----------------------------------------------------------
    // Window 3: Display increasing sequence of Fibonacci numbers
    // ----------------------------------------------------------LRESULT CALLBACK WndProc3 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------------
    // Window 4: Display circles of random radii
    // -----------------------------------------LRESULT CALLBACK WndProc4 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
      
     
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------
    // Main window to create child windows
    // -----------------------------------LRESULT APIENTRY WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static HWND    hwndChild[4] ;
         static TCHAR * szChildClass[] = { TEXT ("Child1"), TEXT ("Child2"),
                                           TEXT ("Child3"), TEXT ("Child4") } ;
         static WNDPROC ChildProc[] = { WndProc1, WndProc2, WndProc3, WndProc4 } ;
         HINSTANCE      hInstance ;
         int            i, cxClient, cyClient ;
         WNDCLASS       wndclass ;
         
         switch (message)
         {
         case WM_CREATE:
              hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;
              
              wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
              wndclass.cbClsExtra    = 0 ;
              wndclass.cbWndExtra    = 0 ;
              wndclass.hInstance     = hInstance ;
              wndclass.hIcon         = NULL ;
              wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
              wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
              wndclass.lpszMenuName  = NULL ;
              
              for (i = 0 ; i < 4 ; i++)
              {
                   wndclass.lpfnWndProc   = ChildProc[i] ;
                   wndclass.lpszClassName = szChildClass[i] ;
                   
                   RegisterClass (&wndclass) ;
                   
                   hwndChild[i] = CreateWindow (szChildClass[i], NULL,
                                       WS_CHILDWINDOW | WS_BORDER | WS_VISIBLE,
                                       0, 0, 0, 0, 
                                       hwnd, (HMENU) i, hInstance, NULL) ;
              }
              
              cyChar = HIWORD (GetDialogBaseUnits ()) ;
              SetTimer (hwnd, 1, 1000, NULL) ;
              return 0 ;
              
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              
              for (i = 0 ; i < 4 ; i++)
                   MoveWindow (hwndChild[i], (i % 2) * cxClient / 2,
                                             (i > 1) * cyClient / 2,
                               cxClient / 2, cyClient / 2, TRUE) ;
              return 0 ;
              
         case WM_TIMER:
              for (i = 0 ; i < 4 ; i++)
                   SendMessage (hwndChild[i], WM_TIMER, wParam, lParam) ;
              
              return 0 ;
              
         case WM_CHAR:
              if (wParam == '\x1B')
                   DestroyWindow (hwnd) ;
              
              return 0 ;
              
         case WM_DESTROY:
              KillTimer (hwnd, 1) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  2.   

    这需要多线程吗?处理OnTimer事件就可以了吧!
    开4个定时器啊
      

  3.   

    <深入浅出MFC>的第一个程序例子看一下吧,  就是 绘制矩形那一个 <深入浅出MFC>代码网上到处都是爱莫能助,只能 回这些话了~     好像不用多线程也可以的~
      

  4.   

    开四个定时器,处理OnTimer消息函数.
      

  5.   

    // ------------------------------------------------
    // Window 1: Display increasing sequence of numbers
    // ------------------------------------------------
    LRESULT CALLBACK WndProc1 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              //SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              //KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    // ------------------------------------------------------
    // Window 2: Display increasing sequence of prime numbers
    // ------------------------------------------------------LRESULT CALLBACK WndProc2 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              //SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              //KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  6.   

    // ----------------------------------------------------------
    // Window 3: Display increasing sequence of Fibonacci numbers
    // ----------------------------------------------------------LRESULT CALLBACK WndProc3 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              //SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              //KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------------
    // Window 4: Display circles of random radii
    // -----------------------------------------LRESULT CALLBACK WndProc4 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              //SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
      
     
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              //KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  7.   

    // -----------------------------------
    // Main window to create child windows
    // -----------------------------------LRESULT APIENTRY WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static HWND    hwndChild[4] ;
         static TCHAR * szChildClass[] = { TEXT ("Child1"), TEXT ("Child2"),
                                           TEXT ("Child3"), TEXT ("Child4") } ;
         static WNDPROC ChildProc[] = { WndProc1, WndProc2, WndProc3, WndProc4 } ;
         HINSTANCE      hInstance ;
         int            i, cxClient, cyClient ;
         WNDCLASS       wndclass ;
         
         switch (message)
         {
         case WM_CREATE:
              hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;
              
              wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
              wndclass.cbClsExtra    = 0 ;
              wndclass.cbWndExtra    = 0 ;
              wndclass.hInstance     = hInstance ;
              wndclass.hIcon         = NULL ;
              wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
              wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
              wndclass.lpszMenuName  = NULL ;
              
              for (i = 0 ; i < 4 ; i++)
              {
                   wndclass.lpfnWndProc   = ChildProc[i] ;
                   wndclass.lpszClassName = szChildClass[i] ;
                   
                   RegisterClass (&wndclass) ;
                   
                   hwndChild[i] = CreateWindow (szChildClass[i], NULL,
                                       WS_CHILDWINDOW | WS_BORDER | WS_VISIBLE,
                                       0, 0, 0, 0, 
                                       hwnd, (HMENU) i, hInstance, NULL) ;
              }
              
              cyChar = HIWORD (GetDialogBaseUnits ()) ;          SetTimer (hwnd, 1, 1000, NULL) ;
      SetTimer (hwnd, 2, 2000, NULL) ;
      SetTimer (hwnd, 3, 3000, NULL) ;
      SetTimer (hwnd, 4, 4000, NULL) ;
              return 0 ;
              
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              
              for (i = 0 ; i < 4 ; i++)
                   MoveWindow (hwndChild[i], (i % 2) * cxClient / 2,
                                             (i > 1) * cyClient / 2,
                               cxClient / 2, cyClient / 2, TRUE) ;
              return 0 ;
              
         case WM_TIMER:
              SendMessage (hwndChild[(int)wParam - 1], WM_TIMER, wParam, lParam) ;
              return 0 ;
              
         case WM_CHAR:
              if (wParam == '\x1B')
                   DestroyWindow (hwnd) ;
              
              return 0 ;
              
         case WM_DESTROY:          KillTimer (hwnd, 1) ;
      KillTimer (hwnd, 2) ;
      KillTimer (hwnd, 3) ;
      KillTimer (hwnd, 4) ;
      
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  8.   

    这是WIN32编程啊。不是MFC吧。
    怎么不用MFC啊?多方便的。
      

  9.   

    //下面是第2种// ------------------------------------------------
    // Window 1: Display increasing sequence of numbers
    // ------------------------------------------------
    LRESULT CALLBACK WndProc1 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              SetTimer (hwnd, 1, 1000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              KillTimer (hwnd, 1) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    // ------------------------------------------------------
    // Window 2: Display increasing sequence of prime numbers
    // ------------------------------------------------------LRESULT CALLBACK WndProc2 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              SetTimer (hwnd, 2, 2000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              KillTimer (hwnd, 2) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  10.   

    // ----------------------------------------------------------
    // Window 3: Display increasing sequence of Fibonacci numbers
    // ----------------------------------------------------------LRESULT CALLBACK WndProc3 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              SetTimer (hwnd, 3, 3000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              KillTimer (hwnd, 3) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------------
    // Window 4: Display circles of random radii
    // -----------------------------------------LRESULT CALLBACK WndProc4 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int        cxClient, cyClient ;
         static SYSTEMTIME stPrevious ;
         BOOL              fChange ;
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
              
         switch (message)
         {
         case WM_CREATE :
              SetTimer (hwnd, 4, 4000, NULL) ;
              GetLocalTime (&st) ;
              stPrevious = st ;
              return 0 ;
              
         case WM_SIZE :
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_TIMER :
              GetLocalTime (&st) ;
                        
              fChange = st.wHour   != stPrevious.wHour ||
                        st.wMinute != stPrevious.wMinute ;
              
              hdc = GetDC (hwnd) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              
              SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
              DrawHands (hdc, &stPrevious, fChange) ;
              
              SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
              DrawHands (hdc, &st, TRUE) ;
              
              ReleaseDC (hwnd, hdc) ;
              
              stPrevious = st ;
      
     
              return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetIsotropic (hdc, cxClient, cyClient) ;
              DrawClock    (hdc) ;
              DrawHands    (hdc, &stPrevious, TRUE) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              KillTimer (hwnd, 4) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------
    // Main window to create child windows
    // -----------------------------------LRESULT APIENTRY WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static HWND    hwndChild[4] ;
         static TCHAR * szChildClass[] = { TEXT ("Child1"), TEXT ("Child2"),
                                           TEXT ("Child3"), TEXT ("Child4") } ;
         static WNDPROC ChildProc[] = { WndProc1, WndProc2, WndProc3, WndProc4 } ;
         HINSTANCE      hInstance ;
         int            i, cxClient, cyClient ;
         WNDCLASS       wndclass ;
         
         switch (message)
         {
         case WM_CREATE:
              hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;
              
              wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
              wndclass.cbClsExtra    = 0 ;
              wndclass.cbWndExtra    = 0 ;
              wndclass.hInstance     = hInstance ;
              wndclass.hIcon         = NULL ;
              wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
              wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
              wndclass.lpszMenuName  = NULL ;
              
              for (i = 0 ; i < 4 ; i++)
              {
                   wndclass.lpfnWndProc   = ChildProc[i] ;
                   wndclass.lpszClassName = szChildClass[i] ;
                   
                   RegisterClass (&wndclass) ;
                   
                   hwndChild[i] = CreateWindow (szChildClass[i], NULL,
                                       WS_CHILDWINDOW | WS_BORDER | WS_VISIBLE,
                                       0, 0, 0, 0, 
                                       hwnd, (HMENU) i, hInstance, NULL) ;
              }
              
              cyChar = HIWORD (GetDialogBaseUnits ()) ;
              return 0 ;
              
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              
              for (i = 0 ; i < 4 ; i++)
                   MoveWindow (hwndChild[i], (i % 2) * cxClient / 2,
                                             (i > 1) * cyClient / 2,
                               cxClient / 2, cyClient / 2, TRUE) ;
              return 0 ;
              
         case WM_CHAR:
              if (wParam == '\x1B')
                   DestroyWindow (hwnd) ;
              
              return 0 ;
              
         case WM_DESTROY: 
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  11.   

    补充:
        我已经创建了4个小的子窗口,想在4个子窗口中分别显示4个不同的时钟(显示时间不同)!
    如果用"开四个定时器,处理OnTimer消息函数."来处理!!
    -------这样可以吗!!!SetTimer(1, 1000, NULL);
    SetTimer(2, 3000, NULL);void OnTimer(UINT nIDEvent)
    {
    //这里的nIDEvent对应于计时器ID
    switch(nIDEvent)
    {
    case 1:  
    // 第一个计时器所作动作,比如说更新时间显示等等,
      break;
    case 2:
    // 第二个计时器所作动作,比如说画椭圆等等,
      break;
    }
    }
      

  12.   

    typedef struct  
    {
    int cxClient, cyClient;
    SYSTEMTIME st;
    }THREAD_DATA;THREAD_DATA data1, data2, data3, data4;
    CRITICAL_SECTION cs1, cs2, cs3, cs4;
    // ------------------------------------------------
    // Window 1: Display increasing sequence of numbers
    // ------------------------------------------------
    DWORD WINAPI ThreadFunc1( LPVOID lpParam ) 

    SYSTEMTIME st;
    BOOL fChange;
    HWND hwnd = (HWND)lpParam;
    HDC hdc = GetDC (hwnd) ;

    while(true)
    {
    GetLocalTime (&st) ; EnterCriticalSection(&cs1); fChange = st.wHour   != data1.st.wHour || 
    st.wMinute != data1.st.wMinute ; SetIsotropic (hdc, data1.cxClient, data1.cyClient) ;

    SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
    DrawHands (hdc, &data1.st, fChange) ; data1.st = st; LeaveCriticalSection(&cs1);

    SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
    DrawHands (hdc, &st, TRUE) ; Sleep(1000);
    }

    ReleaseDC (hwnd, hdc) ;    return 0; 
    } LRESULT CALLBACK WndProc1 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
     HANDLE hThread = NULL;
              
         switch (message)
         {
         case WM_CREATE :
              GetLocalTime (&st) ;
              data1.st = st ;   InitializeCriticalSection(&cs1);   hThread = CreateThread(NULL, 0, ThreadFunc1,  (LPVOID)hwnd, 0, NULL);          return 0 ;
              
         case WM_SIZE :   EnterCriticalSection(&cs1);
              data1.cxClient = LOWORD (lParam) ;
              data1.cyClient = HIWORD (lParam) ;
      LeaveCriticalSection(&cs1);          return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
      EnterCriticalSection(&cs1);
              SetIsotropic (hdc, data1.cxClient, data1.cyClient) ;
              DrawHands    (hdc, &data1.st, TRUE) ;
      LeaveCriticalSection(&cs1);   DrawClock(hdc) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              if(hThread != NULL)  CloseHandle( hThread );
      DeleteCriticalSection(&cs1);
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    // ------------------------------------------------------
    // Window 2: Display increasing sequence of prime numbers
    // ------------------------------------------------------
    DWORD WINAPI ThreadFunc2( LPVOID lpParam ) 

    SYSTEMTIME st;
    BOOL fChange;
    HWND hwnd = (HWND)lpParam;
    HDC hdc = GetDC (hwnd) ;

    while(true)
    {
    GetLocalTime (&st) ; EnterCriticalSection(&cs2); fChange = st.wHour   != data2.st.wHour || 
    st.wMinute != data2.st.wMinute ; SetIsotropic (hdc, data2.cxClient, data2.cyClient) ;

    SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
    DrawHands (hdc, &data2.st, fChange) ; data2.st = st; LeaveCriticalSection(&cs2);

    SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
    DrawHands (hdc, &st, TRUE) ; Sleep(1000);
    }

    ReleaseDC (hwnd, hdc) ;    return 0; 
    } LRESULT CALLBACK WndProc2 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
     HANDLE hThread = NULL;
              
         switch (message)
         {
         case WM_CREATE :
              GetLocalTime (&st) ;
              data2.st = st ;   InitializeCriticalSection(&cs2);   hThread = CreateThread(NULL, 0, ThreadFunc2,  (LPVOID)hwnd, 0, NULL);          return 0 ;
              
         case WM_SIZE :   EnterCriticalSection(&cs2);
              data2.cxClient = LOWORD (lParam) ;
              data2.cyClient = HIWORD (lParam) ;
      LeaveCriticalSection(&cs2);          return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
      EnterCriticalSection(&cs2);
              SetIsotropic (hdc, data2.cxClient, data2.cyClient) ;
              DrawHands    (hdc, &data2.st, TRUE) ;
      LeaveCriticalSection(&cs2);   DrawClock(hdc) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              if(hThread != NULL)  CloseHandle( hThread );
      DeleteCriticalSection(&cs2);
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  13.   

    // ----------------------------------------------------------
    // Window 3: Display increasing sequence of Fibonacci numbers
    // ----------------------------------------------------------DWORD WINAPI ThreadFunc3( LPVOID lpParam ) 

    SYSTEMTIME st;
    BOOL fChange;
    HWND hwnd = (HWND)lpParam;
    HDC hdc = GetDC (hwnd) ;

    while(true)
    {
    GetLocalTime (&st) ; EnterCriticalSection(&cs3); fChange = st.wHour   != data3.st.wHour || 
    st.wMinute != data3.st.wMinute ; SetIsotropic (hdc, data3.cxClient, data3.cyClient) ;

    SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
    DrawHands (hdc, &data3.st, fChange) ; data3.st = st; LeaveCriticalSection(&cs3);

    SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
    DrawHands (hdc, &st, TRUE) ; Sleep(1000);
    }

    ReleaseDC (hwnd, hdc) ;    return 0; 
    } LRESULT CALLBACK WndProc3 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
     HANDLE hThread = NULL;
              
         switch (message)
         {
         case WM_CREATE :
              GetLocalTime (&st) ;
              data3.st = st ;   InitializeCriticalSection(&cs3);   hThread = CreateThread(NULL, 0, ThreadFunc3,  (LPVOID)hwnd, 0, NULL);          return 0 ;
              
         case WM_SIZE :   EnterCriticalSection(&cs3);
              data3.cxClient = LOWORD (lParam) ;
              data3.cyClient = HIWORD (lParam) ;
      LeaveCriticalSection(&cs3);          return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
      EnterCriticalSection(&cs3);
              SetIsotropic (hdc, data3.cxClient, data3.cyClient) ;
              DrawHands    (hdc, &data3.st, TRUE) ;
      LeaveCriticalSection(&cs3);   DrawClock(hdc) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              if(hThread != NULL)  CloseHandle( hThread );
      DeleteCriticalSection(&cs3);
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------------
    // Window 4: Display circles of random radii
    // -----------------------------------------DWORD WINAPI ThreadFunc4( LPVOID lpParam ) 

    SYSTEMTIME st;
    BOOL fChange;
    HWND hwnd = (HWND)lpParam;
    HDC hdc = GetDC (hwnd) ;

    while(true)
    {
    GetLocalTime (&st) ; EnterCriticalSection(&cs4); fChange = st.wHour   != data4.st.wHour || 
    st.wMinute != data4.st.wMinute ; SetIsotropic (hdc, data4.cxClient, data4.cyClient) ;

    SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
    DrawHands (hdc, &data4.st, fChange) ; data4.st = st; LeaveCriticalSection(&cs4);

    SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
    DrawHands (hdc, &st, TRUE) ; Sleep(1000);
    }

    ReleaseDC (hwnd, hdc) ;    return 0; 
    } LRESULT CALLBACK WndProc4 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC               hdc ;
         PAINTSTRUCT       ps ;
         SYSTEMTIME        st ;
     HANDLE hThread = NULL;
              
         switch (message)
         {
         case WM_CREATE :
              GetLocalTime (&st) ;
              data4.st = st ;   InitializeCriticalSection(&cs4);   hThread = CreateThread(NULL, 0, ThreadFunc4,  (LPVOID)hwnd, 0, NULL);          return 0 ;
              
         case WM_SIZE :   EnterCriticalSection(&cs4);
              data4.cxClient = LOWORD (lParam) ;
              data4.cyClient = HIWORD (lParam) ;
      LeaveCriticalSection(&cs4);          return 0 ;
              
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
              
      EnterCriticalSection(&cs4);
              SetIsotropic (hdc, data4.cxClient, data4.cyClient) ;
              DrawHands    (hdc, &data4.st, TRUE) ;
      LeaveCriticalSection(&cs4);   DrawClock(hdc) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              if(hThread != NULL)  CloseHandle( hThread );
      DeleteCriticalSection(&cs4);
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }// -----------------------------------
    // Main window to create child windows
    // -----------------------------------LRESULT APIENTRY WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static HWND    hwndChild[4] ;
         static TCHAR * szChildClass[] = { TEXT ("Child1"), TEXT ("Child2"),
                                           TEXT ("Child3"), TEXT ("Child4") } ;
         static WNDPROC ChildProc[] = { WndProc1, WndProc2, WndProc3, WndProc4 } ;
         HINSTANCE      hInstance ;
         int            i, cxClient, cyClient ;
         WNDCLASS       wndclass ;
         
         switch (message)
         {
         case WM_CREATE:
              hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;
              
              wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
              wndclass.cbClsExtra    = 0 ;
              wndclass.cbWndExtra    = 0 ;
              wndclass.hInstance     = hInstance ;
              wndclass.hIcon         = NULL ;
              wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
              wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
              wndclass.lpszMenuName  = NULL ;
              
              for (i = 0 ; i < 4 ; i++)
              {
                   wndclass.lpfnWndProc   = ChildProc[i] ;
                   wndclass.lpszClassName = szChildClass[i] ;
                   
                   RegisterClass (&wndclass) ;
                   
                   hwndChild[i] = CreateWindow (szChildClass[i], NULL,
                                       WS_CHILDWINDOW | WS_BORDER | WS_VISIBLE,
                                       0, 0, 0, 0, 
                                       hwnd, (HMENU) i, hInstance, NULL) ;
              }
              
              cyChar = HIWORD (GetDialogBaseUnits ()) ;
              return 0 ;
              
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              
              for (i = 0 ; i < 4 ; i++)
                   MoveWindow (hwndChild[i], (i % 2) * cxClient / 2,
                                             (i > 1) * cyClient / 2,
                               cxClient / 2, cyClient / 2, TRUE) ;
              return 0 ;
              
         case WM_CHAR:
              if (wParam == '\x1B')
                   DestroyWindow (hwnd) ;
              
              return 0 ;
              
         case WM_DESTROY: 
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  14.   

    以上是多线程的,其他没变,要改掉刷新时间,改各个函数的Sleep就可以了