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

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

1

07.01.2006, 00:21

Nicht ganz ernst: Ein Windowsfenster

Fällt euch noch was ein um das Fenster noch ein bischen zu verunstalten ;p

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
#include <windows.h>
#include <string>

__w64 long __stdcall WndProc(::HWND__* hwnd, unsigned __int32 msg, __w64 unsigned __int32 wParam, __w64 long lParam);

int __stdcall WinMain(::HINSTANCE__* hInst,
                      ::HINSTANCE__* hPrevInst,
                      char* lpCmdLine,
                      __int32 nShowCmd)
{
    std::basic_string<wchar_t>  ClassName = L"Fenster";
    ::WNDCLASSEXW               wc;
    ::HWND__*                   hwnd;
    ::tagMSG                    msg;

    wc.cbClsExtra       = (__int32)0;
    wc.cbSize           = sizeof(wc);
    wc.cbWndExtra       = (__int32)0;
    wc.hbrBackground    = (::HBRUSH__*)::GetStockObject(0);
    wc.hCursor          = (::HICON__*)::LoadCursor(hInst, MAKEINTRESOURCEW(32512));
    wc.hIcon            = (::HICON__*)::LoadIcon(hInst, MAKEINTRESOURCEW(32512));
    wc.hIconSm          = (::HICON__*)::LoadIcon(hInst, MAKEINTRESOURCEW(32512));
    wc.hInstance        = hInst;
    wc.lpfnWndProc      = WndProc;
    wc.lpszClassName    = ClassName.c_str();
    wc.lpszMenuName     = (const wchar_t*)0;
    wc.style            = 0x0002 | 0x0001;

    ::RegisterClassExW(&wc);

    hwnd = ::CreateWindowExW((unsigned long)0,
                             ClassName.c_str(),
                             ClassName.c_str(),
                             0x00000000L | 0X00C00000L | 0X00080000L | 0X00040000L | 0X00010000L | 0X00020000L,
                             0x80000000,
                             0x80000000,
                             0x80000000,
                             0x80000000,
                             (::HWND__*)0,
                             (::HMENU__*)0,
                             hInst,
                             (void*)0);

    ::ShowWindow(hwnd, nShowCmd);
    ::UpdateWindow(hwnd);

    while(::GetMessageW(&msg, hwnd, 0, 0))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessageW(&msg);
    }

    ::UnregisterClassW(ClassName.c_str(), hInst);

    return 0;
}

__w64 long __stdcall WndProc(::HWND__* hwnd, unsigned __int32 msg, __w64 unsigned __int32 wParam, __w64 long lParam)
{
    switch(msg)
    {
        case 0x0010:
        {
            ::PostQuitMessage((__int32)0);
            break;
        }

        default:
        {
            return ::DefWindowProcW(hwnd, msg, wParam, lParam);
            break;
        }
    }
}
Was es alles gibt, das ich nich brauche - Aristoteles

Sicaine

unregistriert

2

07.01.2006, 00:35

Machsu noch nen Screenshot davon?

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

3

07.01.2006, 01:09

wieso? das fenster ist langweilig, es geht nur darum den code noch ähm "benutzerfreundlicher" zu gestalten
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

4

07.01.2006, 01:27

CW_Kovok
Na also ein bisschen musst Du schon noch dran arbeiten, sieht ja schlimm aus.

The best way:

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

// Datei:        main.h

// ###########################################################################

// Autor:        Patrick Ullmann

// Erstellt:     06.01.2006

// Änderungen:   06.01.2006/Patrick: Datei erstellt

// ###########################################################################

// Beschreibung: Hauptobjekt


#if !defined(__main_h__)
#define __main_h__

// I N C L U D E S ###########################################################

#include <windows.h>    // Allgemeiner Windowsheader

#include <windowsx.h>   // WindowsX für Fensternachrichten

#include <string>       // std::basic_string<T>


