/*--------------------------------------------------
   CONNECT.C -- Connect-the-Dots Mouse Demo Program
                (c) Charles Petzold, 1998
  --------------------------------------------------*/#include <windows.h>#define MAXPOINTS 10000LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("Connect") ;
     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 ("Program requires Windows NT!"), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("Connect-the-Points Mouse Demo"),
                          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 ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static POINT pt[MAXPOINTS] ;
     static int   iCount ;
     HDC          hdc ;
     int          i, j ;
     PAINTSTRUCT  ps ;     switch (message)
     {
     case WM_LBUTTONDOWN:
          iCount = 0 ;
          InvalidateRect (hwnd, NULL, TRUE) ;
          return 0 ;
          
     case WM_MOUSEMOVE:
          if (wParam & MK_LBUTTON && iCount < 10000)
          {
               pt[iCount  ].x = LOWORD (lParam) ;
               pt[iCount++].y = HIWORD (lParam) ;
               
               hdc = GetDC (hwnd) ;
               SetPixel (hdc, LOWORD (lParam), HIWORD (lParam), 0) ;
               ReleaseDC (hwnd, hdc) ;
          }
          return 0 ;
          
     case WM_LBUTTONUP:
          InvalidateRect (hwnd, NULL, FALSE) ;
          return 0 ;
          
     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;
          
          SetCursor (LoadCursor (NULL, IDC_WAIT)) ;
          ShowCursor (TRUE) ;
          
          for (i = 0 ; i < iCount - 1 ; i++)
               for (j = i + 1 ; j < iCount ; j++)
               {
                    MoveToEx (hdc, pt[i].x, pt[i].y, NULL) ;
                    LineTo   (hdc, pt[j].x, pt[j].y) ;
               }
               
          ShowCursor (FALSE) ;
          SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
               
          EndPaint (hwnd, &ps) ;
          return 0 ;
               
     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
   在我电脑上画的怎么填充了.  我鼠标移动的速度也很快.点距也不小..

解决方案 »

  1.   

    当然会填充了,你把这一句注释掉看看
         case WM_PAINT:
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetCursor (LoadCursor (NULL, IDC_WAIT)) ;
              ShowCursor (TRUE) ;
              
              for (i = 0 ; i < iCount - 1 ; i++)
                   for (j = i + 1 ; j < iCount ; j++)
                   {
                        MoveToEx (hdc, pt[i].x, pt[i].y, NULL) ;
                        //LineTo   (hdc, pt[j].x, pt[j].y) ;
                   }
                   
              ShowCursor (FALSE) ;
              SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
                   
              EndPaint (hwnd, &ps) ;
              return 0 ;
      

  2.   

    你想做什么?用鼠标画线?MoveTo只能画直线
      

  3.   

    你的电脑可能太快了。
    我的是第一代的duo笔记本,左键点住后必须飞速画半个圈,才能显示。你在慢点的机器上试试。PS: 中文有待提高。
      

  4.   

    你每次鼠标移动都画一个点,当然满屏幕都是点了;另外鼠标抬起的时候没有刷新背景,改成这样;
         case WM_LBUTTONUP:
              InvalidateRect (hwnd, NULL, TRUE ) ;
      

  5.   

    谢谢楼上的朋友 我现在用的Vista ..
    却成了这样。。 难道是速度太快? 我的是 amd Dual x2 3800+
      

  6.   

    我估计是鼠标点的问题 
    XP上画出来的一团黑 Vista 上能看到线
    我想应该是: XP上 虽然显示出鼠标点有间隔 但是 其实每个像素都有鼠标点 所以画出来的看不出线 
    或者 鼠标刷新率的问题 ??