1

我在面板上渲染我的图像。

using Microsoft.DirectX.Direct3D;

Device device;

this.device = new Device(0, DeviceType.Hardware, this.panel2,
                CreateFlags.HardwareVertexProcessing, presentationParameters);

结果,当我尝试将 winform 从一个切换到另一个时,面板闪烁。

我知道很难描述这种情况。因此,我特此将视频剪辑 (.swf) 上传到我的 google 驱动器,你们可以下载它并使用窗口媒体播放器打开它来观看视频。

以下是共享链接: https ://drive.google.com/file/d/0B6wTfkJvzke_aVJwanVkaU1iSVU/edit?usp=sharing

在视频中,我在调试模式下运行我的应用程序,然后单击任务栏中的“chrome 浏览器”选项卡以访问“chrome 浏览器”,当最小化的“chrome 浏览器”弹出时,面板会闪烁。然后当我再次最小化“chrome浏览器”时,面板再次闪烁。

当屏幕上的面板上方放置一些其他 winform 时,会出现此问题。

对上述问题有何评论?需要帮助。

4

1 回答 1

3

在将 DirectX 与Panel. 事实证明,操作系统绘制事件正在与我自己发生冲突。要解决此问题,您需要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

于 2013-11-07T17:22:20.097 回答