// M A K R O S ###############################################################

    // TODO: Template-Makros einfügen


// D E F I N I T I O N E N ###################################################

    // TODO: Konstanten/enums/unions einfügen


// S T R U K T U R E N #######################################################

class main
{
private:
        // Constructor, Copyconstructor und Destructor

    main  (void);
    main  (const main& other);
    ~main (void);

        // Es gibt nur eine Instanz. Jede Zuweisung wäre eine Selbstzuweisung.

        // Da Selbstzuweisungen selten Sinn machen, ist der op= privat

    main& operator= (const main& other);

public:
        // Diese statische Methode erzeugt die einzige Instanz.

        // Nur über diese Methode erhalten Anwender den Zugriff auf

        // die Instanz.

    inline static main& getInstance (void)
    {
            // Die Instanz wird erst beim ersten Aufruf erzeugt.

            // Endet das Programm, wird Instanz vernichtet.

        static main instance;
        return (instance);
    } 

        // Initialisierungsfunktion

    int init        (void);

private:
        // Hauptschleife

    int run (void);

        // Fensternachrichtenverarbeitungsfunktionen

    bool message_create         (::HWND__* hwnd, ::CREATESTRUCTW* createStruct);        // WM_CREATE  

    void message_destroy        (::HWND__* hwnd);                                       // WM_DESTROY


        // Die ECHTE Fensterprozedur

    long _w64 __stdcall DefWindowProc  (unsigned int message, unsigned int wParam, long _w64 lParam);
    
        // Die Reciever-Funktion für die Fensterprozedur

    static long _w64 __stdcall WndProc (::HWND__* hwnd, unsigned int message, unsigned int wParam, long _w64 lParam);

        // Fensterdaten

    unsigned long               width_;     // Fensterbreite

    unsigned long               height_;    // Fensterhöhe

    unsigned long               style_;     // Fensterstyle

    ::HWND__*                   hwnd_;      // Handle

    std::basic_string<wchar_t>  name_;      // Fenstertitel


        // Programmdaten

    ::HINSTANCE__*              instance_;  // Programminstanz

};

#endif // Include Guard


und die cpp:

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// ###########################################################################

// Datei:        main.cpp

// ###########################################################################

// Autor:        Patrick Ullmann

// Erstellt:     06.01.2006

// Änderungen:   06.01.2006/Patrick: Datei erstellt

// ###########################################################################

// Beschreibung: Hauptobjekt


// I N C L U D E S ###########################################################

#include "main.h"

// F U N K T I O N E N #######################################################


// ///////////////////////////////////////////////////////////////////////////

// PRIVATE Constructor

// 

// ///////////////////////////////////////////////////////////////////////////

main::main (void) : name_(L"Testapplication"), width_(800), height_(600), style_(WS_CAPTION)
{
        // Instanz holen

    instance_ = ::GetModuleHandleW (NULL);
}

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE Copyconstructor

// 

// ///////////////////////////////////////////////////////////////////////////

main::main (const main& other)
{
}

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE Destructor

// 

// ///////////////////////////////////////////////////////////////////////////

main::~main (void)
{
        // Registrierte Klasse freigeben

    ::UnregisterClassW (name_.c_str(), instance_);
}

// ///////////////////////////////////////////////////////////////////////////

// PUBLIC 

// 

// Initialisiert ein Fenster

// ///////////////////////////////////////////////////////////////////////////

