[Newb]: CreateWindowEx liefert 0 zurück
-
Ich hab mir, zum vereinfachen eine Klasse geschrieben:
LRESULT CALLBACK Shice_Handler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wparam, lparam); } class Shice { protected: LPDIRECT3D9 lpD3D; HWND window; LPDIRECT3DDEVICE9 device; void InitD3D(); public: class Exception { protected: std::string msg; public: const char* getmsg(){return msg.c_str();} Exception(std::string param) { msg = param; } }; struct WindowOptions { LPCTSTR MenuName; LPCTSTR ClassName; HICON Icon; HCURSOR Cursor; HBRUSH Color; int width, height; LPCTSTR Text; LPCTSTR Over; }; protected: void CreateMainWindow(HINSTANCE hinst, WindowOptions options); public: Shice(HINSTANCE hinst) { WindowOptions options; options.ClassName = "Shittest"; options.Color = (HBRUSH)GetStockObject(WHITE_BRUSH); options.Cursor = LoadCursor(0, IDC_ARROW); options.Icon = LoadIcon(0, IDI_APPLICATION); options.MenuName = 0; options.width = 800; options.height = 600; options.Text = "Shicetest"; options.Over = "Oben?"; try { CreateMainWindow(hinst, options); } catch(Shice::Exception& ex){MessageBox(0, ex.getmsg(), "Fehler", MB_OK | MB_ICONEXCLAMATION);} } ~Shice() { //device->Release(); lpD3D->Release(); } }; void Shice::CreateMainWindow(HINSTANCE hinst, WindowOptions options) { WNDCLASSEX wcx; wcx.cbSize = sizeof(wcx); wcx.lpszClassName = options.ClassName; wcx.lpfnWndProc = Shice_Handler; wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.hInstance = hinst; wcx.hIcon = options.Icon; wcx.hCursor = options.Cursor; wcx.hIconSm = options.Icon; wcx.hbrBackground = options.Color; wcx.lpszMenuName = options.MenuName; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; if(!RegisterClassEx(&wcx)) { throw Exception("Fenster konnte nicht registriert werden"); } window = CreateWindowEx(0, options.Text, options.Over, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, options.width, options.height, 0, 0, hinst, 0); if(!window) { throw Exception("Fenster konnte nicht erzeugt werden"); } }Dann kommt die Nachricht, dass das Fenster nicht erzeugt werden konnte, warum nicht? Wie finde ichs heraus? UNd warum kann VC++ die .exe nach dem ersten kompilieren nicht mehr öffnen und ich muss mich dauernd an- und wieder abmelden?
thx im voraus!
-
Könntest du mal deinen Code auf das wesentliche minimieren? Also ohne die ganze Shice-Klasse.

-
Wenn man bei CreateWindowEx options.Text durch "Shittest" ersetzt funktioniert es.
-
Du solltest es also durch options.ClassName ersetzen
-
:DDDDDDDDDDDDD schrieb:
Du solltest es also durch options.ClassName ersetzen
Das wollte ich auch gerade empfehlen

-
Hallo,
Glamdrink schrieb:
UNd warum kann VC++ die .exe nach dem ersten kompilieren nicht mehr öffnen und ich muss mich dauernd an- und wieder abmelden
Ich denke mal, dass die Exe noch läuft. Einfach mal im Taskmanager nachschauen.
MfG
tuküe
-
UNd warum kann VC++ die .exe nach dem ersten kompilieren nicht mehr öffnen und ich muss mich dauernd an- und wieder abmelden
Dafür solltest du mal den Rest des Codes zeigen. Du hast ja noch nicht mal die WinMain geliefert.
