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

11

10.01.2008, 20:37

Hier die 2 Dateien.
Hab unter Headerdateien noch die InitWindow.h und Resource.h eingebunden...

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
(fenster.cpp)
// Kapitel 2

// Beispielprogramm 01

// ===================

// Erstellen des Fensters und Aufrufen der Nachrichtenschleife.

// Die dafür nötigen Funktionen sind in der Datei InitWindow.cpp

// gespeichert.


#include <Windows.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "Resource.h"

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

// Render-Funktion

tbResult Render(float fNumSecsPassed)
{
    return TB_OK;
}

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

// Move-Funktion

tbResult Move(float fNumSecsPassed)
{
    return TB_OK;
}

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

// Windows-Hauptfunktion

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

    tbInit();

    // Fenster initialisieren

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

    // Nachrichtenschleife

    tbDoMessageLoop(Render, Move);
    
    // Fenster herunterfahren

    ExitWindow();

    // Engine herunterfahren

    tbExit();

    return 0;
}

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

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
100
101
102
103
104
105
106
107
108
(InitWindow.cpp)
// Hilfsdatei INITWINDOW.CPP

// =========================

// Diese Datei deklariert vier wichtige Funktionen, die für die

// Arbeit mit einem Fenster nützlich sind. Diese werden hauptsächlich

// von den Beispielprogrammen verwendet.


#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;
}

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

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

12

11.01.2008, 14:29

Änder den Funktionskopf mal in:

C-/C++-Quelltext

1
2
3
4
tbResult InitWindow(int iWidth,
                    int iHeight,
                    wchar_t* pcName,
                    HICON hIcon) 


Übergib der CreateWindow Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
        g_hWindow = CreateWindow(L"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);

13

11.01.2008, 21:52

Danke für den Code
Jetzt bin ich bei nur noch einem Fehler

fenster.cpp(39) : error C2664: 'InitWindow': Konvertierung des Parameters 3 von 'const wchar_t [32]' in 'char *' nicht möglich

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

das is die Stelle dazu

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

14

11.01.2008, 22:21

Wie sieht der Funktionskopf aus?
So?

C-/C++-Quelltext

1
2
3
4
tbResult InitWindow(int iWidth,
                    int iHeight,
[b]                    wchar_t* pcName[/b],
                    HICON hIcon)

15

11.01.2008, 22:50

Jo also so stehts in der InitWindow.cpp

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

16

11.01.2008, 23:20

Lass mal das L weg, aber seltsam ist es trotzdem...

17

12.01.2008, 00:34

Geht leider auch nich besser...
hab auch schon extra die libs für die 2005er express version...

wenn ich unicode rausmach und alle L"" wieder durch "" ersetzt bekomm ich hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
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);


den Fehler: error C2664: 'CreateWindowExA': Konvertierung des Parameters 3 von 'wchar_t *' in 'LPCSTR' nicht möglich

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

18

12.01.2008, 01:29

Sicher, dass du den richtigen Codeausschnitt zeigst?

19

12.01.2008, 15:32

Ja, zumindest wird angezeigt das der Fehler in Zeile 50 ist und das ist die Zeile...

20

17.05.2008, 11:55

Ich hab mich jetzt länger nicht damit beschäftigt aber hatte vor das jetzt wieder zu versuchen...
Hat vllt noch jemand ne Idee woran das liegen kann?

Werbeanzeige