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.12.2004, 15:59

Wie man in die MFC DirectX einbindet!

Also ich würde sagen das solte auf jedenfall mal in den FAQs stehen. Da ich aber erst Leutenant bin, kann ich da anscheinend nend nichts reinschreiben.

Dabei muss man das wie Folgt machen.

Erst unter Window->Options->Resourcen

Die denn Ordner Include aus dem DXSDK zu den Include Files hinzufügen und diesen dann nach ganz oben verschieben. Dann noch den Include Ordner von der Tribase Engine und denn an zweite stelle verschieben, da wenn er an erster stelle stehen würde der LInker die DX Dateien angeblich nicht finden kann.

Das selbe mit den Lib Files nur dieses mal den Ordner Lib.

Dann an der Stelle wo ihr in eurem Projekt die TriBase Engine Includiert haben wollt, bei ner SDI am besten in der App Datei, müsst ihr jetzt das folgende eingeben:

C-/C++-Quelltext

1
2
#include <mmsystem.h>
#include "tribase.h"


Danach dürfte der Compiller keine Fehler mehr ausspucken.

Die Menünamen können abweichen da ich mit dem englischen MS Visual Studio 6 arbeit. Die Include Files ändern sich aber nicht!

unsigned int

Alter Hase

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

2

08.12.2004, 17:40

Und wo ist der Unterschied zu dem, was im Buch steht??
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

3

08.12.2004, 17:46

Ich habs im Buch nicht für MFC sondern nur für WinAPI gefunden :)

chazon

Frischling

Beiträge: 56

Wohnort: Zons

  • Private Nachricht senden

4

08.01.2005, 18:38

Bei vc++ 7 (.Net) sind die Einstellungen unter
Extras->Optionen->Projects->VErzeichnisse
vorzunehmen.

Ich habe versucht unter MFC zu programmieren
dabei stellen sich mir folgende Fragen:

wo initialisiere ich bei SDI - FORMVIEW die tribase und wie kann ich dann
dort in einem Picture-Control die Grafik darstellen ?


wäre schön wenn das jemand wüßte
suche nämlich schon eine weile


Danke
Chazon

5

08.01.2005, 18:56

Die tribase Initialisierst du am besten in der InitInitinstanz von deinem

chazon

Frischling

Beiträge: 56

Wohnort: Zons

  • Private Nachricht senden

6

09.01.2005, 11:29

Ich includiere wie oben gesagt alle nötigen Dateien

wenn ich dann in InitInstance()

C-/C++-Quelltext

1
2
tbResult Result;
tbInit();


aufrufe , dann kommt folgende Fehlermeldung:

error C3861: 'tbInit': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden


dabei müsste doch zu diesem Zeitpunkt tbInit und tbResult bekannt sein . ???

oder hab ich da einen Gedankenfehler ?


Gruß Chazon

7

09.01.2005, 16:30

Du hast alles beim Linker eingetragen und dann am anfang von deiner cpp Datei gelinkt? Bei mir funzt es nähmlich. Hast de denn auch die Include beim Linkereingetragen?

chazon

Frischling

Beiträge: 56

Wohnort: Zons

  • Private Nachricht senden

8

09.01.2005, 17:42

Folgendes habe ich gemacht:

Einstellungen vorgenommen wie im Buch für VC++7
unter Extras -> Optionen -> Projekte -> VC++ Verzeichnisse
(wie auch du oben anführst)
dann auch unter Projekt ->Einstelungen -> Linker-> Eingabe
zusätzliche abhängigkeiten die Datei tribase.lib bzw tribased.lib unter
release bzw debug Konfiguration

VC++ 7 hat beim erstellen einer MFC Application mit Formview Ansichtsklasse folgende Klassen erschaffen:

CAboutDlg
Cchazon300App
Cchazon300Doc
Cchazon300View
CMainFrame

Meine application heisst "chazon300"

ich versuche nun in Cchazon300App -> InitInstance(void)
die tribase zu initialisieren

Hier der code:

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// chazon300.cpp : Definiert das Klassenverhalten für die Anwendung.

//

#include <MMSystem.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "..\\..\\Allgemeines\\Direct3DEnum.h"
#include "..\\..\\Allgemeines\\InitDirect3D.h"

#include "stdafx.h"
#include "chazon300.h"
#include "MainFrm.h"

#include "chazon300Doc.h"
#include "chazon300View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif



// Cchazon300App


BEGIN_MESSAGE_MAP(Cchazon300App, CWinApp)
    ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
    // Dateibasierte Standarddokumentbefehle

    ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP()


// Cchazon300App-Erstellung


