ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
889
889
EMPFEHLEN
-
Hallo
Ich habe ein Problem. Ich möchte in einem Gui eine zweispaltige Tabelle generieren, die bei jedem Aufruf, eine vorher eingelesene Anzahl Zeilen hat. In der ersten Spalte möchte ich etwas fixes eintragen und in die zweite Spalte sollten sich Werte eintragen lassen.
Ich arbeite mit Microsoft Visual Studio.
Hat mir jemand einen Lösung für mein Problem. Was für ein Steuerelement muss ich dafür benutzen?
mfg
-
Dafür gibt es direkt keine Control. Da musst du manuell kombinieren.
Für die Ansicht an sich genügt eine ListControl (nicht ListBox). Du musst dann auf ein Doppelklickereignis (oder ein beliebiges anderes) reagieren und eine Edit-Control als Child an der Stelle anzeigen. Dann per Subclassen auf ein paar Ereignisse wie Escape/Enter oder Applikationswechsel prüfen, damit die Edit auch schön brav wieder weggeht.
-
hättest du für das ein beispiel code? kann mir nämlich noch nicht ganz vorstellen wie das mit child usw. funktioniert.
habe ich das richtig verstanden. ich nehme eine List control und wenn die list dann betätigt wird generiere ich diese edit fields?
mfg
-
Hier ein Stück Code, wo ich das so mache:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
void CDlgZuordnung::OnNMDblclkListZuordnung( NMHDR *pNMHDR, LRESULT *pResult ) { if ( m_EditPopup.GetSafeHwnd() ) { // wenn wir schon drin sind, nicht nochmal return; } POINT ptMouse; GetCursorPos( &ptMouse ); m_ListZuordnung.ScreenToClient( &ptMouse ); LVHITTESTINFO lvHTInfo; lvHTInfo.pt = ptMouse; int iItem, iSubItem; HitTest( ptMouse, iItem, iSubItem ); RECT rcItem; m_iEditItem = iItem; m_iEditSubItem = iSubItem; GetSubItemRect( iItem, iSubItem, rcItem ); m_ListZuordnung.ClientToScreen( &rcItem ); ScreenToClient( &rcItem ); if ( iSubItem == 0 ) { m_EditPopup.Create( WS_BORDER | WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_NUMBER, rcItem, this, 17 ); m_EditPopup.SetFont( GetFont() ); m_EditPopup.SetWindowText( m_ListZuordnung.GetItemText( iItem, iSubItem ) ); m_EditPopup.SetSel( 0, -1 ); m_EditPopup.SetFocus(); m_EditPopup.SetLimitText( 8 ); } else if ( iSubItem == 1 ) { // IP m_EditPopup.Create( WS_BORDER | WS_CHILD | WS_VISIBLE | ES_WANTRETURN, rcItem, this, 17 ); m_EditPopup.SetFont( GetFont() ); m_EditPopup.SetWindowText( m_ListZuordnung.GetItemText( iItem, iSubItem ) ); m_EditPopup.SetSel( 0, -1 ); m_EditPopup.SetFocus(); } else if ( iSubItem == 2 ) { // MAC m_EditPopup.Create( WS_BORDER | WS_CHILD | WS_VISIBLE | ES_WANTRETURN, rcItem, this, 17 ); m_EditPopup.SetFont( GetFont() ); m_EditPopup.SetLimitText( 12 ); m_EditPopup.SetWindowText( m_ListZuordnung.GetItemText( iItem, iSubItem ) ); m_EditPopup.SetSel( 0, -1 ); m_EditPopup.SetFocus(); } *pResult = 0; } BOOL CDlgZuordnung::OnCommand( WPARAM wParam, LPARAM lParam ) { if ( (HWND)lParam == m_EditPopup.GetSafeHwnd() ) { if ( HIWORD( wParam ) == EN_KILLFOCUS ) { m_EditPopup.DestroyWindow(); return TRUE; } } return CPropertyPage::OnCommand(wParam, lParam); } BOOL CDlgZuordnung::PreTranslateMessage( MSG* pMsg ) { if ( ( pMsg->hwnd == m_EditPopup.GetSafeHwnd() ) && ( pMsg->message == WM_KEYDOWN ) ) { if ( pMsg->wParam == VK_RETURN ) { EditEnd(); return TRUE; } else if ( pMsg->wParam == VK_ESCAPE ) { EditEnd(); return TRUE; } } return CPropertyPage::PreTranslateMessage(pMsg); } void CDlgZuordnung::EditEnd() { CString cstrGnu; m_EditPopup.GetWindowText( cstrGnu ); m_ListZuordnung.SetItemText( m_iEditItem, m_iEditSubItem, cstrGnu ); m_EditPopup.DestroyWindow(); SetModified(); }
-
OK einige Fragen zu deinem Code.
1. was ist m_EditPopup für ein Datentype?
2. erzeugst du mit diesem code fortlaufend die edit fields in der Liste?
3. Von wo sind die Methoden HitTest und GetSubItemRect muss ich irgendwie noch ein spezielles include machen oder von was erbt dein ZuordnungsDlg?
mfg
-
1) m_EditPopup ist ein CEdit
2) Jein, es gibt nur eine Edit, die wird durch einen Doppelklick erzeugt; und bei einem Fokus-Wechsel (EN_KILLFOCUS) oder Escape/Return wieder geschlossen
3) HitTest und GetSubItemRect müssten in aktuellen MFC-Versionen Member von CListControl sein. Früher gab es die da drin nicht, da hatte ich mir die selbst gebaut.
-
könntest du mir vielleicht den ganzen Header und das ganze .cpp fiel dieses Dlg schicken?
-
Schwierig, da sind einige firmeneigene Dinge drin. Die eigentlichen Funktionsteile hast du in dem Ausschnitt oben aber schon drin. Der Header ist ja eh nur eine Kopie des .cpp-Files.
Ähnliche Themen
-
In einem CTabFolder eine Tabelle und ein Combo darstellen
Von DerDon456 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 28.01.10, 16:37 -
versuche DB Ausgabe in Tabelle mit einem JS Div ein und auszublenden
Von grillfleisch im Forum Javascript & AjaxAntworten: 10Letzter Beitrag: 24.01.10, 17:06 -
Zeile in eine Tabelle in einem Worddokument einfügen
Von mmike im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 06.08.08, 22:11 -
Nach einem Wert in Tabelle suchen
Von -GS-Master im Forum Relationale DatenbanksystemeAntworten: 7Letzter Beitrag: 12.04.07, 17:18 -
Tabelle in einem Forumsbeitrag
Von scmaps im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 11.06.05, 10:51





Zitieren
Login






