???

解决方案 »

  1.   

    COLORREF c=GetPixel(GetDC(NULL),x,y);
    x,y为屏幕坐标
      

  2.   

    处理ON_MOUSEMOVE消息,其处理形式为:
    void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    CDialog::OnMouseMove(nFlags, point);
    }
    直接用GetPixel(),其原形为COLORREF GetPixel(
       POINT point 
    ) const;,其中的参数point可以直接用函数OnMouseMove中的point
      

  3.   

    #include <windows.h>#define ID_TIMER    1void FindWindowSize (int *, int *) ;
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("WhatClr") ;
         HWND         hwnd ;
         int          cxWindow, cyWindow ;
         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 ;
         }
         
         FindWindowSize (&cxWindow, &cyWindow) ;
         
         hwnd = CreateWindow (szAppName, TEXT ("What Color"),
                              WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_BORDER,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              cxWindow, cyWindow,
                              NULL, NULL, hInstance, NULL) ;
         
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
         
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }void FindWindowSize (int * pcxWindow, int * pcyWindow)
    {
         HDC        hdcScreen ;
         TEXTMETRIC tm ;
         
         hdcScreen = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
         GetTextMetrics (hdcScreen, &tm) ;
         DeleteDC (hdcScreen) ;
         
         * pcxWindow = 2 * GetSystemMetrics (SM_CXBORDER)  + 
                            12 * tm.tmAveCharWidth ;     * pcyWindow = 2 * GetSystemMetrics (SM_CYBORDER)  +
                           GetSystemMetrics (SM_CYCAPTION) + 
                             2 * tm.tmHeight ;
    }LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static COLORREF cr, crLast ;
         static HDC      hdcScreen ;
         HDC             hdc ;
         PAINTSTRUCT     ps ;
         POINT           pt ;
         RECT            rc ;
         TCHAR           szBuffer [16] ;     
         switch (message)
         {
         case WM_CREATE:
              hdcScreen = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
      Rectangle(hdcScreen,100,100,500,500);          SetTimer (hwnd, ID_TIMER, 100, NULL) ;
              return 0 ;     case WM_DISPLAYCHANGE:
              DeleteDC (hdcScreen) ;
              hdcScreen = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
              return 0 ;     case WM_TIMER:
              GetCursorPos (&pt) ;
              cr = GetPixel (hdcScreen, pt.x, pt.y) ;
              
              if (cr != crLast)
              {
                   crLast = cr ;
                   InvalidateRect (hwnd, NULL, FALSE) ;
              }
              return 0 ;
              
         case WM_PAINT:
              hdc = BeginPaint (hwnd, &ps) ;
              
              GetClientRect (hwnd, &rc) ;
              
              wsprintf (szBuffer, TEXT ("  %02X %02X %02X  "),
                        GetRValue (cr), GetGValue (cr), GetBValue (cr)) ;
              
              DrawText (hdc, szBuffer, -1, &rc,
                        DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY:
              DeleteDC (hdcScreen) ;
              KillTimer (hwnd, ID_TIMER) ;
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  4.   

    getpixel() ,如果鼠标移动超出本程序的窗口,到屏幕其他地方,好像就不能读了吧