Autor Wątek: SharpDX i Osadzanie w WFA  (Przeczytany 2598 razy)

Offline Riw

  • Użytkownik

# Wrzesień 29, 2014, 21:00:25
Witam,stworzyłem sobie prosty Edytor mapy w SharpDX,chciałbym okno SharpDX'a umieścić w okienku z WindowsFormsApplication.
W XNA pisałem kontrolke GraphicsDevice dla WFA i dodawałem jako zwyczajną kontrolkę jednak tutaj to nie działa.
Wie ktoś jak moge to osiągnąć ?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Cyste

  • Użytkownik

# Wrzesień 29, 2014, 23:17:17
Podczas tworzenia urządzenia (Device) podaj uchwyt (Handle) kontrolki.

Offline Riw

  • Użytkownik

# Wrzesień 30, 2014, 07:48:24
Właśnie tu sie pojawia problem,nigdy nie miałem doczynienia z uchwytami i nie wiem jak to zrobić :(

Offline Cyste

  • Użytkownik

# Wrzesień 30, 2014, 08:24:55
Przecież nawet obecnie by działała Ci aplikacja musisz podawać uchwyt.

http://sharpdx.org/documentation/api/m-sharpdx-direct3d9-device--ctor

W argument hFocusWindow wstaw swój uchwyt.

http://sharpdx.org/documentation/api/t-sharpdx-direct3d9-presentparameters

W argumencie DeviceWindowHandle również wstaw uchwyt do tej samej kontrolki.

Chyba, że korzystasz z DirectX 10 albo 11, to w strukturze SwapChainDescription w polu OutputHandle podaj swój uchwyt.
« Ostatnia zmiana: Wrzesień 30, 2014, 08:30:26 wysłana przez Cyste »

Offline Riw

  • Użytkownik

# Wrzesień 30, 2014, 16:57:15
@Up

Zastosowałem sie do rad:
- w klasie form1 w konstruktorze stworzyłem obiekt klasy SwapChainDescription i spróbowałem sie do tego odnieść w nazwa.OutputHandle,
ale jak zrobić ten cały uchwyt ?
« Ostatnia zmiana: Wrzesień 30, 2014, 19:30:09 wysłana przez Riw »

Offline ArekBal

  • Użytkownik

# Wrzesień 30, 2014, 23:07:01
OMG... każde okno(a także kontrolka która de facto też jest oknem) w WinAPI ma uchwyt(HWND).

Właściwość Form.Handle w WinForms zwraca IntPtr. Jak nie winforms to szukaj w danym frameworku jakiegoś GetHandle czy innego getNativeHandle
albo Window::GetHandleFromWindow(Window& w)

Offline Riw

  • Użytkownik

# Październik 01, 2014, 15:13:37
No dobra fajnie,ale jak zrobić ten uchwyt ?

Offline Xirdus

  • Redaktor

# Październik 01, 2014, 15:20:25
Uchwyt jest już zrobiony - gdyby go nie było, Windows nie mógłby wyświetlić okna.

Offline Riw

  • Użytkownik

# Październik 01, 2014, 18:20:36
@Up

to jak w takim razie podpiąć tam do WFA okno SharpDX go nie kumam tego?
Krok po kroku ze szczegółami :)

Offline Riw

  • Użytkownik

# Październik 01, 2014, 20:45:26
Mam oto taką kontrolkę dzięki uprzejmości pewnego Programisty:
using System.Windows.Forms;
using System.Drawing;


namespace MyGame1
{
    public sealed class RenderingControl : UserControl
    {
         /// <summary>
        /// Init
        /// </summary>
        public RenderingControl()
        {
            // Set Style
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque | ControlStyles.UserPaint, true);
            UpdateStyles();
        }

        /// <summary>
        /// Init
        /// </summary>
        /// <param name="size">Rendering control size</param>
        public RenderingControl(Size size)
        {
            // Set Style
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque | ControlStyles.UserPaint, true);
            UpdateStyles();

            // Set size
            Size = size;
        }

        /// <summary>
        /// Paints the background of the control
        /// </summary>
        /// <param name="e">W</param>
        protected override void OnPaintBackground(PaintEventArgs e)
        {
            // Do not paint background
        }
    }
}
Muszę jedynie zrobić ten cały uchwyt.
Ale jak? Jak zrobić żeby uzyskać efekt którego tak poszukuje ??


// Pamiętaj następnym razem korzystać z tagów [code]. -Xirdus
« Ostatnia zmiana: Październik 01, 2014, 21:23:41 wysłana przez Xirdus »

Offline ArekBal

  • Użytkownik

  • +1
# Październik 01, 2014, 23:23:37
UserControl reference
na tej liście jest wymieniona właściwość Handle
http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol%28v=vs.110%29.aspx

A to się otwiera po kliknięciu w nią
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle%28v=vs.110%29.aspx

A tu właściwy dla winforms interface
http://msdn.microsoft.com/en-us/library/system.windows.forms.iwin32window.handle%28v=vs.110%29.aspx

Cytuj
Muszę jedynie zrobić ten cały uchwyt.
Musisz "jedynie" zrozumieć czym jest winforms, forma, okno, kontrolka, uchwyt, właściwość, dokumentacja i graphicsDevice itd. itp.

Nie napiszę za ciebie kodu... walcz dalej.

PS. Nie napiszę za darmo :)

Offline Riw

  • Użytkownik

# Październik 03, 2014, 10:48:54
Nikt ci nie każe pisać za mnie kodu,chce tylko wiedzieć jak to zrobić bo nie mam zielonego pojęcia jak.
W galerii przykładów na Githubie nie ma nic co by mi działało.

Offline Xirdus

  • Redaktor

# Październik 03, 2014, 12:01:09
Kombinuj na różne sposoby, aż ci się uda. Przeczytaj wszystko o wszystkich funkcjach jakie istnieją w bibliotece standardowej C#, Windows Forms i SharpDX, a najlepiej jeszcze C++-owym DirectX, które mają w nazwie lub parametrze słowo "handle" - któraś jest ta właściwa.