Fehler beim Aufruf eines Dialogs
-
Hi leutz,
Ich verzweifel bald. Mein Problem wenn bei mir der Dialog NeueGruppe aufgerufen wird beendet er bei mir das ganze Prog. Der Debuger sagt das es Ordnungs gemäß beendet wurdet.Code vom aufruf der Funktion
... case ID_NEUE_GRUPPE: { DialogBox((HINSTANCE)GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_NEUE_GRUPPE), hwnd, NeueGruppe); return 0; }break; ...
Code von der Funktion
//************************************************************************** // NeueGruppe ************************************************************* //************************************************************************** BOOL CALLBACK NeueGruppe(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG: {//Beschriften der Eingabe Felder mit Standart werten SetDlgItemText(hwnd, IDC_GRUPPEN_BESCHREIBUNG, "- Keine Eingabe -"); SetDlgItemText(hwnd, IDC_GRUPPEN_INHALT, "- Keine Eingabe -"); return true; }break; case WM_COMMAND: { switch(LOWORD(wParam)) { case IDC_WEITERE_EINGABEN: { ...//abfrage der Eingabe return true; }break; case IDC_ENTFERNEN: {//löschen der Eingabe SetDlgItemText(hwnd, IDC_GRUPPEN_NAME, ""); SetDlgItemText(hwnd, IDC_GRUPPEN_INHALT, ""); SetDlgItemText(hwnd, IDC_GRUPPEN_BESCHREIBUNG, ""); return true; }break; case IDC_ZURUECK: PostMessage(hwnd, WM_CLOSE, 0, 0); break; } return true; case WM_CLOSE: EndDialog(hwnd, 0); return true; }break; } return true; }
bitte schnell Helfen.
cux mosta
-
Wo genau beendet er denn? Mach mal ein MessageBox-Aufruf in WM_INITDIALOG, ob er da noch reingeht oder nicht mehr
Du könntest auch mal versuchen hInst in WinMain in einer globalen Variablen zu speichern und das dann für den Aufruf von DialogBox verwenden.[ Dieser Beitrag wurde am 15.02.2003 um 16:28 Uhr von flenders editiert. ]
-
die Message Box führt er nicht aus und wenn du beim zweiten mal soll das ganze so aussehen dann funktioniert es auch.
... case ID_NEUE_GRUPPE: { DialogBox(hInst,MAKEINTRESOURCE(IDD_NEUE_GRUPPE), hwnd, NeueGruppe); return 0; }break; ...
-
Wird ein MessageBox-Aufruf direkt nach DialogBox angezeigt? Was liefert DialogBox zurück? Was GetLastError()?
-
die DialogBox wird garnicht angezeigt genauso wenig wie die MessageBox GetLasrError versuch ich gleich mal
-
er zeigt nichts an bei GetLastError normaler weise würde er ja sagen das alles in Ordnung ist oder den Fehler halt aber sofern case ID_NEUE_GRUPPE: zutrift beendet er das Prog. ohne jegliche anzeige der rest läuft ohne probleme nur halt das nicht.
-
Was ist bei dir "nichts"? 0?
cya
-
Deine Callback sieht etwas komisch aus! Überprüfe die nochmal!
-
@ flenders was sieht an der komisch aus genaureres bitte.
@ MagiC Creaotr mit nichts meine keine anzeige er beendet einfach mein mainfenster und das wars.
-
Am Ende return FALSE
case WM_CLOSE gehört doch sicher zu switch(Message)
[ Dieser Beitrag wurde am 15.02.2003 um 20:19 Uhr von flenders editiert. ]
-
du meinst das hier
... }break; } case WM_CLOSE: EndDialog(hwnd, 0); return TRUE;}
ich hab es jetzt so geändert und WM_CLOSE bei WM_COMMAND rausgehlt und in die switch(Message)schleife gepackt du meintest das doch oder.
[ Dieser Beitrag wurde am 15.02.2003 um 21:33 Uhr von mosta editiert. ]
-
Und funktioniert es jetzt?
-
nein sonst hätte ich es bestimmt erwähnt oder.
-
Ihr macht euch echt die einfachsten Sachen total schwer. mosta kannst du denn nicht mal selbst analysieren wo der Fehler genau liegt. Oder lad das komplette Teil hoch für uns.
-
Alle deine breaks sind unsinnig. Und bist du jetzt flenders' Rat gefolgt und hast ganz am Ende "return FALSE;" geschrieben?
-
hier ist die WndProc komplett aber hier kann ja nicht der Fehler liegen, weil der Rest Fehlerfrei läuft nur halt die Funktion NeueGruppe nicht die Funktion NeueGruppe ist unten nochmal und ich hab return FALSE schon längst ausprobiert stellt mich doch nicht immer als blöd da.
könnt ihr den Timer dann auch mal ankucken weil der nicht geupdated wird also die Ausgabe(CPULast)ist konstand 0.
[cpp]
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
{
...
SetTimer(hwnd,MY_TIMER,500,0);SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int),
(LPARAM)statwidths);
}break;case WM_TIMER:
{
double Last = CPUAuslastung();
//funktion zur ermittlung der CPU Auslastung
TCHAR szBuf[256];
wsprintf(szBuf,TEXT("CPU-Auslastung: %i %%"),(int)Last);HWND hStatus = GetDlgItem(hwnd,IDC_MAIN_STATUS);
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)szBuf);
}break;case WM_SIZE:
{
...
}break;case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_EINGABE:
{
DialogBox((HINSTANCE)GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_EINGABE), hwnd, Eingabe);
return 0;
}break;case ID_OEFFNEN:
{Oeffnen(hwnd,message,wParam,lParam);
}break;case ID_SPEICHERN:
{Speichern(hwnd,message,wParam,lParam);
return 0;
}break;case ID_DRUCKEN:
{Drucken(hwnd,message,wParam,lParam);
return 0;
}break;
case ID_AUSGABE:
CreateAusgabe(g_hMDIClient);
return 0;
**
case** ID_NEUE_GRUPPE:
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_NEUE_GRUPPE), hwnd,
NeueGruppe);
return 0;
}break;case ID_BEARBEITEN:
{
}break;
case ID_SPEICHERN_UNTER:
{
}break;
case ID_SUCHEN:
{
}break;
case ID_HERUNTERFAHREN:
{
ExitWindowsEx(EWX_SHUTDOWN,0);
}break;
case ID_NEUSTARTEN:
{
ExitWindowsEx(EWX_REBOOT,0);
}break;
case ID_HA:
{
ExitWindowsEx(EWX_POWEROFF,0);
}break;
case ID_ABMELDEN:
{
ExitWindowsEx(EWX_LOGOFF,0);
}break;
case ID_MUSIK:
{
ShellExecute (hwnd,"open","K2K_MP.exe",NULL,NULL,SW_SHOWNORMAL );
return 0;
}break;case ID_HILFE:
{
ShellExecute(hwnd,"open","HILFE/index.html",NULL,NULL,SW_SHOWNORMAL );
return 0;
}break;
case ID_SERVICE:
{
DialogBox((HINSTANCE)GetModuleHandle(0),
MAKEINTRESOURCE(IDD_SERVICE), hwnd, EMail);
return 0;
}break;
case ID_UEBER:
{
int ret = DialogBox(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_UEBER), hwnd, Ueber);
if(ret == -1)
MessageBox(hwnd,"Dialog Fenster konnte nicht aufgerufenwerden!",
"Fehler",MB_OK | MB_ICONERROR);
return 0;
}break;case ID_BEENDEN:
{
PostMessage(hwnd, WM_CLOSE, 0, 0);
}break;
}
case WM_CLOSE:
KillTimer(hwnd, MY_TIMER);
DestroyWindow(hwnd);
return 0;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return true;
}[/cpp]hier wieder die Funktion Neue Gruppe
//************************************************************************** // NeueGruppe ************************************************************* //************************************************************************** BOOL CALLBACK NeueGruppe(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG: { return true; } case WM_COMMAND: { switch(LOWORD(wParam)) { case IDC_WEITERE_EINGABEN: { ... }break; case IDC_ENTFERNEN: { ... }break; case IDC_ZURUECK: PostMessage(hwnd, WM_CLOSE, 0, 0); } }break; case WM_CLOSE: EndDialog(hwnd, 0); return true; } return false; }
[ Dieser Beitrag wurde am 16.02.2003 um 15:04 Uhr von mosta editiert. ]
-
In WndProc solltest du, wenn du eine Message bearbeitet hast return(0); aufrufen, du rufst return true; auf!
Nach dem Bearbeiten von WM_COMMAND NeueGruppe rufst du return false; auf, da sollte aber return true; aufgerufen werden!
Versuch mal bei SetTimer als vierten Parameter NULL anstelle von 0
-
alles nutzt nichts
-
Geht denn die Eingabe-DialogBox?
-
ja
hab es so versucht wie bei Eingabe trotzdem beendet er das Prog.
case ID_NEUE_GRUPPE: { DialogBox((HINSTANCE)GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_NEUE_GRUPPE), hwnd, NeueGruppe); return true; }break;
[ Dieser Beitrag wurde am 16.02.2003 um 17:47 Uhr von mosta editiert. ]