为什么有时候不能获取桌面的HDC
我的一段程序,用于在桌面绘制图形。如下:
void DrawDiffer()
{
//IntPtr hDCDesktop = GetDC(IntPtr.Zero); // 用这个时也会返回0。 语句A
IntPtr hDCDesktop = CreateDC("DISPLAY", null, null, IntPtr.Zero); // 改为这个后也还是返回0。语句B
if(hDCDesktop == IntPtr.Zero) // 为了防止出错,我后来增加的。语句C
return;
Graphics g = Graphics.FromHdc(hDCDesktop); // 可是居然....。最糟糕的是居然能运行到这里。语句D
for (int i = 0; i < m_nDifferNums; i++)
{
g.DrawEllipse(m_penLeft, m_arrLeftRectDiffer);
g.DrawEllipse(m_penRight, m_arrRightRectDiffer);
}
m_bClearDifferImage = false;
//g.ReleaseHdc(hDCDesktop); // 这个会出错,所以注释掉。语句E
g.Dispose();
}
大部分时候没有出错,可是一段时间后就会出错,用语句A或者语句B都出现过同样的错误,原来是没有语句C的,运行发生错误时运行到语句D,发现hDCDesktop是null。后来加了语句C,发现还是出错,而且居然还是运行到语句D,发现hDCDesktop还是null。
语句C难道拦截不到,怎么样写hDCDesktop才不会出现返回null的情况啊?