关于GetPixel的问题

pingshell 2018-03-07 11:30:13
COLORREF cr = ::GetPixel(hDC, Point.x, Point.y)
如果鼠标所在位置有子窗口,是否用父窗口的DC去取颜色,返回的都是白色,就是窗口的背景色?
要是换成子窗口的DC去取,能正常取到颜色。
...全文
623 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-08
  • 打赏
  • 举报
回复
引用 4 楼 pingshell 的回复:
貌似只能取到正在屏幕上显示的窗口的颜色值,窗口最小化或被遮挡的情况下取不到,是啵?
试试PrintWindow
pingshell 2018-03-07
  • 打赏
  • 举报
回复
貌似只能取到正在屏幕上显示的窗口的颜色值,窗口最小化或被遮挡的情况下取不到,是啵?
zgl7903 2018-03-07
  • 打赏
  • 举报
回复
最小化的时候 你确定它会绘制么?
pingshell 2018-03-07
  • 打赏
  • 举报
回复
我需要监视某个程序的某个坐标的颜色是否变红,变红就是有告警,要求该程序在最小化的时候也能正确工作,所以不能用取屏幕颜色的方式。监视程序输入该程序的主窗口句柄、坐标、颜色,然后在定时器里判断。
zgl7903 2018-03-07
  • 打赏
  • 举报
回复
可以 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);
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