int main::init (void)
{
        // Fensterklasse erstellen

    ::WNDCLASSW windowclass; 

        // Fensterklasse nullen

    ::ZeroMemory (&windowclass, sizeof(windowclass));

        // Parameter der Fensterklasse setzen

    windowclass.style               = CS_HREDRAW | CS_VREDRAW;              // Neuzeichnen

    windowclass.hbrBackground       = (HBRUSH__*)(5);                       // Hintergrund 

    windowclass.hCursor             = ::LoadCursor (NULL, IDC_ARROW);       // Standardcursor

    windowclass.hIcon               = ::LoadIcon (NULL, IDI_APPLICATION);   // Standardicon

    windowclass.hInstance           = instance_;                            // Instanz

    windowclass.lpfnWndProc         = WndProc;                              // Fensterprozedur

    windowclass.lpszClassName       = name_.c_str();                        // Klassenname

        
        // Fensterklasse registrieren

    ::RegisterClassW (&windowclass); 
        
        // Fenster erstellen

    hwnd_ = ::CreateWindowW (name_.c_str(), name_.c_str(), style_, 0, 0, width_, height_, NULL, NULL, instance_, 
                             this);  // Hier wird der Zeiger auf das erzeugte Objekt übergeben 

                       
        // WM_CREATE aufrufen, da durch die Recieverfunktion dies nicht mehr möglich ist

    message_create (hwnd_, NULL);

        // Fenster anzeigen und updaten

    ::ShowWindow   (hwnd_, SW_NORMAL); 
    ::UpdateWindow (hwnd_); 

        // Hauptschleife aufrufen

    return (run());
}

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE 

// 

// Hauptschleife des Programms

// ///////////////////////////////////////////////////////////////////////////

int main::run (void)
{
        // MessageObjekt

    ::MSG   message;

        // MessageObjekt initialisieren

    ::ZeroMemory (&message, sizeof(message));

            // Hauptschleife

    while (::GetMessage (&message, NULL, 0, 0))
    { 
            // Nachricht verarbeiten

        ::TranslateMessage (&message); 
        ::DispatchMessage  (&message); 
    }

        // Exitcode zurückgeben

    return (static_cast<int>(message.wParam));
}

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE 

// 

// Fensternachrichtenverarbeitung: WM_CREATE

// ///////////////////////////////////////////////////////////////////////////

bool main::message_create (::HWND__* hwnd, ::CREATESTRUCTW* createStruct)
{
        // Fensterrechteck erstellen

    ::RECT rc = {0, 0, width_, height_};

        // "Wahre" Fenstergröße holen

    ::AdjustWindowRectEx (&rc, style_, false, 0);
    
        // Fensterposition ausrechnen

    const long centerX = ::GetSystemMetrics (SM_CXFULLSCREEN) / 2 - (::abs(rc.left) + rc.right) / 2; 
    const long centerY = ::GetSystemMetrics (SM_CYFULLSCREEN) / 2 - (::abs(rc.top) + rc.bottom) / 2; 

        // Fenster neu positionieren

    ::MoveWindow (hwnd, centerX, centerY, (rc.right - rc.left), (rc.bottom - rc.top), true);

    return (true);
}

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE 

// 

// Fensternachrichtenverarbeitung: WM_DESTROY

// ///////////////////////////////////////////////////////////////////////////

void main::message_destroy (::HWND__* hwnd)
{
        // Programmzerstörung durchführen

    ::PostQuitMessage (0);
}

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE 

// 

// Die richtige WndProc der Klasse

// ///////////////////////////////////////////////////////////////////////////

long _w64 __stdcall main::DefWindowProc (unsigned int message, unsigned int wParam, long _w64 lParam) 
{ 
        // Messages verarbeiten

    switch (message) 
    { 
#pragma warning( disable : 4800 ) // warning C4800: 'BOOL' : forcing value to bool

    HANDLE_MSG (hwnd_, WM_DESTROY,      message_destroy);
#pragma warning( default : 4800 )
    } 

        // Nachrichten an Default-Windows-WndProc weiterreichen: 

    return ::DefWindowProcW (hwnd_, message, wParam, lParam); 
} 


// ///////////////////////////////////////////////////////////////////////////

// PRIVATE 

// 

// Recieverfindung des Objekts (Fake-WndProc)

// ///////////////////////////////////////////////////////////////////////////

