Member 11287123 Ответов: 0

Как сделать так, чтобы кнопка оставалась видимой на форме 1 при использовании directx3d


У меня есть кнопка на форме 1 для выхода пользователя из программы. Кнопка не отображается, так как DirectX 9 рисует всю форму и закрывает кнопку. Как я могу контролировать, какая часть формы будет нарисована? Я программирования в vb.net визуальный Studio2017 и я с помощью управляемого с поддержкой DirectX 9

Что я уже пробовал:

Я попытался изменить цвет на белый, так как он был черным, но кнопка по-прежнему не отображается. Я могу нажать на кнопку, потому что знаю, где я ее разместил. Я пытаюсь узнать о DirectX, и теперь, когда у меня установлен VS 2017, я хочу посмотреть, смогу ли я что-нибудь сделать с DirectX 9. До сих пор я наконец-то получил этот 3D-треугольник,отображаемый в C#, C++ и vb.net-да. Кнопка не появляется ни на одном из этих языков.
Вот этот код:
Option Strict Off
Option Explicit On
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports System.Threading


Public Class Form1
    Inherits System.Windows.Forms.Form

    Private device As Direct3D.Device
    Dim buffer As VertexBuffer

    Public Sub New()
        InitializeComponent()
    End Sub

    Public Sub Initialize()
        Dim present As PresentParameters = New PresentParameters
        present.BackBufferCount = 1
        present.BackBufferFormat = Manager.Adapters(0).CurrentDisplayMode.Format
        present.BackBufferHeight = Me.Height
        present.BackBufferWidth = Me.Width
        present.Windowed = True
        present.SwapEffect = SwapEffect.Discard
        device = New Device(0, DeviceType.Hardware, Me, 
           CreateFlags.SoftwareVertexProcessing, present)
        device.RenderState.CullMode = Cull.None
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
         Handles Me.Load
*** This probably will be the problem but I don't know!  ***        
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.Opaque, True) 
        Me.Height = 500
        Me.Width = 600
        Me.Text = "DirectX Tutorial using Visual Basic"
        Initialize()
        creat_vertxbuffer()
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim vertices As CustomVertex.TransformedColored() = New CustomVertex.TransformedColored(0 To 2) {} 'create an array of vertices
        vertices(0).Position = New Vector4(150, 100, 0, 1)
        vertices(0).Color = Color.Red.ToArgb 'encode color in Argb
        vertices(1).Position = New Vector4(Me.Width / 2 + 100, 100, 0, 1)
        vertices(1).Color = Color.Green.ToArgb
        vertices(2).Position = New Vector4(250, 300, 0, 1)
        vertices(2).Color = Color.Yellow.ToArgb

        device.Clear(ClearFlags.Target, Color.Black, 1.0, 0)

        device.BeginScene() 'all drawings after this line
        device.VertexFormat = CustomVertex.TransformedColored.Format
        device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices)
        device.EndScene() 'all drawings before this line

        device.Present()
        Me.Invalidate() 'redraw
    End Sub

    Sub creat_vertxbuffer()
        buffer = New VertexBuffer(GetType(CustomVertex.TransformedColored), 3, device, Usage.None, CustomVertex.TransformedColored.Format, Pool.Managed)
        Dim ver(2) As CustomVertex.TransformedColored
        ver(0) = New CustomVertex.TransformedColored(50, 10, 0, 1, Color.Red.ToArgb)
        ver(1) = New CustomVertex.TransformedColored(200, 15, 0, 1, Color.Green.ToArgb)
        ver(2) = New CustomVertex.TransformedColored(10, 200, 0, 1, Color.Red.ToArgb)
        buffer.SetData(ver, 0, LockFlags.None)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Application.Exit()
    End Sub
End Class

0 Ответов