COLORREF cr = ::GetPixel(hDC, Point.x, Point.y)
如果鼠标所在位置有子窗口,是否用父窗口的DC去取颜色,返回的都是白色,就是窗口的背景色?
要是换成子窗口的DC去取,能正常取到颜色。

解决方案 »

  1.   

    可以 GetDC(NULL) 用屏幕的DC来获取某个位置的点的像素
    下面是使用对话框, 上面放了一个静态控件IDC_STATIC1,使用定时器取的代码
    void CDlg6Dlg::OnTimer(UINT nIDEvent) 
    {
      // TODO: Add your message handler code here and/or call default
      if(nIDEvent == 1)
      {
        
        POINT ptCurs = {-1,-1};
        COLORREF cf = (COLORREF)(-1);
        
        //获取屏幕上的点的颜色
        HDC hScreenDC = ::GetDC(NULL);
        if(hScreenDC)
        {
          if(GetCursorPos(&ptCurs))
          {
            cf = GetPixel(hScreenDC, ptCurs.x, ptCurs.y);
          }
          ::ReleaseDC(NULL, hScreenDC);
        }
        
        CWnd *pCtrl = GetDlgItem(IDC_STATIC1);
        if(pCtrl)
        {
          CRect rcRect;
          pCtrl->GetClientRect(&rcRect);
          CDC *pDstDC = pCtrl->GetDC();
          pDstDC->FillSolidRect(&rcRect, 0); //填充黑色
          rcRect.DeflateRect(3,3);
          pDstDC->FillSolidRect(&rcRect, RGB(255, 255, 255)); //填充白色
          rcRect.DeflateRect(3,3);
          pDstDC->FillSolidRect(&rcRect, cf); //填充获取的颜色
          pCtrl->ReleaseDC(pDstDC);
        }    
      }
      
      CDialog::OnTimer(nIDEvent);
    }
      

  2.   

    试试PrintWindow