WNDCLASSEX - Eigenschaften verursachen error C2440
-
Guten Tag,
meine Wenigkeit hat sich zur Aufgabe gemacht eine eigene Klasse zu schreiben, die das erstellen eines Fenster einfacher und Übersichtlicher machen soll.
Nun kommt es aber gerade bei der Klasse WNDCLASSEX und der Zuweisung der Attribute zu Fehlern, anscheinend ist eine Konvertierung nicht möglich.Mein kleines Prog sieht bisher so aus:
#include "D3DClass.h" INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { MyWndClass *MyWnd = new MyWndClass(hInstance); MyWnd->CreateMainWindow(); return 0; }#ifndef D3DCLASS_H #define D3DCLASS_H #include <d3d9.h> #include <d3dx9.h> class MyWndClass { public: MyWndClass(HINSTANCE hInstance); ~MyWndClass(); HWND CreateMainWindow(); LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); HWND GethWnd(); HINSTANCE GethInstance(); private: HWND m_hWnd; HINSTANCE m_hInstance; }; ... #endif#include "D3DClass.h" // DEKLARATIONEN FÜR MYWNDCLASS MyWndClass::MyWndClass(HINSTANCE hInstance) { m_hInstance = hInstance; m_hWnd = NULL; } MyWndClass::~MyWndClass() { } HWND MyWndClass::CreateMainWindow() { WNDCLASSEX wndClass = { sizeof(WNDCLASSEX), CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_OWNDC, 19: MessageHandler, 20: 0, 21: 0, 22: GethInstance(), 23: LoadIcon(NULL,IDI_WINLOGO), 24: LoadCursor(NULL,IDC_ARROW), 25: (HBRUSH)GetStockObject(WHITE_BRUSH), 26: NULL, 27: "MyWndClass", 28: LoadIcon(NULL,IDI_WINLOGO) 29: }; RegisterClassEx(&wndClass); m_hWnd = CreateWindowEx( NULL, "MyWndClass", "MyD3D-Window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 1024, 768, NULL, NULL, GethInstance(), NULL); } LRESULT CALLBACK MyWndClass::MessageHandler(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { //Nachricht auswerten switch(msg) { case WM_DESTROY: { // Fenster schließen PostQuitMessage(0); return 0; } } return (DefWindowProc(hwnd,msg,wParam,lParam)); } HINSTANCE MyWndClass::GethInstance() { return m_hInstance; } HWND MyWndClass::GethWnd() { return m_hWnd; } ...Die Fehler sind folgende:
D3DClass.cpp(19) : error C2440: 'initializing' : '' kann nicht in 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' konvertiert werden
Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
D3DClass.cpp(22) : error C2440: 'initializing' : 'struct HINSTANCE__ *' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
D3DClass.cpp(23) : error C2440: 'initializing' : 'struct HICON__ *' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
D3DClass.cpp(24) : error C2440: 'initializing' : 'struct HICON__ *' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
D3DClass.cpp(25) : error C2440: 'initializing' : 'struct HBRUSH__ *' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
D3DClass.cpp(27) : error C2440: 'initializing' : 'char [11]' kann nicht in 'struct HINSTANCE__ *' konvertiert werden
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
D3DClass.cpp(29) : error C2440: 'initializing' : 'struct HICON__ *' kann nicht in 'struct HINSTANCE__ *' konvertiert werden
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Fehler beim Ausführen von cl.exe.D3DClass.obj - 7 Fehler, 0 Warnung(en)
Hoffe ihr könnt mir helfen.
Mit freundlichen grüßen
PhiL
-
Zeile 19: Eine normale Methode kann nicht als Funktionszeiger übergeben werden (da fehlt der Bezug zum this-Zeiger), das geht nur mit statischen Methoden oder globalen Funktionen.
Die übrigen Fehler könnten Folgefehler sein (das sieht so aus, als ob die einzelnen Initialisierungen sich "verschoben" hätten und der Compiler die beiden 0 überlesen hat).
-
Danke.
Hab die Funktion static gesetzt. Jetzt funktionierts. : )