Verzweiflung
-
Hallo,
ich sitze jetz schon geschlagene 2std vor meinem Problem.
Hier mal der Quellcode:
class Fenstererstellung { public: Fenstererstellung (); ~Fenstererstellung (); HWND Parentwindow (); LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int ncmdshow); private: HINSTANCE hInst; HWND hWnd; MSG message; WNDCLASSEX wndEx; };int WINAPI Fenstererstellung::WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int ncmdshow) { hWnd = Parentwindow(); while (GetMessage (&message, NULL, 0, 0)) { TranslateMessage (&message); DispatchMessage (&message); } return (int)(message.wParam); } LRESULT CALLBACK Fenstererstellung::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage (0); return 0; break; case WM_COMMAND: switch (wParam) { case ID_BTN_BEENDEN: PostQuitMessage (0); return 0; break; case ID_BTN_DATSAVE: return 0; break; } } return (DefWindowProc (hWnd, message, wParam, lParam)); } HWND Fenstererstellung::Parentwindow(HINSTANCE hInst) { wndEx.cbSize = sizeof(WNDCLASSEX); wndEx.style = CS_HREDRAW | CS_VREDRAW; wndEx.lpfnWndProc = WindowProc; wndEx.cbClsExtra = 0; wndEx.cbWndExtra = 0; wndEx.hInstance = hInst; wndEx.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndEx.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wndEx.hCursor = LoadCursor (NULL, IDC_ARROW); wndEx.hbrBackground = (HBRUSH)COLOR_BACKGROUND +1; wndEx.lpszMenuName = NULL; wndEx.lpszClassName = ""; if(!RegisterClassEx (&wndEx) ) return (NULL); hWnd = CreateWindowEx (NULL, "", "TEST", WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 500, 509, NULL, NULL, hInst, NULL); return (hWnd); }Kompilerfehler:
...\fenstererstellung.cpp(56): error C3867: "Fenstererstellung::WindowProc": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&Fenstererstellung::WindowProc", um einen Zeiger auf den Member zu erstellen. ...\fenstererstellung.cpp(56) : error C2440: '=': 'LRESULT (__stdcall Fenstererstellung::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich istKönntet mir einer sagen was daran falsch ist???

Gruß
-
geht
wndEx.lpfnWndProc = WindowProc;?
-
Fenstererstellung::WindowProcsollte als 'static' deklariert werden. Ansonsten passt die Parameterliste nicht, weil der erste Parameter in Klassenfunktionen immer 'this' ist.
-
geht
C/C++ Code:
wndEx.lpfnWndProc = WindowProc;
C/C++ Code:
wndEx.lpfnWndProc = WindowProc;
C/C++ Code:
wndEx.lpfnWndProc = WindowProc;?
Hab ich eh gemacht ?!
ich habs mal so gemacht, haut aber nicht hin:
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
-
Ist WindowProc ein reservierter Begriff? Hilft das Umbenennen zu MyWindowProc?
-
Es kommt zwar der vorherige Kompilerfehler nicht mehr, aber nun erscheint dieser:
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup". 1>... : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
ich versteh das nicht, ich hab schon zig Fenster erstellt, nur bei diesem hakts

kann das was damit zu tun haben, dass ich alles in einer Klasse definiert hab?Gruß
-
Mit der WinMain in der Fensterklasse kann der Linker nichts anfangen. Er braucht eine eigenständige WinMain-Funktion.
-
Jetz passts, danke