long _w64 __stdcall main::WndProc (::HWND__* hwnd, unsigned int message, unsigned int wParam, long _w64 lParam) 
{         
        // Übergebenen 'this' merken

    if (message == WM_CREATE)
        ::SetWindowLongW (hwnd, GWL_USERDATA, static_cast<long>((long _w64)(reinterpret_cast<CREATESTRUCT*>(lParam)->lpCreateParams))); 

        // Sich selbst als Pointer holen

    main* receiver = reinterpret_cast<main*>(static_cast<long _w64>(::GetWindowLongPtrW(hwnd, GWL_USERDATA))); 

        // Konnte man sich selbst finden? Wenn nein: Windows WndProc benutzen

    if (!receiver)
        return ::DefWindowProcW (hwnd, message, wParam, lParam); 
        
        // Man konnte sich selbst finden: Eigene WndProc ausführen

    return receiver->DefWindowProc (message, wParam, lParam); 
} 


    // Einsprungspunkt des Programms

int __stdcall WinMain (::HINSTANCE__* instance, ::HINSTANCE__* prevInstance, char* cmdLine, int cmdShow)
{
        // Programm durchstarten

    return (main::getInstance().init ());
}


Ist etwas effektiver.

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

5

07.01.2006, 15:49

dafür sollte man dich eigentlich schlagen ;)
ich meine wer programmiert bitte so? Naja werde das mal abtippen und nochwas von lernen
Was es alles gibt, das ich nich brauche - Aristoteles

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

6

07.01.2006, 16:09

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
// ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

// Datei:        main.h

// ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

// Autor:        Patrick Ullmann

// Erstellt:     06.01.2006

// Änderungen:   06.01.2006/Patrick: Datei erstellt

// ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

// Beschreibung: Hauptobjekt


??=if !defined(__main_h__)
??=define __main_h__

// I N C L U D E S ??=??=??=??=??=??=??=??=??=??=??=

??=include <windows.h>    // Allgemeiner Windowsheader

??=include <windowsx.h>   // WindowsX für Fensternachrichten

??=include <string>       // std::basic_string<T>


// M A K R O S ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

    // TODO: Template-Makros einfügen


// D E F I N I T I O N E N ??=??=??=??=??=??=??=??=??=

    // TODO: Konstanten/enums/unions einfügen


// S T R U K T U R E N ??=??=??=??=??=??=??=??=??=??=??=

class main
??<
private:
        // Constructor, Copyconstructor und Destructor

    main  (void);
    main  (const main& other);
    ~main (void);

        // Es gibt nur eine Instanz. Jede Zuweisung wäre eine Selbstzuweisung.

        // Da Selbstzuweisungen selten Sinn machen, ist der op= privat

    main& operator= (const main& other);

public:
        // Diese statische Methode erzeugt die einzige Instanz.

        // Nur über diese Methode erhalten Anwender den Zugriff auf

        // die Instanz.

    inline static main& getInstance (void)
    ??<
            // Die Instanz wird erst beim ersten Aufruf erzeugt.

            // Endet das Programm, wird Instanz vernichtet.

        static main instance;
        return (instance);
    ??>

        // Initialisierungsfunktion

    int init        (void);

private:
        // Hauptschleife

    int run (void);

        // Fensternachrichtenverarbeitungsfunktionen

    bool message_create         (::HWND__* hwnd, ::CREATESTRUCTW* createStruct);        // WM_CREATE 

    void message_destroy        (::HWND__* hwnd);                                       // WM_DESTROY


        // Die ECHTE Fensterprozedur

    long _w64 __stdcall DefWindowProc  (unsigned int message, unsigned int wParam, long _w64 lParam);
   
        // Die Reciever-Funktion für die Fensterprozedur

    static long _w64 __stdcall WndProc (::HWND__* hwnd, unsigned int message, unsigned int wParam, long _w64 lParam);

        // Fensterdaten

    unsigned long               width_;     // Fensterbreite

    unsigned long               height_;    // Fensterhöhe

    unsigned long               style_;     // Fensterstyle

    ::HWND__*                   hwnd_;      // Handle

    std::basic_string<wchar_t>  name_;      // Fenstertitel


        // Programmdaten

    ::HINSTANCE__*              instance_;  // Programminstanz

