用下面的程序获取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;
//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;
不过,你可以试一下从DC里保存图像的办法,看看有没有效果。关于从DC里导出图像,论坛里有很多,可以搜一下
holyeagle(一杯清茶) 的方法马上试试
感谢.想到一方法不知道能否实现:
因为Edit中的内容是从数据库中获取的. 我获取数据显示到edit的同时copy到内存,然后在把edit中的字体和颜色信息也copy到内存..... 估计不行.
用到是CDC的DrawState
BOOL DrawState(
CPoint pt,
CSize size,
LPCTSTR lpszText,
UINT nFlags,
BOOL bPrefixText = TRUE,
int nTextLen = 0,
HBRUSH hBrush = NULL
);不过字体显示不太对.