COLORREF cr = ::GetPixel(hDC, Point.x, Point.y)
如果滑鼠所在位置有子視窗,是否用父視窗的DC去取顏色,回傳的都是白色,就是視窗的背景色?
要是換成子視窗的DC去取,能正常取到顏色。
uj5u.com熱心網友回復:
可以 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);
}
uj5u.com熱心網友回復:
我需要監視某個程式的某個坐標的顏色是否變紅,變紅就是有告警,要求該程式在最小化的時候也能正確作業,所以不能用取螢屏顏色的方式。監視程式輸入該程式的主視窗句柄、坐標、顏色,然后在定時器里判斷。uj5u.com熱心網友回復:
最小化的時候 你確定它會繪制么?uj5u.com熱心網友回復:
貌似只能取到正在螢屏上顯示的視窗的顏色值,視窗最小化或被遮擋的情況下取不到,是啵?uj5u.com熱心網友回復:
試試PrintWindow
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73840.html
標籤:基礎類
上一篇:用GDI+的效率問題
