ERROR_CANNOT_FIND_WND_CLASS



  • ähnliches Problem wie der Thread vor meinem,

    Ich weiß leider nicht "warum" beim Fensterkreiren Windows die Klasse nicht findet, die ich kurz zuvor registriert habe. Hier der Source

    WNDCLASS wc;
        wc.style          = CS_HREDRAW | CS_VREDRAW;
        wc.cbClsExtra     = 0;
        wc.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground  = (HBRUSH)(COLOR_BTNFACE+1);
        wc.lpszMenuName   = NULL;
    
        wc.cbWndExtra          =2*sizeof(int);
        wc.hIcon               = NULL;
        wc.lpfnWndProc         = StWnd;
        wc.lpszClassName       = "StateWindow";
    
        string strr="";
        ATOM class_=RegisterClass(&wc);
        if(class_!=0){strr=" class registred ";
        strr+=int_to_str(GetLastError());
        }
        else{ strr="there was an unidentified error";};
    
        char*strrr=new char[strr.size()+1];
      strcpy(strrr,strr.c_str());
    
      int iAntwort = MessageBox(NULL, strrr, "Construct StateWindow",
                                       MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
      delete[] strrr;
       this->dwExStyle=WS_EX_CLIENTEDGE;
       this->lpClassName="StateWindow";
       this->lpWindowName="lalala"; 
    
       this->dwStyle=WS_CHILD | WS_VISIBLE;
       this->data.x=xPos;
       this->data.y=yPos;
       this->data.nWidth=xSize;
       this->data.nHeight=ySize;
       this->hWndParent=hwnd;
       this->hMenu=NULL;
       this->hInstance=instance;
       this->lpParam=NULL;
    
          this->handle = CreateWindowEx(this->dwExStyle,this->lpClassName,this->lpWindowName,this->dwStyle,this->data.x,this->data.y,this->data.nWidth,this->data.nHeight,
                               this->hWndParent,this->hMenu,this->hInstance,this->lpParam);
    
     strr="";
       if(this->handle != NULL){strr="WindowCreated";}
       else{strr="Oh Oh, there has been an error: ";
       strr+=int_to_str(GetLastError());
       }
       char*st_rrr=new char[strr.size()+1];
       strcpy(st_rrr,strr.c_str());
    
    iAntwort = MessageBox(NULL, st_rrr, "CreateStateWindow",
                                       MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    
       delete[] st_rrr;
    

    Die erste Message gibt mir ein Ok mit ner 2 raus, anscheinend classAtom
    Die zweite sagt aber "ohoh :1407" also Klasse nicht gefunden, komischer weise hatte das letztens alles noch sooooo schön funktioniert,

    Selbst das Class Atom ins Lowword von lpsClassname schieben hilft net,..

    weiß jemand woran das liegen könnte?? Ich bin gerade echt am Verzweifeln

    grüße und dank


  • Mod

    Was Du hier machst ist extrem gefährlich. Du solltest Strukturen immer vollständig initialisiert.
    WNDCLASS::hInstance wurde nicht gesetzt.

    CreateWindow kann also die Fensterklasse nicht finden. Der Fehler ist folgerichtig selbst gemacht.



  • Als ich bei WNDCLASS die instance mit übergeben hatte,
    bekam ich den Fehler 87: ERROR_INVALID_PARAMETER

    Anscheinend ,also bei mir in dem fall,
    hatte der Klassenname ärger gemacht,
    das habe ich jetzt mit

    char*Classenname=new char[11];
    strcpy(Classenname,"StateWindow");
    

    kompensieren können.

    Die WNDCLASS habe ich durch eine WNDCLASSEX (wegen cbSize) struktur ersetzt
    und die Instance wieder mitübergeben.

    Jetzt scheint es zu funktionieren und kann die CreateWindow wieder in eine andere (Klassen-)Methode auslagern.

    Mann mann mann, das hat mich jetzt aber nerven gekostet.

    Ich danke Dir 🙂


  • Mod

    zeusosc schrieb:

    Als ich bei WNDCLASS die instance mit übergeben hatte,
    bekam ich den Fehler 87: ERROR_INVALID_PARAMETER

    Anscheinend ,also bei mir in dem fall,
    hatte der Klassenname ärger gemacht,
    das habe ich jetzt mit

    Kann ich mir nicht vorstellen... Dan hast Du Unsinn übergeben. Zudem benötigst Du keinen mit new allokierten Zeiger um einen Klassenamen anzugeben.
    Das zuweisen der Konstante würde genügen!


Anmelden zum Antworten