我在面板上渲染我的图像。
using Microsoft.DirectX.Direct3D;
Device device;
this.device = new Device(0, DeviceType.Hardware, this.panel2,
CreateFlags.HardwareVertexProcessing, presentationParameters);
因此,当我尝试将winform从一个切换到另一个时,面板闪烁。
我知道很难描述这个场景。因此,我特此上传一个视频片段(.swf)到我的谷歌硬盘,你们可以下载它并用窗口媒体播放器打开它来观看视频。
以下是共享链接: https://drive.google.com/file/d/0B6wTfkJvzke_aVJwanVkaU1iSVU/edit?usp=sharing
在视频中,我在调试模式下运行我的应用程序,然后单击任务栏中的“chrome浏览器”选项卡以访问“chrome浏览器”,当最小化的“chrome浏览器”弹出时,面板将被闪烁。然后,当我再次最小化“Chrome浏览器”时,面板再次闪烁。
如果在屏幕上面板上方放置了其他一些winform,则会出现问题。
对上述事项有何评论?需要帮助。
答案 0 :(得分:4)
将DirectX与Panel
一起使用时遇到了同样的闪烁问题。事实证明,OS绘制事件正在与我自己发生冲突。要解决此问题,您需要通过创建自定义面板来禁用Panel
上的操作系统绘图。这样简单就足够了。
class Direct3DPanel : Panel
{
public Direct3DPanel()
{
this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
}
}
SetStyle
方法调用告诉操作系统只有你应该在Direct3DPanel
中绘制。请注意,一旦执行此操作,您将负责所有绘图。您可能需要处理Paint
事件并根据当前架构调用绘制逻辑。
您可以在此处获取有关不同ControlStyles
的更多信息
http://msdn.microsoft.com/en-us/library/system.windows.forms.controlstyles(v=vs.110).aspx