Halli Hallo,
ich habe zwei Funktion ...
z.B. Wenn das Fenster geschlossen wird, dass alle Variablen zerstört werden und u.a. auch die DirectX-Schnittstelle released wird, oder bei einem Tastendruck ein Ereignis eintrift.
Die Funktion Show() registriert eine Fensterklasse (WNDCLASSEX) mit RegisterClassEx() und erzeugt mir das Fensterhandle mit CreateWindow(). Danach wird das erzeugte Fenster-Handle an eine intere Variable übergeben.
Mein Problem ist nun das Folgende:
Ich muss beim füllen von WNDCLASSEX den Message-Handler angeben. Dieser ist ja in der gleichen Klasse implementiert. Also ganz einfach (denke ich mir):
Dann knallts ganz genau 1x.
Dabei drückt der Compiler sich wie folgt aus:
Ich habe versucht herauszufinden, was ein "overloaded-function" ist. Leider ohne erfolg.
Klar bin ich dem Englischen mächtig und habe direkt interpretiert: Eine überladene Funktion kann hier anscheinend nicht als Parameter übergeben werden.
Leider gibts da einen kleinen Hacken: "MessageHandler" ist keine überladene Funktion! - Zumindest habe ich in meinem Source keine weitere Funktion, die "MessageHandler" heißt, in der Klasse "xFramework".
Ich habe auch schon gedacht, dass es vielleicht eine Funktion "MessageHandler" von Haus aus gibt. (Also schon vordefiniert in der windows.h)
Auch das habe ich ausgeschlossen, da ich die Funktion bereits "MsgHandler" getauft habe. Allerdings führte dies zu dem gleichen Fehler.
Ich poste euch die entsprechenden Stellen im Quellcode einmal:
==> Methode "Show()"
==> Methode "MessageHandler()"
Ich bin allmäglich mit meinem Latein am Ende und frage nun euch:
Könnt ihr mir einen Tipp geben, wo der Fehler liegt? - Oder mir gar sagen, wie ich den Fehler beheben kann?
Ich hoffe auf eure Hilfe!
ich habe zwei Funktion ...
- Xavion::xFramework::MessageHandler(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
- Xavion::xFrameWork::Show()
z.B. Wenn das Fenster geschlossen wird, dass alle Variablen zerstört werden und u.a. auch die DirectX-Schnittstelle released wird, oder bei einem Tastendruck ein Ereignis eintrift.
Die Funktion Show() registriert eine Fensterklasse (WNDCLASSEX) mit RegisterClassEx() und erzeugt mir das Fensterhandle mit CreateWindow(). Danach wird das erzeugte Fenster-Handle an eine intere Variable übergeben.
Mein Problem ist nun das Folgende:
Ich muss beim füllen von WNDCLASSEX den Message-Handler angeben. Dieser ist ja in der gleichen Klasse implementiert. Also ganz einfach (denke ich mir):
Code:
// Fensterinformationen ausfüllen
WNDCLASSEX wndClass =
{
sizeof( WNDCLASSEX ),
CS_CLASSDC,
this->MessageHandler,
0,
0,
GetModuleHandle( NULL ),
NULL,
NULL,
NULL,
NULL,
this->attWindowTitle,
NULL
};
// Fenster registrieren
RegisterClassEx( &wndClass );
Dann knallts ganz genau 1x.
Dabei drückt der Compiler sich wie folgt aus:
Code:
error C2440: 'Initialisierung': 'overloaded-function' kann nicht in 'WNDPROC' konvertiert werden
Ich habe versucht herauszufinden, was ein "overloaded-function" ist. Leider ohne erfolg.
Klar bin ich dem Englischen mächtig und habe direkt interpretiert: Eine überladene Funktion kann hier anscheinend nicht als Parameter übergeben werden.
Leider gibts da einen kleinen Hacken: "MessageHandler" ist keine überladene Funktion! - Zumindest habe ich in meinem Source keine weitere Funktion, die "MessageHandler" heißt, in der Klasse "xFramework".
Ich habe auch schon gedacht, dass es vielleicht eine Funktion "MessageHandler" von Haus aus gibt. (Also schon vordefiniert in der windows.h)
Auch das habe ich ausgeschlossen, da ich die Funktion bereits "MsgHandler" getauft habe. Allerdings führte dies zu dem gleichen Fehler.
Ich poste euch die entsprechenden Stellen im Quellcode einmal:
==> Methode "Show()"
Code:
void Xavion::xFramework::Show( )
{
// Rückgabevariable
HWND hWindBuffer;
// Fensterinformationen ausfüllen
WNDCLASSEX wndClass = {
sizeof( WNDCLASSEX ),
CS_CLASSDC,
NULL, // TODO Message-Handler ermitteln
0,
0,
GetModuleHandle( NULL ),
NULL,
NULL,
NULL,
NULL,
this->attWindowTitle,
NULL
};
// Fenster registrieren
RegisterClassEx( &wndClass );
// Fenster erzeugen
hWindBuffer = CreateWindow(
this->attWindowTitle,
this->attWindowTitle,
WS_OVERLAPPEDWINDOW,
this->attWindowPosition.x,
this->attWindowPosition.y,
this->attWindowSize.x,
this->attWindowSize.y,
GetDesktopWindow( ),
NULL,
wndClass.hInstance,
NULL
);
// Prüfen, ob das Fenster erzeugt werden konnte
// ==> Falls YES: Fenster anzeigen
if( &hWindBuffer != NULL )
{
// Fensterhandle übernehmen
this->attWindowHandle = &hWindBuffer;
// Fenster anzeigen
ShowWindow( *this->attWindowHandle, SW_SHOW );
}
}
Code:
LRESULT WINAPI Xavion::xFramework::MessageHandler( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
// Eingehende Nachricht analysieren
switch ( iMessage )
{
// Fenster wird geschlossen
case WM_DESTROY:
// Fenster schließen
this->Close( );
break;
// Fenster wird fokusiert
case WM_SETFOCUS:
// Fenster aktualisieren
this->ReNew( );
break;
// Taste wurde gedrückt
case WM_KEYDOWN:
switch( wParam )
{
// ESC-Taste
case VK_ESCAPE:
// Fenster schließen
this->Close( );
break;
}
break;
}
// Funktion terminieren
return DefWindowProc( hWnd, iMessage, wParam, lParam );
}
Ich bin allmäglich mit meinem Latein am Ende und frage nun euch:
Könnt ihr mir einen Tipp geben, wo der Fehler liegt? - Oder mir gar sagen, wie ich den Fehler beheben kann?
Ich hoffe auf eure Hilfe!