Tab-Stop in CCombobox
-
Ich habe eine Combobox, in der ich per Add-String ein paar Einträge aus vorher formatierten CStrings einstelle. Da innerhalb der Zeichenketten verschieden lange Zahlen vorkommen, möchte ich Teile der Zeichenkette per Tab-Stop abtrennen.
Wie geht sowas? \t funktioniert dabei nicht. Habe ein Unicode-Projekt und hatte mir gedacht, das Unicodezeichen u0009 in den String einzusetzen. Dies funktioniert aber auch irgendwie nicht....
-
Tabstops werden IMHO in der Combobox (im gegensatz zu Listboxen) nihct unterstützt.
Du könntest versuchen Dir das Handle auf die Listbox zu holen und die Tabstops zu setzen.
http://msdn.microsoft.com/en-us/library/bb775939(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb761354(VS.85).aspxAnsonsten:
http://www.codeproject.com/KB/combobox/multicolumncombo.aspx
-
Martin Richter schrieb:
Tabstops werden IMHO in der Combobox (im gegensatz zu Listboxen) nihct unterstützt.
Du könntest versuchen Dir das Handle auf die Listbox zu holen und die Tabstops zu setzen.
http://msdn.microsoft.com/en-us/library/bb775939(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb761354(VS.85).aspxAnsonsten:
http://www.codeproject.com/KB/combobox/multicolumncombo.aspxIch bekomme einen Fehler bei der Zeile COMBOBOXINFO info; (unbekannter Bezeichner).
Die Windows.h bzw. Winuser.h ist allerdings eingebunden. Was mach ich da falsch?
-
Windows 2000 Professional
Kann es sein, dass Du VC6 benutzt und die Windows Version nicht definiert hast. Sprich Version >= W2K.
Siehe:
Using the Windows Headers
http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx
-
Martin Richter schrieb:
Windows 2000 Professional
Kann es sein, dass Du VC6 benutzt und die Windows Version nicht definiert hast. Sprich Version >= W2K.
Siehe:
Using the Windows Headers
http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspxNein, ich benutze WinXP SP3 und als IDE MS VS .NET 2003 SP1
-
Ok, ich habe jetzt WINVER in der stdafx.h auf 0x0500 gesetzt und damit geht es.
Martin Richter schrieb:
Du könntest versuchen Dir das Handle auf die Listbox zu holen und die Tabstops zu setzen.
Habe ich jetzt so umgesetzt:
COMBOBOXINFO info = { sizeof(COMBOBOXINFO) }; GetComboBoxInfo(m_ctrlSpannung0.m_hWnd, &info); ::SendMessage(info.hwndList,LB_SETTABSTOPS,0,NULL);
Leider tut sich da nichts. Eventuell liegt es auch daran:
Remarks
To respond to the LB_SETTABSTOPS message, the list box must have been created with the LBS_USETABSTOPS style.
-
AndyDD schrieb:
Leider tut sich da nichts. Eventuell liegt es auch daran:
Remarks
To respond to the LB_SETTABSTOPS message, the list box must have been created with the LBS_USETABSTOPS style.Und auch dann könntest Du den Stil ändern...
LB_SETTABSTOPS müsste sich ändern lassen.
-
Martin Richter schrieb:
Und auch dann könntest Du den Stil ändern...
LB_SETTABSTOPS müsste sich ändern lassen.Der lässt sich irgendwie nicht ändern. Hab es auch wie im Thread http://www.c-plusplus.net/forum/102398 beschieben gemacht, aber es lässt sich nicht umsetzen.
Ich hab das in der OnInitdialog eingebracht....
-
1. Zeig mal ein Stück Code.
2. Hast Du das mit Spy++ verifiziert?
-
Ich hab das so implementiert:
BOOL CAIMesskarte::OnInitDialog() { CDialog::OnInitDialog(); // TODO: hier zusätzliche Initialisierung hinzufügen. COMBOBOXINFO info = { sizeof(COMBOBOXINFO) }; GetComboBoxInfo(m_ctrlSpannung0.m_hWnd, &info); long style = GetWindowLong(info.hwndList,GWL_STYLE); SetWindowLong(info.hwndList,GWL_STYLE, style | LBS_USETABSTOPS); //Code zum Füllen der Combobox ::SendMessage(info.hwndList,LB_SETTABSTOPS,0,NULL); m_ctrlSpannung0.SetCurSel(2); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // AUSNAHME: OCX-Eigenschaftenseite muss FALSE zurückgeben. }
Jetzt habe ich gesehen, dass SendMessage 0 zurück gibt. Bei Spy sehe ich aber, dass zumindest die Meldung an das Dialogfenster geht.