??>;

??=endif // Include Guard

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

// Datei:        main.cpp

// ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

// Autor:        Patrick Ullmann

// Erstellt:     06.01.2006

// Änderungen:   06.01.2006/Patrick: Datei erstellt

// ??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=??=

// Beschreibung: Hauptobjekt


// I N C L U D E S ??=??=??=??=??=??=??=??=??=

??=include "main.h"

// F U N K T I O N E N ??=??=??=??=??=??=??=??=??=


// ///////////////////////////////////////////////////////////////////////////

// PRIVATE Constructor

//

// ///////////////////////////////////////////////////////////////////////////

main::main (void) : name_(L"Testapplication"), width_(800), height_(600), style_(WS_CAPTION)
??<
        // Instanz holen

    instance_ = ::GetModuleHandleW (NULL);
??>

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE Copyconstructor

//

// ///////////////////////////////////////////////////////////////////////////

main::main (const main& other)
??<
??>

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE Destructor

//

// ///////////////////////////////////////////////////////////////////////////

main::~main (void)
??<
        // Registrierte Klasse freigeben

    ::UnregisterClassW (name_.c_str(), instance_);
??>

// ///////////////////////////////////////////////////////////////////////////

// PUBLIC

//

// Initialisiert ein Fenster

// ///////////////////////////////////////////////////////////////////////////

int main::init (void)
??<
        // Fensterklasse erstellen

    ::WNDCLASSW windowclass;

        // Fensterklasse nullen

    ::ZeroMemory (&windowclass, sizeof(windowclass));

        // Parameter der Fensterklasse setzen

    windowclass.style               = CS_HREDRAW ??! CS_VREDRAW;              // Neuzeichnen

    windowclass.hbrBackground       = (HBRUSH__*)(5);                       // Hintergrund

    windowclass.hCursor             = ::LoadCursor (NULL, IDC_ARROW);       // Standardcursor

    windowclass.hIcon               = ::LoadIcon (NULL, IDI_APPLICATION);   // Standardicon

    windowclass.hInstance           = instance_;                            // Instanz

    windowclass.lpfnWndProc         = WndProc;                              // Fensterprozedur

    windowclass.lpszClassName       = name_.c_str();                        // Klassenname

       
        // Fensterklasse registrieren

    ::RegisterClassW (&windowclass);
       
        // Fenster erstellen

    hwnd_ = ::CreateWindowW (name_.c_str(), name_.c_str(), style_, 0, 0, width_, height_, NULL, NULL, instance_,
                             this);  // Hier wird der Zeiger auf das erzeugte Objekt übergeben

                       
        // WM_CREATE aufrufen, da durch die Recieverfunktion dies nicht mehr möglich ist

    message_create (hwnd_, NULL);

        // Fenster anzeigen und updaten

    ::ShowWindow   (hwnd_, SW_NORMAL);
    ::UpdateWindow (hwnd_);

        // Hauptschleife aufrufen

    return (run());
??>

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE

//

// Hauptschleife des Programms

// ///////////////////////////////////////////////////////////////////////////

int main::run (void)
??<
        // MessageObjekt

    ::MSG   message;

        // MessageObjekt initialisieren

    ::ZeroMemory (&message, sizeof(message));

            // Hauptschleife

    while (::GetMessage (&message, NULL, 0, 0))
    ??<
            // Nachricht verarbeiten

        ::TranslateMessage (&message);
        ::DispatchMessage  (&message);
    ??>

        // Exitcode zurückgeben

    return (static_cast<int>(message.wParam));
??>

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE

//

// Fensternachrichtenverarbeitung: WM_CREATE

