edit-box verursacht systemabsturtz



  • Hi
    Ich hab in meinem Prog 3 Fenster, die sich ziehmlich ähnlich sehen (Ähnliche Elemente haben) -> 2 Statics und ein Textfeld.
    In 2 Fenstern gehts, als ich aber das 3. Gemacht habe, Stürtzt mein System beim Start des Programms ab

    zum Absturtz:
    2 mal Bluescreen, und dann ca 5 weiße Fehlermeldungen in denen was von Explorer.exe und Kernel32 steht. einmal stand sogar Zitat:"Windows muss neu Installiert werden"

    Ich habe inzwischen 2 Ungewöhnlichkeiten gefunden:

    Wenn ich in WM_PAINT des "Kaputten" Fensters eine Messagebox mache

    MessageBox(NULL,"","",MB_OK);
    

    Wird diese MessageBox, beim öffnen der anderen beiden Fenster ebenfalls angezeigt, aber nicht nur einmal, sondern drei mal.

    UND
    In diesem sonst Funktionierendem Fentster werden keine edit-felder mehr angezeigt.

    =>
    Es schein an den edit-boxen zu liegen, weil diese in den beiden "heilen" Fenstern nicht mehr angezeigt werden, und in dem "kaputten" Fenster zum Systemabsturtz führen

    Befor ich das 3. Fenster bemacht habe, haben die anderen beiden Problemlos Funktioniert. Aber das 3. Fenster ist quase ne 1:1 Kopie der andern Beiden Fenstern, es wurden nur nen Paar Variable-namen geändert.

    Was hab ich Falsch gemacht?? bzw, wie mache ich das wieder heile??

    ps.: wer code braucht, meldet sich bitte, ich weiß überhaut nicht, wo der Fehler ist, und das gesammte Projekt ist >1500 Zeilen



  • Ohne konkreten Code schwer zu sagen, aber kann es sein, dass du für die Fenster die selbe WndProc verwendest? Das würde zumindest das Verhalten mit MessageBox in WM_PAINT vielleicht erklären - wobei so ein Aufruf nicht gerade empfehlenswert ist, das WM_PAINT sehr oft gesendet wird und du damit dann meist in einer Endlosschleife endest 🙄



  • Poste mal den Code zum Erstellen der Fenster und der Edits.



  • Die MessageBox hab iczh da auch nur zu Testzwecken reingemacht UND NEIN, das sind völlig andere Proceduren:

    wc_additem.lpfnWndProc = WndProc_AddItem;
    //...
    wc_edit.lpfnWndProc = WndProc_Edit;
    


  • Ich hab jetzt mal das "Schlimme" Fenster rausgenommen (Alles in /* */ gesetzt)
    Und schon funktionierte ALLES Perfekt...

    Es liegt also NUR an diesem einen Fenster...



  • Dann zeig doch mal das, was du auskommentiert hast - vielleicht hilft das ja schon weiter 🙄



  • inna WinMain:

    //...
    wc_edit.style         = CS_HREDRAW | CS_VREDRAW; //CS = Class Style
    wc_edit.lpfnWndProc   = WndProc_Edit;
    wc_edit.cbClsExtra    = 0;
    wc_edit.cbWndExtra    = 0;
    wc_edit.hInstance     = hInstance;
    wc_edit.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc_edit.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc_edit.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wc_edit.lpszMenuName  = NULL;
    wc_edit.lpszClassName = szAppNameE;
    //...
    if(!RegisterClass(&wc_edit))    bRegisterClassFailed = true;
    //...
    hWnd_edit    = CreateWindow(szAppNameE,  szAppName, WS_CAPTION, 100, 120, 400, 195, NULL, NULL, hInstance, NULL);
    //...
    ShowWindow(hWnd_edit, SW_HIDE);
    UpdateWindow(hWnd_edit);
    

    und die komplette WndProc:

    LRESULT CALLBACK WndProc_Edit(HWND hWnd, UINT messageE, WPARAM wParam, LPARAM lParam)
    {
      PAINTSTRUCT    ps;
      HDC            hDC;
      HFONT          hFontE;
      static HWND    hwndStaticOK, hwndStaticABBRECHEN;
      static HANDLE  hIconOK, hIconABBRECHEN;
    
     switch (messageE)
     {
          case WM_CREATE:
          {
           hWndTXTKommentar = CreateWindow("edit", "", WS_CHILD | WS_VISIBLE | ES_WANTRETURN , 105, 40, 180, 17, hWnd, (HMENU) 13315, (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
    
           hFontE = CreateFont(15, 0, 0, 0, 0, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, TEXT("Courier New"));
           SendMessage(hWndTXTKommentar, WM_SETFONT, (WPARAM)hFontE, 0);  
    
           hIconOK = LoadImage(GetModuleHandle(NULL), "Bitmaps\\bmpOK.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
           hwndStaticOK = CreateWindow("STATIC", "", WS_CHILD | SS_NOTIFY | WS_VISIBLE | SS_BITMAP, 16, 135, 27, 17, hWnd, (HMENU)ID_eOK, (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
           SendMessage(hwndStaticOK, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM)(HANDLE) hIconOK);
    
           hIconABBRECHEN = LoadImage(GetModuleHandle(NULL), "Bitmaps\\bmpAB.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
           hwndStaticABBRECHEN = CreateWindow("STATIC", "", WS_CHILD | SS_NOTIFY | WS_VISIBLE | SS_BITMAP, 49, 135, 80, 17, hWnd, (HMENU)ID_eABBRECHEN, (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
           SendMessage(hwndStaticABBRECHEN, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM)(HANDLE) hIconABBRECHEN);    
    
           break;
          }
          case WM_PAINT: //---------------------------------------------------------
          {
    
             hDC = BeginPaint(hWnd, &ps);
             {         
              DrawBorder_E(hDC, hWnd);
    
              color tc; 
              color bg;
              font Schrift;
    
               tc.init(0,255,0);
               bg.init(0,0,0);
               Schrift.init(15,0,false,false,false,"Courier New");
                output(hDC, hWnd, 10, 8, Schrift, tc, bg, "Kommentar bearbeiten:");
             }
             EndPaint(hWnd, &ps);
             break;
          }
          case WM_COMMAND: 
          {
             switch(LOWORD(wParam)) //Wenn auf ein Icon geklickt wurde:
             {
               case ID_eOK: 
               {
    
                ShowWindow(hWnd, SW_HIDE);
                break;
               }
               case ID_eABBRECHEN:
               {
                ShowWindow(hWnd, SW_HIDE);
                break;
               }
             }
           break;
          }  
     } 
     return DefWindowProc(hWnd, messageE, wParam, lParam);
    }
    


  • Ein Programm, das im Usermode läuft kann, keine BlueScreens verursachen.



  • Unter Win 95/98 bestimmt. 🤡 🤡



  • Wenn du Nachrichten abfängst solltest du (wenn nicht in der Doku explizit anders erwähnt) 0 zurückgeben und nicht DefWindowProc aufrufen.
    Und was genau enthält szAppNameE bzw. hast du auch für jede Fensterklasse, die du registrierst lpszClassName geändert 🙄



  • flenders schrieb:

    Und was genau enthält szAppNameE bzw. hast du auch für jede Fensterklasse, die du registrierst lpszClassName geändert 🙄

    JA ->

    const char szAppName[]  = "Main";
    const char szAppNameAI[]= "AddItem";
    const char szAppNameN[] = "Note";
    const char szAppNameI[] = "Info";
    const char szAppNameE[] = "Edit"; //Das ist das "Schlimme" Fenster
    


  • "Edit" gibt es schon.



  • ker leck mich am arsch, wie konnte ich das nur übersehen 😡
    Und wegen sonem kleinen Fehler, rege ich mich die ganze woche über auf...

    1000 dank, ROFL.



  • LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL 🕶


Anmelden zum Antworten