Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bei WM_CREATE Stürtzt das sys ab

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
24.02.2005, 17:28 Uhr
RedEagle



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

der Betrefende code:

C++:
       hWndTXTKommentar = CreateWindow("edit", "", WS_CHILD | WS_VISIBLE | ES_WANTRETURN , 105, 40, 180, 17, hWnd, (HMENU) 217, (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);    


bis auf:
hWndTXTKommentar
hFontE
ID_eABBRECHEN
ID_eOK
Habe ich nichts geändert.

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"

Es liegt nur an dem inhalt in WM_CREATE. Wenn ich den Inhalt weg mache, läuft alles Problemlos...
Was hab ich da Falsch gemacht??
--
MFG RedEagle

Dieser Post wurde am 24.02.2005 um 17:34 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.02.2005, 19:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


lass mal die bitmap-loads weg und probiers dann, bzw lad mal mit debugger und immer zeile für zeile durchführen, welche zeile den error verursacht
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.02.2005, 21:37 Uhr
RedEagle



Mit nem Debugger kann ich nicht umgehen, deshalb hab ichs auf meine Art versucht:

C++:
MessageBox(NULL,"1","1",MB_OK);

hWndTXTKommentar = CreateWindow("edit", "", WS_CHILD | WS_VISIBLE | ES_WANTRETURN , 105, 40, 180, 17, hWnd, (HMENU) 13315, (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);

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

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"));

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

SendMessage(hWndTXTKommentar, WM_SETFONT, (WPARAM)hFontE, 0);  

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



Ergebnis:
MessageBox 1 wird angezeigt. Bis dahin gibts noch keine Probleme.
Wenn ich dann auf [OK] klicke, wird die MessageBox 1 wieder angezeigt.
Also quasi Endloswiderholung von MessageBox 1
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.02.2005, 22:32 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hmm wie hast du WM_CREATE definiert, der ruft scheinbar für jedes Fenster/-item dein WM_CREATE auf ... das ist wahrscheinlich der fehler. mach mal folgendes:


C++:
if(hWnd == hWndMain)
{
   hWndTxt ...
}



also hWnd ist von deiner DlgProc, hWndMain ist dein Hauptfenster.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.02.2005, 00:19 Uhr
RedEagle



Wie DlgProc?? Es ist KEIN Dialog (CreateDialog()

Hab mal in WM_PAINT (Was Problemlos läuft) Folgendes Reingemacht:

C++:
if(hWnd_Edit == hWnd_Main) MessageBox(NULL,"hWnd_Edit == hWnd_Main","",MB_OK);
if(hWnd_Edit == hWnd)      MessageBox(NULL,"hWnd_Edit == hWnd","",MB_OK);


hWnd_Edit ist das Fenster, das die Probleme macht (WinMain(), aber Global)
hWnd_Main ist mein Hauptfenster, Was Problemlos funktioniert.
hWnd ist von "WndProc_Edit", also das, womit ich mit Arbeite

Laut Meldung, ist hWnd_Edit == hWnd, also so, wie es sein sollte, und auch in den Beiden Funktionierenden Fenstern ist.

---
Wie kann es den sein, das der selbe code (einzigste Änderung: ein Vaiable-namen), 2 mal Funktioniert, und beim 3. mal Das system Abstürtzen lässt??

--
MFG RedEagle

Dieser Post wurde am 26.02.2005 um 00:22 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.02.2005, 08:49 Uhr
RedEagle



Mir ist gerade noch was aufgefallen:
Wenn ich jetzt die Beiden anderen (Funktionierenden) Fenster öffne, werden auch die beiden MessageBoxes angezeigt, obwohl die garnicht im code stehen.

=> Irgendwie ist da ne Verbindung. Aber wo??

Aus dem "Kaputten" fenster:

C++:
if(hWnd_Edit == hWnd_Main) MessageBox(NULL,"hWnd_Edit == hWnd_Main","",MB_OK);
MessageBox(NULL,"","",MB_OK); //Diese Messagebox wird 3 mal angezeigt in bei einem Anderen Fenster angezeigt
if(hWnd_Edit == hWnd)      MessageBox(NULL,"hWnd_Edit == hWnd","",MB_OK);



UND
In diesem sonst Funktionierendem Fentster werden keine edit-felder mehr angezeigt.
Allerdings nur solange, wie ich die MessageBoxes im code des Anderen fensters habe, wenn ich die lösche laufen die beiden heilen Fenster wieder
Doch nicht, jetzt isses auch im Ar***
bzw Beide

Es schein aber 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
--
MFG RedEagle

Dieser Post wurde am 26.02.2005 um 08:58 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.02.2005, 09:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


deine Nachrichtenschleife wo du WM_*-Messages verarbeitet, verarbeitet diese Nachrichten ALLER Fenster, deshalb darfst du nur DANN deine "Subfenster" bzw Editboxen erstellen wenn hWnd mit dem hWnd deines Fensters/Dialogs übereinstimmt. Das meinte ich ...
Denn sonst gibts ne endlosschleife
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.02.2005, 09:30 Uhr
RedEagle



hä??
Also darf ich WM_CREATE nur benutzen, wenn das Fenster auch angezeit wird??
Ich hab doch für jedes Fenster eine eigene Nachrichtenschkleife!?!?

C++:
wc_info.lpfnWndProc = WndProc_Info;
//...
wc_edit.lpfnWndProc = WndProc_Edit;


Und warum ging das denn, befor das 3. Fenster gemacht habe.
also als nur das Heupt-fenster und 2 andere da waren

ps.: Sicher, dass wenn ich hWnd==hWndMain mache, das es dann läuft, weil als ich nach dieser if-abfrage ne MessagBox gemacht hat, hat der diese nicht ausgegeben...
Das größe Problem ist ja, das ich nicht alle Möglichkeinen Ausprobieren kann, weil ich danach meinen PC neu starten muss, und das Dauer...
--
MFG RedEagle

Dieser Post wurde am 26.02.2005 um 09:46 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.02.2005, 12:26 Uhr
Oliver
S2-Pixelgeneral



Zitat:

Wenn ich jetzt die Beiden anderen (Funktionierenden) Fenster öffne, werden auch die beiden MessageBoxes angezeigt, obwohl die garnicht im code stehen.



Kann es sein, dass du für die beiden anderen Fenster diesselbe wndclass und damit diesselbe wndproc verwendest, evtl. liegt da der Fehler...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.02.2005, 13:21 Uhr
RedEagle





C++:
   if(!RegisterClass(&wc_additem)) bRegisterClassFailed = true;
   if(!RegisterClass(&wc_edit))    bRegisterClassFailed = true;


--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: