微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调整窗口大小会导致黑条

我有一个窗体,它在构造函数中设置这些样式:

this.SetStyle(ControlStyles.AllPaintingInWmPaint,true); this.SetStyle(ControlStyles.UserPaint,true); this.SetStyle(ControlStyles.ResizeRedraw,true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer,true);

我在Paint事件中绘制了一些矩形。 表单上没有控件。 Hovewer,当我调整表格的大小时,表格的右下方有黑条。 有什么办法摆脱他们? 我已经尝试了一切,在WndProc监听WM_ERASEBKGND ,手动绘制WM_PAINT上的窗体,实现自定义双缓冲区等。还有什么我可以尝试?

我发现这个: https : //connect.microsoft.com/VisualStudio/Feedback/details/522441/custom-resizing-of-system-windows-window-flickers ,它看起来像是DWM中的错误,但我只是希望我能做一些解决方法

请注意,我必须使用双缓冲,因为我想在Paint事件中绘制相当强烈的graphics表示。 我在C#.NET 2.0,Win7中开发。

即使计算机进入待机模式,窗口应用程序能否继续运行?

使用oracle.dataaccess.dll时出错

如何保持ReadDirectoryChangesW缺less文件更改

在选项卡中打开.NET插件

Windows应用程序安装在哪里+ .NET + VS2005

状态更新1

我设法通过自己实现resizefunction来摆脱大部分黑色条纹。 Hovewer还有一些小毛病。 有没有办法一次resize和paint操作? 这里是我需要做一个代码

IntPtr hDC; var size = new Size(250,200); IntPtr handle = API.PaintAndResizeBegin(this.Handle /* Form.Handle */,size.Width,size.Height,out hDC); using (var g = Graphics.FromHdc(hDC)) { this.backBuffer.Render(g,size); } API.PaintAndResizeCommit(handle);

有什么办法来实现上面的代码

第二种解决scheme可以是对整个表单进行后台caching,包括非客户区域。 但是怎么做呢? 我不想自己绘制非客户区域,因为我想保持Vista / 7的良好的空气效果。 任何帮助将深表谢意。

状态更新2

看起来这个问题是无法解决的,因为它在Windows上是无处不在的,在每个应用程序中。 我们只希望MS能够在Mac OS X中获得一些灵感,并将在新的Windows中提供适当的API。

如何在C#中获取通用文件types图标?

在Windows 8中检测重启 – 未调用SessionEnding

如何使用c + +得到Windows DNS后缀search列表

控制音量混音器

如何尽可能以平台无关的方式从c ++中调用.NET

我找到了可以同时绘制和调整窗口大小的函数 – UpdatelayeredWindow 。

所以现在应该可以创建可调整大小的窗口,在调整大小的时候没有任何条带。 但是,您需要自己绘制窗口内容,所以有点不方便。 但我认为使用WPF和UpdatelayeredWindow ,应该没有任何问题。

更新

发现问题。 :-)使用UpdatelayeredWindow ,必须自己绘制窗口的边框。 所以,如果你想在win7中使用具有良好的玻璃效果的UpdatelayeredWindow绘制标准的窗口,你是拧。

Microsft Connect甚至是一个关于这个问题的线索,微软说这是一个设计缺陷,如果它得到解决,那么可能在Win8或更新的系统中。 所以我们不能做这个。

我发现最好不要直接在Form表面上做任何自定义的渲染。 相反,在窗体上放置停靠的PictureBox,创建将显示在PictureBox中的Bitmap对象,使用system.drawing.graphics.FromImage(Image)方法将所有内容绘制到该对象上。

我用一个游戏循环的方法来制作一个简单的射击游戏(Crimsonland风格),并获得了相当不错的性能(抗锯齿线),高于100 FPS。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