// ///////////////////////////////////////////////////////////////////////////

bool main::message_create (::HWND__* hwnd, ::CREATESTRUCTW* createStruct)
??<
        // Fensterrechteck erstellen

    ::RECT rc = ??<0, 0, width_, height_??>;

        // "Wahre" Fenstergröße holen

    ::AdjustWindowRectEx (&rc, style_, false, 0);
   
        // Fensterposition ausrechnen

    const long centerX = ::GetSystemMetrics (SM_CXFULLSCREEN) / 2 - (::abs(rc.left) + rc.right) / 2;
    const long centerY = ::GetSystemMetrics (SM_CYFULLSCREEN) / 2 - (::abs(rc.top) + rc.bottom) / 2;

        // Fenster neu positionieren

    ::MoveWindow (hwnd, centerX, centerY, (rc.right - rc.left), (rc.bottom - rc.top), true);

    return (true);
??>

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE

//

// Fensternachrichtenverarbeitung: WM_DESTROY

// ///////////////////////////////////////////////////////////////////////////

void main::message_destroy (::HWND__* hwnd)
??<
        // Programmzerstörung durchführen

    ::PostQuitMessage (0);
??>

// ///////////////////////////////////////////////////////////////////////////

// PRIVATE

//

// Die richtige WndProc der Klasse

// ///////////////////////////////////////////////////////////////////////////

long _w64 __stdcall main::DefWindowProc (unsigned int message, unsigned int wParam, long _w64 lParam)
??<
        // Messages verarbeiten

    switch (message)
    ??<
??=pragma warning( disable : 4800 ) // warning C4800: 'BOOL' : forcing value to bool

    HANDLE_MSG (hwnd_, WM_DESTROY,      message_destroy);
??=pragma warning( default : 4800 )
    ??>

        // Nachrichten an Default-Windows-WndProc weiterreichen:

    return ::DefWindowProcW (hwnd_, message, wParam, lParam);
??>


// ///////////////////////////////////////////////////////////////////////////

// PRIVATE

//

// Recieverfindung des Objekts (Fake-WndProc)

// ///////////////////////////////////////////////////////////////////////////

long _w64 __stdcall main::WndProc (::HWND__* hwnd, unsigned int message, unsigned int wParam, long _w64 lParam)
??<         
        // Übergebenen 'this' merken

    if (message == WM_CREATE)
        ::SetWindowLongW (hwnd, GWL_USERDATA, static_cast<long>((long _w64)(reinterpret_cast<CREATESTRUCT*>(lParam)->lpCreateParams)));

        // Sich selbst als Pointer holen

    main* receiver = reinterpret_cast<main*>(static_cast<long _w64>(::GetWindowLongPtrW(hwnd, GWL_USERDATA)));

        // Konnte man sich selbst finden? Wenn nein: Windows WndProc benutzen

    if (!receiver)
        return ::DefWindowProcW (hwnd, message, wParam, lParam);
       
        // Man konnte sich selbst finden: Eigene WndProc ausführen

    return receiver->DefWindowProc (message, wParam, lParam);
??>


    // Einsprungspunkt des Programms

int __stdcall WinMain (::HINSTANCE__* instance, ::HINSTANCE__* prevInstance, char* cmdLine, int cmdShow)
??<
        // Programm durchstarten

    return (main::getInstance().init ());
??>

:)

Anonymous

unregistriert

7

07.01.2006, 16:43

nicht lauffähig

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

8

07.01.2006, 18:21

also beimir läufts :wirbel:

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

9

07.01.2006, 22:59

bin ich betrunken oder steht da wirklich

C-/C++-Quelltext

1
2
3
4
...main(...)
??<
//...

??>
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

10

07.01.2006, 23:00

Lemming
Jop steht da, immer diese alten Verbleibsel aus C. Ich kanns jedenfalls nicht mehr Kompilieren ;)

Werbeanzeige