Hallo euch allen,
bin durch einen Freund auf dieses Forum aufmerksam geworden. Er meinte dieses Forum sei eines der fachkundigsten für Fragen zur Programmierung. Deshalb ersuche ich hier jetzt eure Hilfe.
Mein Problem ist weniger "Visual C++" als mehr wxWidgets bedingt. Aber ich nehme die IDE von Visual Studio 2008 als Standard Entwicklungsumgebung.
Da ich keinen gesonderten Bereich für Fragen zu derartigen Toolkits gefunden habe, erstellte ich dieses Thema hier.
Zum 1. Problem:
Der oben bemängelte Codebereich:
Zur Verdeutlichung, es existieren 3 Listboxen.
1. Box unsortiert
2. Aufsteigend sortiert
3. Aufsteigend sortiert
In einer Statusbar wird die jeweilige Auswahl angezeigt.
Zusätzlich existiert noch ein Button, Funktion "OnChoice2", der alle ausgwählten Elemente, ohne Fehler, anzeigt.
Die Auswahl aus der 1. Box funktioniert tadellos, nur wenn ich in der 2. und 3. Box eine Auswahl tätige, kommt die oben zitierte Fehlermeldung.
----------------------------
Zum 2. Problem
Der oben bemängelte Codebereich:
Zur Verdeutlichung, es existieren 4 Checkboxen. Eine davon ist nicht abwählbar.
In einer Statusbar wird die jeweilige Auswahl angezeigt.
Da ich mich gerade erst in wxWidgets einarbeite, kenne ich mich damit noch nicht sonderlich gut aus. Deshalb auch der Thread inklusive Hilferuf.
bin durch einen Freund auf dieses Forum aufmerksam geworden. Er meinte dieses Forum sei eines der fachkundigsten für Fragen zur Programmierung. Deshalb ersuche ich hier jetzt eure Hilfe.
Mein Problem ist weniger "Visual C++" als mehr wxWidgets bedingt. Aber ich nehme die IDE von Visual Studio 2008 als Standard Entwicklungsumgebung.
Da ich keinen gesonderten Bereich für Fragen zu derartigen Toolkits gefunden habe, erstellte ich dieses Thema hier.
Zum 1. Problem:
---------------------------
wxWidgets Debug Alert
---------------------------
..\..\src\common\ctrlsub.cpp(170): assert "m_clientDataItemsType == wxClientData_Void" failed in wxItemContainer::GetClientData(): this window doesn't have void client data
Call stack:
[00] wxGUIAppTraitsBase::ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appcmn.cpp:635
[01] ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:836
[02] wxAppConsole::OnAssertFailure n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:445
[03] wxOnAssert n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:713
[04] wxItemContainer::GetClientData n:\programmierung\wxwidgets-2.8.12\src\common\ctrlsub.cpp:170
[05] wxControlWithItems::GetClientData n:\programmierung\wxwidgets-2.8.12\include\wx\ctrlsub.h:185
[06] Mainframe::OnChoice1 n:\programmierung\visual c++ projekte\c++ projekte\wx_elements_test\wx_elements_test\base.cp p:120
[07] wxAppConsole::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:323
[08] wxEvtHandler::ProcessEventIfMatches n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1241
[09] wxEventHashTable::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:907
[10] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1301
[11] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[12] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[13] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[14] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[15] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[16] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[17] wxControl::ProcessCommand n:\programmierung\wxwidgets-2.8.12\src\msw\control.cpp:335
[18] wxChoice::MSWCommand n:\programmierung\wxwidgets-2.8.12\src\msw\choice.cpp:778
[19] wxWindow::HandleCommand n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:5007
[20] wxWindow::MSWWindowProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2924
Do you want to stop the program?
You can also choose [Cancel] to suppress further warnings.
---------------------------
Ja Nein Abbrechen
---------------------------
wxWidgets Debug Alert
---------------------------
..\..\src\common\ctrlsub.cpp(170): assert "m_clientDataItemsType == wxClientData_Void" failed in wxItemContainer::GetClientData(): this window doesn't have void client data
Call stack:
[00] wxGUIAppTraitsBase::ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appcmn.cpp:635
[01] ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:836
[02] wxAppConsole::OnAssertFailure n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:445
[03] wxOnAssert n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:713
[04] wxItemContainer::GetClientData n:\programmierung\wxwidgets-2.8.12\src\common\ctrlsub.cpp:170
[05] wxControlWithItems::GetClientData n:\programmierung\wxwidgets-2.8.12\include\wx\ctrlsub.h:185
[06] Mainframe::OnChoice1 n:\programmierung\visual c++ projekte\c++ projekte\wx_elements_test\wx_elements_test\base.cp p:120
[07] wxAppConsole::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:323
[08] wxEvtHandler::ProcessEventIfMatches n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1241
[09] wxEventHashTable::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:907
[10] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1301
[11] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[12] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[13] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[14] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[15] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[16] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[17] wxControl::ProcessCommand n:\programmierung\wxwidgets-2.8.12\src\msw\control.cpp:335
[18] wxChoice::MSWCommand n:\programmierung\wxwidgets-2.8.12\src\msw\choice.cpp:778
[19] wxWindow::HandleCommand n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:5007
[20] wxWindow::MSWWindowProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2924
Do you want to stop the program?
You can also choose [Cancel] to suppress further warnings.
---------------------------
Ja Nein Abbrechen
---------------------------
Code:
// Ein Listenelement ausgewählt void Mainframe::OnChoice1(wxCommandEvent &event ) { wxChoice *choice = (wxChoice *) event.GetEventObject(); wxString text(wxT("Ihre Auswahl: ")); text.Append(choice->GetStringSelection()); // Client-Daten vorhanden? if(choice->GetClientData(choice->GetSelection())) { /* Zeile 120 */ text.Append(wxT(" (Client-Daten: ")); text.Append((const wxChar *) choice->GetClientData(choice->GetSelection())); text.Append(wxT(")")); } SetStatusText(text); } // Alle Listenelemente auswerten void Mainframe::OnChoice2(wxCommandEvent &event) { wxChoice *choice1 = (wxChoice *) FindWindowById(ID_CHOICE); wxChoice *choice2 = (wxChoice *) FindWindowById(ID_CHOICE_SORTED); wxChoice *choice3 = (wxChoice *) FindWindowById(ID_CHOICE_SORTED2); wxString text(wxT("Gesamte Auswahl: ")); text.Append(choice1->GetStringSelection()); text.Append(wxT(" & ")); text.Append(choice2->GetStringSelection()); text.Append(wxT(" & ")); text.Append(choice3->GetStringSelection()); SetStatusText(text); }
1. Box unsortiert
2. Aufsteigend sortiert
3. Aufsteigend sortiert
In einer Statusbar wird die jeweilige Auswahl angezeigt.
Zusätzlich existiert noch ein Button, Funktion "OnChoice2", der alle ausgwählten Elemente, ohne Fehler, anzeigt.
Die Auswahl aus der 1. Box funktioniert tadellos, nur wenn ich in der 2. und 3. Box eine Auswahl tätige, kommt die oben zitierte Fehlermeldung.
----------------------------
Zum 2. Problem
---------------------------
wxWidgets Debug Alert
---------------------------
n:\programmierung\wxwidgets-2.8.12\include\wx\checkbox.h(70): assert "!Is3State()" failed in wxCheckBoxBase::IsChecked(): Calling IsChecked() doesn't make sense for a three state checkbox, Use Get3StateValue() instead
Call stack:
[00] wxGUIAppTraitsBase::ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appcmn.cpp:635
[01] ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:836
[02] wxAppConsole::OnAssertFailure n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:445
[03] wxOnAssert n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:713
[04] wxCheckBoxBase::IsChecked n:\programmierung\wxwidgets-2.8.12\include\wx\checkbox.h:69
[05] Mainframe::OnCheck n:\programmierung\visual c++ projekte\c++ projekte\wx_elements_test\wx_elements_test\base.cp p:199
[06] wxAppConsole::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:323
[07] wxEvtHandler::ProcessEventIfMatches n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1241
[08] wxEventHashTable::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:907
[09] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1301
[10] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[11] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[12] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[13] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[14] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[15] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[16] wxControl::ProcessCommand n:\programmierung\wxwidgets-2.8.12\src\msw\control.cpp:335
[17] wxCheckBox::MSWCommand n:\programmierung\wxwidgets-2.8.12\src\msw\checkbox.cpp:312
[18] wxWindow::HandleCommand n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:5007
[19] wxWindow::MSWWindowProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2924
[20] wxWndProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2618
Do you want to stop the program?
You can also choose [Cancel] to suppress further warnings.
---------------------------
Ja Nein Abbrechen
---------------------------
wxWidgets Debug Alert
---------------------------
n:\programmierung\wxwidgets-2.8.12\include\wx\checkbox.h(70): assert "!Is3State()" failed in wxCheckBoxBase::IsChecked(): Calling IsChecked() doesn't make sense for a three state checkbox, Use Get3StateValue() instead
Call stack:
[00] wxGUIAppTraitsBase::ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appcmn.cpp:635
[01] ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:836
[02] wxAppConsole::OnAssertFailure n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:445
[03] wxOnAssert n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:713
[04] wxCheckBoxBase::IsChecked n:\programmierung\wxwidgets-2.8.12\include\wx\checkbox.h:69
[05] Mainframe::OnCheck n:\programmierung\visual c++ projekte\c++ projekte\wx_elements_test\wx_elements_test\base.cp p:199
[06] wxAppConsole::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:323
[07] wxEvtHandler::ProcessEventIfMatches n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1241
[08] wxEventHashTable::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:907
[09] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1301
[10] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[11] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[12] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[13] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[14] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
[15] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
[16] wxControl::ProcessCommand n:\programmierung\wxwidgets-2.8.12\src\msw\control.cpp:335
[17] wxCheckBox::MSWCommand n:\programmierung\wxwidgets-2.8.12\src\msw\checkbox.cpp:312
[18] wxWindow::HandleCommand n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:5007
[19] wxWindow::MSWWindowProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2924
[20] wxWndProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2618
Do you want to stop the program?
You can also choose [Cancel] to suppress further warnings.
---------------------------
Ja Nein Abbrechen
---------------------------
Code:
// Checkboxen auswerten void Mainframe::OnCheck(wxCommandEvent &event) { wxCheckBox *combo1 = (wxCheckBox *) FindWindowById(ID_CHECK_BUTTON1); wxCheckBox *combo2 = (wxCheckBox *) FindWindowById(ID_CHECK_BUTTON2); wxCheckBox *combo3 = (wxCheckBox *) FindWindowById(ID_CHECK_BUTTON3); wxCheckBox *combo4 = (wxCheckBox *) FindWindowById(ID_CHECK_BUTTON4); wxString text(wxT("Ihre Auswahl: ")); // "Birne" lässt sich nicht deaktivieren if(!(combo1->IsChecked())) { combo1->Set3StateValue(wxCHK_UNDETERMINED); text.Append((wxChar *) combo1->GetClientData()); } if(combo1->IsChecked()) text.Append(wxT("Birne ")); if(combo2->IsChecked()) text.Append(wxT("Orange ")); if(combo3->IsChecked()) text.Append(wxT("Apfel ")); if(combo4->IsChecked()) text.Append(wxT("Kirsche ")); SetStatusText(text); }
In einer Statusbar wird die jeweilige Auswahl angezeigt.
Da ich mich gerade erst in wxWidgets einarbeite, kenne ich mich damit noch nicht sonderlich gut aus. Deshalb auch der Thread inklusive Hilferuf.