Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

1

17.06.2013, 19:56

Mit DirectX9 auf Childwindow redern

Hi Leute,

ich dachte mir, dass wenn man bei erstelle der Direct3D Schnittstelle ein HWND angeben muss, auf welches später gerendert wird, sollte es doch auch möglich sein, au ein Child HWND z.B. ei Static zu rendern.

Habe alles gemacht wie als wenn ich in das richtige Fenster render, doc es kommt einfach kein Bild.
Weiß jemand, ob das möglich ist , wie ich mir das vorstelle?
Ich dachte mir, dass man damit ein Mapeditor erstellen könnte und die WinApi für buttons und co verwenden kann.

Mit freundlichem Gruß
xXSlayerXx
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

2

17.06.2013, 20:09

Ein wenig Code wäre hilfreich.

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

3

17.06.2013, 20:27

ok war vorhin am handy^^

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
MapEditorMainWindow.CreateMainWindow (g_hInstance, 1000, 700, "MainWindow",WS_OVERLAPPEDWINDOW|WS_VISIBLE); //Hier erstelle ich mein Fenster. Die Funktion dazu habe ich selber geschrieben
    ShowWindow(MapEditorMainWindow.GetHandle(), SW_MAXIMIZE); //Das Fenster wird auf volle größe gebracht
    if (MapEditorMainWindow.GetHandle() == NULL) // Fehler abfragen
    {
        return (1);
    }
    HWND hTest;
    hTest =         CreateWindow    ("STATIC",NULL,
                                        WS_VISIBLE | WS_CHILD,
                                        0, 0, 600, 400, 
                                        MapEditorMainWindow.GetHandle(), (HMENU)5, g_hInstance, NULL); //So nun erstelle ich ein Child. Ein Static mit der Größe 600x400.

//-----------------------------------------------------------------------------------------------------------
//nun zu Initalisierung von Direct3D

    HRESULT hResult;
    D3DFORMAT format=D3DFMT_R5G6B5;

    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if(!g_pD3D)  return 1;

    // Präsentationsstruktur ausfüllen
    ZeroMemory(&PresentParams, sizeof(D3DPRESENT_PARAMETERS));
    PresentParams.BackBufferWidth               = 600;
    PresentParams.BackBufferHeight              = 400;
    PresentParams.BackBufferFormat          = format;
    PresentParams.BackBufferCount               = 1;
    PresentParams.MultiSampleType               = D3DMULTISAMPLE_NONE;
    PresentParams.MultiSampleQuality            = 0;
    PresentParams.SwapEffect                = D3DSWAPEFFECT_DISCARD;
    PresentParams.hDeviceWindow             = hTest;
    PresentParams.Windowed              = true;
    PresentParams.EnableAutoDepthStencil                        = FALSE;
    PresentParams.Flags                 = 0;
    PresentParams.FullScreen_RefreshRateInHz                    = D3DPRESENT_RATE_DEFAULT;
    PresentParams.PresentationInterval          = D3DPRESENT_INTERVAL_DEFAULT;

    if(FAILED (hResult=g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hTest,  D3DCREATE_SOFTWARE_VERTEXPROCESSING, &PresentParams, &g_pD3DDevice))) //Hier gebe ich an, dass auf hTest gerendert werden soll.
    {
                         return 1;
    }


//Edit

ich hab das ganze nun sogar hinbekommen, doch habe ein Problem.
Windows rendert mir da ständig rein. Kann ich das irgendwie unterbinden, dass wirklich nur DirectX am rendern ist? Aber nur auf dieses eine Child bezogen und nicht auf das gesamte Fenster
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »xXSlayerXx« (17.06.2013, 20:35)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

17.06.2013, 23:43

Und du übergibst beim Aufruf von Present() auch das richtige Fenster?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

18.06.2013, 06:37

Unterdrücken der normalen Draw-Nachricht wäre eventuell noch notwendig. Ich weiß nicht, ob Win7 das anders handhabt, aber bei WinXP gab's da manchmal Stress mit.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

6

18.06.2013, 07:44

Habe das mit dem unterdrücken des Zeichnens nun so gelöst:

In der Callback Funktion habe ich beim zeichnen einfach angegeben, dass es sofort wieder beendet werden soll.

C-/C++-Quelltext

1
2
3
4
5
6
7
        case WM_PAINT:
        {       
            if(BeginPaint(ViewPort.GetHandle(), &ps))
            {
                EndPaint(ViewPort.GetHandle(), &ps);
            }
        }break;
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

18.06.2013, 12:04

Und warum machst Du überhaupt BeginPaint und EndPaint?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

8

18.06.2013, 20:22

da Windows es sonst selbstständig ausführen würde und ich so selber bestimmen kann, was denn nun gerendert werden soll. In diesem Fall soll beim start des Zeichnenvorgangs, dieser sofort wieder beendet werden.
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

18.06.2013, 20:35

Achso? Es ist zwar schon ewig her, aber ich meine mich zu erinnern da einfach ein passendes Return gemacht zu haben und fertig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

18.06.2013, 20:36

Jap steht auch so in der Dokumentation. "An application returns zero if it processes this message."

Werbeanzeige