为什么有时候不能获取桌面的HDC

Mr. Code 2008-07-06 11:59:16
我的一段程序,用于在桌面绘制图形。如下:





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的情况啊?
...全文
58 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ambush 2008-07-19
  • 打赏
  • 举报
回复
请问,你用
Graphics g = Graphics.FromHdc(hDCDesktop);
从hdc得到了对应的Graphics
那么如何从Graphics 得到hdc呢?是用Graphics.GetDc()吗?
Graphics.GetDc()得到的是intptr型,如何在转变成unint型呢?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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