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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

21

26.01.2007, 21:42

Zitat von »"koschka"«

Du solltest immer Methoden, von denen du willst, dass die erbenden Klasse diese unbedingt implementieren müssen (kann auch leer sein) immer abstrakt machen. (Bei OnClick und OnDestroy würd ich das machen)

Bei Java ist das besser gelöst mit abtract bool foo();, in Cpp sieht das so aus: virtual bool foo() = 0; Ist nicht sonderlich schön, funzt aber :)


Herrje, ich weiß das. Ich denke ich bin nach längerer C++ Laufbahn doch recht versiert in der Sprache. Ansonsten hätt ich vllt meinen Beruf auch falsch gewählt.
Die Methoden sollen ja garnich überschrieben werden. Sie dürfen, ansonsten wird der leere Body ausgeführt der nämlich für Window definiert wird.

Die Klasse Window und Control hab ich durch rein virtuelle Destruktoren abstrakt gemacht, so nebenbei.

Zitat von »"koschka"«


Das mit dem erben ist im ürbiegen - wenn ich so mal drüber nachdenke ne ganz akzeptable Idee :).


Ja danke! Aus genau diesem Grund hab ich mich ja auch dafür entschieden! :P
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

22

27.01.2007, 13:56

so das verlässt jetzt meinen bereich :D

aber auf jeden fall danke leute ^^
vorallem danke @ gurke, das mit dem inventar klingt ziemlich gut! ich denke das werd ich tatsächlich machen :)
ein inventar mit platz für 8 objekte.. eines der objekte soll ein beutel sein, der nur zb. edelsteine beinhalten kann. danke für den tipp ;)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

23

27.01.2007, 18:05

ich habs noch nicht getestet aber so ungefähr stell ich mir das vor:

Man muss natürlich ne eigene Klasse erzeuge, sie von CWindow ableiten und die WndProc nach Wünschen überschreiben.
Es kann auch sein dass sie nicht funktioniert hatte keine vzeit zum testen:

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
class CWindow
{
protected:
    ::MSG             msg;
    ::WNDCLASSW       wndclass;
    HWND__*           hwnd;
    HDC__*            hdc;

    __w64 long __stdcall WndProc (HWND__* hwnd, 
                                  unsigned int message,
                                  __w64 unsigned int wParam,
                                  __w64 long lParam);
    


public:
    bool create(std::basic_string<wchar_t> name,
                HINSTANCE__* hInstance, 
                HINSTANCE__* hPrevInstance,
                char *szCmdLine, int iCmdShow ); 


};

bool CWindow::create(std::basic_string<wchar_t> name,
                     HINSTANCE__* hInstance, 
                     HINSTANCE__* hPrevInstance,
                     char *szCmdLine, int iCmdShow ) 
{
    ::ZeroMemory(&hwnd,     sizeof(HWND__*));
    ::ZeroMemory(&msg,      sizeof(MSG));
    ::ZeroMemory(&wndclass, sizeof(WNDCLASSW));

    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = NULL;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hInstance ;
    wndclass.hIcon         = NULL ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (RGB(0,0,0));
    wndclass.lpszMenuName  = NULL;
    wndclass.lpszClassName = name.c_str();

    if (!RegisterClass(&wndclass))
        return false;
 

   


    hwnd = CreateWindow (name.c_str(), name.c_str(), WS_SYSMENU|WS_CAPTION ,
                         CW_USEDEFAULT, CW_USEDEFAULT,
                         1024, 768,
                         NULL, NULL, hInstance, NULL);

    if(!IsWindow(hwnd))
        return false;

    


    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);

    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }

    return true;

}

__w64 long __stdcall CWindow::WndProc(HWND__* hwnd, unsigned int message,__w64 unsigned int wParam,
                                      __w64 long lParam)
{
    return ::DefWindowProc (hwnd, message, wParam, lParam);
}
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

24

27.01.2007, 18:15

Hat es einen speziellen Grund warum du alle Typedefs auflöst? Oder ist das einfach nur weil du auch einer bist der Grundlos versucht Patricks "Stil" zu kopieren?

Die while-Schleife in der Methode create ist übrigens sehr unschön!
@D13_Dreinig

25

28.01.2007, 11:44

Zitat

nur weil du auch einer bist der Grundlos versucht Patricks "Stil" zu kopieren

Was willste mir damit jetzt sagen?

Zitat

Die while-Schleife in der Methode create ist übrigens sehr unschön!


Ich weiß nicht recht wie ichs anders machen soll. Wie würdest du denn machen ;-)?
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

26

28.01.2007, 11:50

Zitat von »"Theprogrammer"«

Zitat

nur weil du auch einer bist der Grundlos versucht Patricks "Stil" zu kopieren

Was willste mir damit jetzt sagen?


Mir is aufgefallen das viele das wohl tun ohne begründen zu können warum sie das machen. Und dein Stil sieht dem von Patrick sehr ähnlich. Das mein ich damit!

Zitat von »"Theprogrammer"«


Zitat

Die while-Schleife in der Methode create ist übrigens sehr unschön!


Ich weiß nicht recht wie ichs anders machen soll. Wie würdest du denn machen ;-)?


Auslagern?
@D13_Dreinig

27

28.01.2007, 14:30

Zitat

Auslagern?


Meinste einfach wieder in die Main machen?
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

28

28.01.2007, 15:02

Nö, nich unbedingt. Aber es sollte zumindest eine Möglichkeit geben wärend der Hauptschleife Operationen auszuführen.
@D13_Dreinig

29

28.01.2007, 15:07

Jo. Außerdem kann man so auch nciht mehrere Fenster erzeugen -.-'
Am besten lagere ich es in ner eigenen Elementfunktion aus. Die man dann überschreiben kann!
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

30

28.01.2007, 16:36

Ich hab gerade festgestellt, dass es irgendwie scheinbar unmöglich ist ne Methode als CALLBACK zu missbrauchen. Das wirft mein komplettes "Konzept" übern Haufen. Inzwischen hab ich die while Schleife in ner Methode . Das funzt jetzt auch.

Hat jemand ne Idee wie ich ne Elementfunktion als Callback benutzen kann?
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Werbeanzeige