Cchazon300App::Cchazon300App()
{
    // TODO: Hier Code zur Konstruktion einfügen

    // Alle wichtigen Initialisierungen in InitInstance positionieren

}


// Das einzige Cchazon300App-Objekt


Cchazon300App theApp;

// Cchazon300App Initialisierung


BOOL Cchazon300App::InitInstance()
{
    // InitCommonControls() ist für Windows XP erforderlich, wenn ein Anwendungsmanifest

    // die Verwendung von ComCtl32.dll Version 6 oder höher zum Aktivieren

    // von visuellen Stilen angibt. Ansonsten treten beim Erstellen von Fenstern Fehler auf.

    InitCommonControls();

    CWinApp::InitInstance();

    if (!AfxSocketInit())
    {
        AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
        return FALSE;
    }

    // OLE-Bibliotheken initialisieren

    if (!AfxOleInit())
    {
        AfxMessageBox(IDP_OLE_INIT_FAILED);
        return FALSE;
    }
    AfxEnableControlContainer();
    // Standardinitialisierung

    // Wenn Sie diese Features nicht verwenden und die Größe

    // der ausführbaren Datei verringern möchten, entfernen Sie

    // die nicht erforderlichen Initialisierungsroutinen.

    // Ändern Sie den Registrierungsschlüssel unter dem Ihre Einstellungen gespeichert sind.

    // TODO: Ändern Sie diese Zeichenfolge entsprechend,

    // z.B. zum Namen Ihrer Firma oder Organisation.

    SetRegistryKey(_T("Vom lokalen Anwendungs-Assistenten generierte Anwendungen"));
    LoadStdProfileSettings(4);  // Standard INI-Dateioptionen laden (einschließlich MRU)

    // Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen

    //  dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten.

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(Cchazon300Doc),
        RUNTIME_CLASS(CMainFrame),       // Haupt-SDI-Rahmenfenster

        RUNTIME_CLASS(Cchazon300View));
    if (!pDocTemplate)
        return FALSE;
    AddDocTemplate(pDocTemplate);
    // Befehlszeile parsen, um zu prüfen auf Standardumgebungsbefehle DDE, Datei offen

    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    // Verteilung der in der Befehlszeile angegebenen Befehle. Es wird FALSE zurückgegeben, wenn

    // die Anwendung mit /RegServer, /Register, /Unregserver oder /Unregister gestartet wurde.

    if (!ProcessShellCommand(cmdInfo))
        return FALSE;
    // Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden.

    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    // Rufen Sie DragAcceptFiles nur auf, wenn eine Suffix vorhanden ist.

    //  In einer SDI-Anwendung ist dies nach ProcessShellCommand erforderlich

    
    if(tbInit())
    {
    }
    else
    {
    }
    tbExit();

    return TRUE;
}



// CAboutDlg-Dialogfeld für Anwendungsbefehl 'Info'


class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialogfelddaten

    enum { IDD = IDD_ABOUTBOX };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung


// Implementierung

protected:
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// Anwendungsbefehl zum Ausführen des Dialogfelds

void Cchazon300App::OnAppAbout()
{
    CAboutDlg aboutDlg;
    aboutDlg.DoModal();
}


// Cchazon300App Meldungshandler

Die zusätzlichen include-dateien brauche ich , da ich das Beispiel des ersten Dreiecks im Buch in einem Picture-Control proggen möchte.
kannst du mir mit diesen Informationen sagen wo der Fehler liegt

Danke schon mal im Voraus
Grusß Chazon

9

09.01.2005, 18:01

Versuch mal deinen Include wie folgt aufzubauen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h" 
#include "chazon300.h"
#include <D3D9.h> 
#include <mmsystem.h>
#include "tribase.h"
#include "..\\..\\Allgemeines\\InitWindow.h" 
#include "..\\..\\Allgemeines\\Direct3DEnum.h" 
#include "..\\..\\Allgemeines\\InitDirect3D.h"
#include "MainFrm.h"
#include "chazon300Doc.h" 
#include "chazon300View.h"

Das sollte normal funktionieren, bei mir funzt es zumindest.

chazon

Frischling

Beiträge: 56

Wohnort: Zons

  • Private Nachricht senden

10

09.01.2005, 18:13

nasowas

genau das war's
Danke

aber warum muß ich denn die d3d9.h noch extra includieren
weisst du das ?

------
PS
Habe die ganze Sache aber nun in Cchazon300View initialisiert,
da dort ja alles gerendert werden soll .
Anders wäre tribase dort nicht sichtbar
-------

Gruß Chazon

Werbeanzeige