用下面的程序获取Edit框中的象素一般情况下是没问题的,但在屏保、机器锁定或程序最小化(隐藏)的情况下所获取到的是全黑. 哎, 笨笨啊一下子不知道如何解决.很急的, 希望大伙能给点思路. 先谢过程序片段如下:
//m_edit1,和m_edit2 为Edit编辑框CString strRGB;
CRect editRc;
COLORREF color;
CBitmap Bmp;
int iRColor, iGColor;m_edit1.GetWindowRect(&editRc);
ScreenToClient(&editRc);CDC *memDC = new CDC;
CDC * pEditDc = m_edit1.GetDC();memDC->CreateCompatibleDC(pEditDc);
Bmp.CreateCompatibleBitmap(pEditDc, editRc.Width(), editRc.Height());
memDC->SelectObject(&Bmp);
memDC->BitBlt( 0, 0, editRc.Width(), editRc.Height(), pEditDc, 0, 0, SRCCOPY);for(int ih=0; ih<editRc.Height(); ih++)
{
for(int iw=0; iw<editRc.Width(); iw++)
{
color = memDC->GetPixel(iw, ih);
iRColor = GetRValue(color);
iGColor = GetGValue(color); iRColor > 0 ? strRGB += "1" : strRGB += "0";
iGColor > 0 ? strRGB += "1" : strRGB += "0";
}
}
m_edit2.SetWindowText(strRGB);
UpdateData(FALSE);
delete memDC;

解决方案 »

  1.   

    你在获取DC,DC没有显示,当然没有东西。
    不过,你可以试一下从DC里保存图像的办法,看看有没有效果。关于从DC里导出图像,论坛里有很多,可以搜一下
      

  2.   

    你先保存一个EDIT CDC 然后需要的时候在COPY过去了
      

  3.   

    BLsoft(网龙)  的办法是不行的. 因为Edit的内容是变化的.先保存的和后面真正的就不一样了. 
    holyeagle(一杯清茶) 的方法马上试试
    感谢.想到一方法不知道能否实现: 
    因为Edit中的内容是从数据库中获取的. 我获取数据显示到edit的同时copy到内存,然后在把edit中的字体和颜色信息也copy到内存..... 估计不行.
      

  4.   

    可以先把要显示的东西放到一块你自己的dc里面,在复制的屏幕dc,想保存的时候,就从你保存的dc取值
      

  5.   

    感谢各位的回复, 今天已经基本解决了问题.
    用到是CDC的DrawState
    BOOL DrawState(
       CPoint pt,
       CSize size,
       LPCTSTR lpszText,
       UINT nFlags,
       BOOL bPrefixText = TRUE,
       int nTextLen = 0,
       HBRUSH hBrush = NULL 
    );不过字体显示不太对.