[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. 👎 👎 👎 👎 👎 👎 👎 👎 👎 👎


Anmelden zum Antworten