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

1

08.07.2009, 14:08

einfaches fenster

kann mir bitte jmd schreiben wie ich ein einfaches fenster programmiere mit direktx?
hab schon alles probiert aber klapt iwie net wird immer angezeigt das dadeien nicht gefunden wurden aber ich hab sicher alles richtig verlinkt

mein code(vom buch):

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#define _INITWINDOW_CPP
#include <Windows.h>
#include <TriBase.h>
#include "InitWindow.h"


// ******************************************************************

// Funktion zum Initialisieren des Fensters

tbResult InitWindow(int iWidth,
                    int iHeight,
                    char* pcName,
                    HICON hIcon)
{
    // Fensterklassenstruktur ausfüllen

    WNDCLASSEX WindowClass = {sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0, 0,
                              GetModuleHandle(NULL), hIcon, LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)), NULL,
                              NULL, "Direct3D window", NULL};

    // Klasse registrieren

    if(!RegisterClassEx(&WindowClass))
    {
        TB_ERROR("Fensterklassenregistrierung fehlgeschlagen!", TB_ERROR);
    }

    TB_INFO("Fensterklasse wurde registriert!");

    RECT Rect;
    SetRect(&Rect, 0, 0, iWidth, iHeight);
    AdjustWindowRect(&Rect, WS_VISIBLE | WS_OVERLAPPEDWINDOW, FALSE);
    iWidth = Rect.right - Rect.left;
    iHeight = Rect.bottom - Rect.top;

    // Fenster erstellen und prüfen

    g_hWindow = CreateWindow("Direct3D window",
                             pcName,
                             WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                             GetSystemMetrics(SM_CXSCREEN) / 2 - iWidth / 2,
                             GetSystemMetrics(SM_CYSCREEN) / 2 - iHeight / 2,
                             iWidth,
                             iHeight,
                             NULL,
                             NULL,
                             GetModuleHandle(NULL),
                             NULL);
    if(g_hWindow == NULL)
    {
        TB_ERROR("Erstellung des Fensters ist fehlgeschlagen!\n", TB_ERROR);
    }

    // Alles OK!

    TB_INFO("Fenster wurde erstellt!");

    return TB_OK;
}

// ******************************************************************

// Funktion zum Herunterfahren der Fensterkomponente

tbResult ExitWindow()
{
    // Klasse löschen

    UnregisterClass("Direct3D window", GetModuleHandle(NULL));

    TB_INFO("Fensterkomponente wurde heruntergefahren!");

    return TB_OK;
}

// ******************************************************************

// Die Nachrichtenfunktion des Fensters

LRESULT WINAPI WindowProc(HWND hWindow,
                          unsigned int uiMessage,
                          WPARAM WParam,
                          LPARAM LParam)
{
    PAINTSTRUCT Paint;

    switch(uiMessage)
    {
    case WM_CREATE:
        break;

    case WM_PAINT:
        // Das Fenster mit Schwarz füllen

        BeginPaint(hWindow, &Paint);
        FillRect(Paint.hdc, &Paint.rcPaint, (HBRUSH)(GetStockObject(BLACK_BRUSH)));
        EndPaint(hWindow, &Paint);
        break;

    case WM_CLOSE:
        DestroyWindow(hWindow);
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWindow, uiMessage, WParam, LParam);
    }

    return TRUE;
}

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

08.07.2009, 14:19

Also im Code seh ich jetzt so keinen Fehler (btw: es gibt code tags).

Wie lautet denn die genaue Fehlermeldung ?

3

08.07.2009, 14:19

hi

wenn du des buch hasch kansch ja von der cd das erste beispiel(kapitel2/Fenster) nehmen. Da wird n Fenster erstellt.
Wegen der Fehlermeldung sollte man den genauen Text und obs vom Compiler oder vom Programm kommt wissen.

gruß jan

PS: mit DirectX kann man soweit ich weiß kein Fenster erstellen
nur mit der WINAPI.

4

08.07.2009, 14:43

der code is ja aus dem buch...
Fehlermeldung:

Das Programm "D:\Debug\Projekt1.exe" kann nicht gestartet werden.

das System kann den angegebenen Pfad nicht finden.

5

08.07.2009, 14:44

Fighter19

Wo ist der Rest vom Code? Zum Beispiel die WinMain?

Apropos Code: Habe deinen Post editiert und entsprechende Tags eingefügt.
Bitte in Zukunft dran denken.


jan91

"... hasch kansch..." ? Autsch!
fka tm

6

08.07.2009, 14:47

winmain? rest vom code?
davon wird nix im vuch erwähnt

7

08.07.2009, 14:50

WinMain = Einstiegspunkt für Windows in dein Programm (vereinfacht gesagt).

Woher - aus welchem Kapitel - stammt der Code?
Hast du den irgendwo rauskopiert oder abgetippt?
fka tm

8

08.07.2009, 14:53

aus der CD kopiert

9

08.07.2009, 14:55

Hier die WinMain aus dem Beispiel "Fenster" (Passend, nicht? ;)):

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
// ******************************************************************

// Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    // TriBase-Engine initialisieren

    tbInit();

    // Fenster initialisieren

InitWindow(640, 480, "Beispielprogramm Nr. 1:Fenster",
               LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1))); 

    // Nachrichtenschleife

    tbDoMessageLoop(Render, Move);
    
    // Fenster herunterfahren

    ExitWindow();

    // Engine herunterfahren

    tbExit();

    return 0;
}

// ******************************************************************
fka tm

10

08.07.2009, 14:57

ok und wie soll ich jetzt das fenster machen?

Werbeanzeige