CreateWindow liefert Error 2?



  • Hoi,
    ich versuch gerade auf meinem Windows Mobile ein Child Fenster zu erstellen, allerdings liefert CreateWindow immer den Error '2' zurück, und ich komm einfach nicht darauf, warum.

    WNDCLASS wc;
    	wc.style         = CS_HREDRAW | CS_VREDRAW;
    	wc.lpfnWndProc   = TouchPadProc;
    	wc.cbClsExtra    = 0;
    	wc.cbWndExtra    = 0;
    	wc.hInstance     = hInstance;
    	wc.hIcon         =0;
    	wc.hCursor       = 0;
    	wc.hbrBackground       = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
    	wc.lpszMenuName  = 0;
    	wc.lpszClassName = szpad;
    
    	if(!RegisterClass(&wc))
    	{
    		MessageBox(hWnd,L"Fehler",0,0);
    	}
    
    .....
    ...
    ..
    g_hwnd_Pad = CreateWindow( szpad,
    				0,
    				WS_CHILD | WS_VISIBLE | WS_DLGFRAME,
    				10,
    				50,
    				50,
    				50,
    				hWnd,
    				NULL,
    				g_hInst,
    				NULL);
    			 if(!g_hwnd_Pad)
    			 {
    				 int nError = GetLastError();
    				 wchar_t szError[] = L"__________";
    				swprintf(szError,L"%d",nError);
    				 MessageBox(hWnd,szError,0,0);
    			 }
    

    Wär schön, wenn mir wer helfen könnte, thx.

    PS: Das ganze soll eine Art Touchpad werden, also quasi ein eigenes Steuerelement, wie ein Button. Bin ich da richt, wenn ich ein eigenes Steuerelement so 'erfinden' will, oder soll ich das anders machen?



  • lpszMenuName ist ein Zeiger auf einen String. Du gibst aber einen Integer (0) an.
    Bei wc.hCursor und wc.hIcon muß ein gültiges Handle stehen. Einfach 0 geht nicht.
    wc.cbSize hast Du vergessen.

    Windlcass wc;
       wc.cbSize        =  sizeof(WNDCLASSEX);
       wc.style         =  CS_HREDRAW | CS_VREDRAW;
       wc.lpfnWndProc   =  WndProc;
       wc.cbClsExtra    =  0;
       wc.cbWndExtra    =  0;
       wc.hInstance     =  hInstance;
       wc.hCursor       =  LoadCursor(NULL,IDC_ARROW);
       wc.hIcon         =  LoadIcon(NULL, IDI_APPLICATION);
       wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);
       wc.lpszClassName =  lpszAppName;
       wc.lpszMenuName  =  lpszAppName;
    


  • Das ganze hab ich eigentlich fast 1:1 von meinem Parentwindow übernommen, und das funktioniert ja. cbSize gibts bei mir gar nicht.



  • cbSize muß aber dabei sein, damit Windows weiß, wievliel Speicher es reservieren muß.
    Außerdem: Bei einem Child-Window wird in CreateWindow als hInstance nicht einfach hInstance angegeben, sondern ((LPCREATESTRUCT)lParam)->hInstance (Verweis auf die hInstance des Parent-Windows).


  • Mod

    Elektronix schrieb:

    cbSize muß aber dabei sein, damit Windows weiß, wievliel Speicher es reservieren muß.

    WNDCLASS hat einen cbSize Member!

    Elektronix schrieb:

    Außerdem: Bei einem Child-Window wird in CreateWindow als hInstance nicht einfach hInstance angegeben, sondern ((LPCREATESTRUCT)lParam)->hInstance (Verweis auf die hInstance des Parent-Windows).

    Falsch: Man gibt das hInstance an, dass die entsprechende Fensterklasse registriert hat bzw. hostet. Wenn ds Kindfenster durch eine DLL gehostet wird, muss deren hInstance angegeben werden.



  • Martin Richter schrieb:

    Man gibt das hInstance an, dass die entsprechende Fensterklasse registriert hat bzw. hostet. Wenn ds Kindfenster durch eine DLL gehostet wird, muss deren hInstance angegeben werden.

    Ja, genaugenommen schon. Aber er hat ja das Parent nicht in ner DLL, sondern selbst getippt.


Log in to reply