我的一段程序,用于在桌面绘制图形。如下: 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的情况啊?
{
//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的情况啊?
解决方案 »
- C#可不可以重载空格运算
- C# winform程序如何实现 电脑开机自动运行
- 操作符 is 问题
- 关于struct 转换成数组的问题
- 如何动态加载OCX控件
- 问一个问题,xsd在什么情况比必须用?我做了2年asp.net web 程序都没用过,还有xml,我也用不上啊?怎么回事?
- 怎么将电脑图片转换成二进制流
- 以n-hibernate作为底层,在checkedListbox中选择数据,然后添加到IList里,但不知道如何把对象转换为映射表对象类型
- 软件开发事宜,?
- WCF如何传大量数据
- C# MD5(16位) 加密后的密文比较问题
- VS2005 创建的pda程序读取xml的问题!!!。着急!谢谢高手帮我解决!!!
Graphics g = Graphics.FromHdc(hDCDesktop);
从hdc得到了对应的Graphics
那么如何从Graphics 得到hdc呢?是用Graphics.GetDc()吗?
Graphics.GetDc()得到的是intptr型,如何在转变成unint型呢?