DirectX in WinAPI Fenster



  • Hi,
    ich war mir nicht sicher ob das Thema ins WinAPI oder ins Spieleforum gehört, wenn ich mich falsch entschieden habe tut mir das leid.

    Ich arbeite gerade an ein paar wrapperklassen für die WinAPI die ich dann für mein Kommendes kleines Projekt nutzen möchte. Ich möchte nun gerne eine art DirectX Control schreiben so das es mir möglich ist einen Bereich des Formulars mit DirectX zu nutzen. Also z.B. eine Art 3D Editor schreiben zu können.

    Meine ursprüngliche Idee war einfach ein Child-Window zu erstellen und den handle von dem Window an die CreateDevice Funktion von DirectX weiterzugeben.

    HWND hChild = CreateWindow(  "Child",
                                     NULL,
                                     WS_CHILD | WS_VISIBLE | WS_DLGFRAME,
                                     300,
                                     rect.bottom - 35,
                                     rect.right - 10,
                                     30,
                                     win->getHandle(), //Handle vom parent Window
                                     NULL,
                                     hInstance,
                                     NULL);
    
    d3d->CreateDevice(D3DADAPTER_DEFAULT,
                          D3DDEVTYPE_HAL,
                          hChild,
                          D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                          &d3dpp,
                          &d3ddev);
    

    Nun ja, das klappt leider nicht. CreateDevice schlägt fehl (vermutlich weil das handle nicht stimmt). Hat jemand eine Idee was ich anders machen muss um das Problem zu lösen?


  • Mod

    Staati schrieb:

    (vermutlich weil das handle nicht stimmt). Hat jemand eine Idee was ich anders machen muss um das Problem zu lösen?

    Ja, das ist ganz einfach, du musst deine Vermutungen verifizieren indem du Fehlerpruefungen einbaust um gewissheit zu erlangen, um aufgrund dessen weiter debuggen zu koennen.

    so loest du das problem.



  • Okay, diese Antwort hat mir ungefähr garnichts gebracht.

    Ich weiss das es am Handle liegen muss weil der CreateDevice device aufruf funktioniert wenn ich kein child fenster benutze. CreateDevice gibt mir D3DERR_INVALIDCALL zurück.

    Was ich aber nicht weiss ist wie ich directx in einem WinAPI Fenster initialisiere wie es bei diversen level editoren mesh viewern gemacht wird.


  • Mod

    Staati schrieb:

    Okay, diese Antwort hat mir ungefähr garnichts gebracht.

    was erwartest du auf ne frage wie "ich glaube ich weiss was kaputt ist, was soll ich machen?" ausser "dann fix es"

    Staati schrieb:

    Ich weiss das es am Handle liegen muss weil der CreateDevice device aufruf funktioniert wenn ich kein child fenster benutze. CreateDevice gibt mir D3DERR_INVALIDCALL zurück.

    also ist dein fensterhandle ungueltig?

    Staati schrieb:

    Was ich aber nicht weiss ist wie ich directx in einem WinAPI Fenster initialisiere wie es bei diversen level editoren mesh viewern gemacht wird.

    Vermutlich machen sie es so wie in der DX-doc beschrieben, Tutorial 1 wuerd ich meinen, hast du es auf diese weise probiert bzw. den unterschied zu deiner version rausgesucht?



  • Ich glaube wir "reden" aneinander vorbei...

    rapso schrieb:

    Vermutlich machen sie es so wie in der DX-doc beschrieben, Tutorial 1 wuerd ich meinen, hast du es auf diese weise probiert bzw. den unterschied zu deiner version rausgesucht?

    Wie ich ein normales DirectX fenster mittels der WinAPI erstelle weiβ ich. Ich möchte konkret sowas in der Art machen:
    http://techhouse.org/~dmorris/projects/winmeshview/bunny.jpg

    Der Unterschied zwischen der Version die klappt (vermutlich DX tut 1) und meiner version ist das ich in meiner version ein Parent-Handle und als Styleflag WS_CHILD angegeben habe.

    Daraus könnte man nun schlieβen das es einfach so nicht funktioniert wie ich es gerade versuche. Aber wie sonst?


  • Mod

    klappt das erstellen des fensters an sich ohne DX zu initialisieren ?(zeichne mal mit gdi ne linie rein zum testen oder sowas).



  • Danke, ich habs hinbekommen...

    Ist zwar nicht unbedingt verständlich für mich, aber es funktioniert wenn ich kein gewöhnliches child fenster sondern ein Static control verwende...


Anmelden zum Antworten