2016-05-30 12 views
0

Ich bin eine Testanwendung für ein Windows CE-Gerät codieren. Dies ist das erste Mal, dass ich für ein Handheld-Gerät programmiere. Ich benutze MFC VC++ auf Visual Studio 2008. Ich habe festgestellt, dass es viele Einschränkungen in den Steuerelementen gibt und was ich mit ihnen tun könnte, wenn ich das Programm auf einem handlichen oder wenn ich ein ähnliches Programm auf einem Desktop-Computer ausführe.Anzeige und Verwendung der gleichen MFC CList-Steuerelement in mehreren Dialogen

Jetzt, das Gerät, das ich derzeit mein Testprogramm zu implementieren, hat keinen Touchscreen und hat einige zusätzliche Tasten andere, die die Ziffernblock 0-9 Tasten. Also habe ich mit einer einfachen GUI zu tun, die Keydowns verwendet, um bestimmte Funktionen wie Hinzufügen, Bearbeiten, Löschen usw. aufzurufen. Es zwingt mich auch, separate Dialoge für jede dieser Funktionen zu verwenden, um unnötige Mauszeiger zu vermeiden.

Dies führt mich zu meinem aktuellen Problem: ‚Add‘ Dialog meiner Test-App fügt einige Benutzerdaten zu einem CListCtrl , die auf dem ‚MAIN‘ Dialog ist. ‚Edit/DELETE‘ Dialog ist dem Benutzer zu erlauben, die gewünschten Daten aus seine eigene CListCtrl und drücken Sie die Taste „ENTER“ zu wählen, die damit die ausgewählten Daten von dem ‚Haupt‘ Dialog des CListCtrl löscht. Somit haben sowohl der Hauptdialog als auch der 'EDIT/DELETE' Dialog CListCtrl mit genau denselben Daten. Anstatt zwei separate Listensteuerelemente zu verwenden und Schleifen zu verwenden, um die Daten zwischen ihnen hin und her zu kopieren, gibt es eine Möglichkeit, genau dieselbe CListCtrl zu verwenden (eine und nur eine Instanz der CListCtrl existiert) , aber es auf 2 separaten Dialogen anzeigen? Dies würde den gesamten Kopiercode entfernen sowie die Menge der Daten im Speicher halbieren.

Ich habe versucht, einen Zeiger auf die CListCtrl des MAIN-Dialogs auf den 'EDIT/DELETE' -Dialog zu übergeben, in der Hoffnung, dass ich das Steuerelement dort neu zeichnen konnte, aber vergeblich. Ich könnte die RedrawWindow, RedrawItems Befehle aufrufen, aber sie scheinen keinen Effekt im 'EDIT/DELETE' Dialog zu haben (ich denke es liegt daran, dass das Steuerelement selbst nicht im Edit/Delete Dialog vorhanden ist). Irgendwelche anderen Vorschläge?

+0

Ich habe auch versucht, die CListCtrl Create-Funktion mit dem übergebenen Zeiger aus dem Dialogfeld "EDIT/DELETE" aufzurufen. Es scheint, als würde ein List-Steuerelement erstellt, aber die Daten werden nicht wiedergegeben, vielleicht weil Create eine neue Instanz von CListCtrl erstellt ... – PRinCEKtd

+0

Ich nehme an, dass Ihr EDIT/DELETE-Dialog über dem Hauptdialogfeld ist, also das Hauptdialogfeld Dialog wird im Hintergrund des anderen existieren. Dann sollte es möglich sein, das listctrl mit der Funktion 'CWnd :: SetParent' vorübergehend in den anderen Dialog zu verschieben. Was meinst du mit "Ich habe versucht, einen Zeiger zu übergeben"? –

+0

Der MAIN-Dialog wird ausgeblendet und es wird immer nur ein Dialog angezeigt. ** Übergabe mit Zeiger ** Ich habe versucht, etwas wie dieser Code in meinem Hauptdialog: 'EditDialog myEditDialog (& M_cDataList); // M_cDataList zur CListCtrl' und in den EditDialog Variable ist: 'EditDialog (CListCtrl * pListCtrl);' und dann verwendet, um diesen Zeiger zu versuchen, die Liste Steuerelement angezeigt werden. Natürlich kann ich mit diesem Zeiger auf die Daten zugreifen, aber ich konnte nicht erreichen, dass sie im Bearbeitungsdialog angezeigt werden. – PRinCEKtd

Antwort

2

Sie könnten vorübergehend die Eltern des CWnd::SetParent Dialog zum Ändern/Löschen mit ListCtrl ändern, und stellen Sie die Position mit CWnd::SetWindowPos, wo Sie es haben wollen. Wenn das Dialogfeld geschlossen wird, setzen Sie das übergeordnete Element zurück auf das Dialogfeld MAIN.