ComboBox Eigenschaft während der Laufzeit ändern

fujitsufan

Erfahrenes Mitglied
Hallo,

ist es möglich die Eigenschaft (Typ) Einer ComboBox während der Laufzeit zu ändern?

Es hängt nämlich von verschiedenen Parametern ab ob ich meine
ComboBox als Dropdown-Listenfeld oder Einfach verwenden will.
Als Typ "Einfach" ist es doch möglich einen freien Text einzugeben!?

Ich verwende folgende Syntax:
Code:
SendDlgItemMessage(pElemDlg->hDlg, iId1, CBS_SIMPLE, 0, 0);

ändert sich aber nichts.
Der Dropdown Pfeil verschwindet nicht und ich kann auch keinen freien Text eingeben.

Das Schönste wären, eine ComboBox während der Laufzeit in eine Editfeld umzuwandeln.

Weiß jemand über die Behandlung der Combobox Bescheid?

Viele Grüße
fujitsufan
 
Hallo fujitsufan

Der Style der Combobox ist ein window style, nicht eine Nachricht. Du machst das ganze indem du über GetWindowLongPtr den aktuellen GWLP_STYLE herausholst, alle möglichen styles unmaskierst und dann wieder CBS_SIMPLE hinzu maskierst.

Viele Grüsse
Cromon
 
Aber nicht jede Control lässt jede Style-Änderung zu (bzw. es hat nicht immer eine Auswirkung). Da hilft dann nur Ausprobieren.

Wenn es nicht wirkt, dann muß man die Control tatsächlich zerstören und mit den neuen Styles aufsetzen.
 
Hallo Endurion,

und wie zerstöre ich das alte Control?

Ich gehe wie folgt vor:
Ich hole mir die Position des aktuellen Controls.
Dann sollte ich das alte Control zerstören. Aber wie?
Mit den gemerkten Positionen erstelle ich ein neues Control mit CreateWindow(,,,,,,,,,,);

Mfg.
fujitsufan
 
Hallo zusammen,
ich bins nochmal. fujitsufan.

Gibt es eine Möglichkeit den gleichen Rahmen um ein Edit Control zu zeichnen wie bei der ComboBox.

Ich erstelle das Edit Control:
Code:
CreateWindow("EDIT", "Sample", WS_DLGFRAME | WS_CHILD | ES_NUMBER, pLO.x, pLO.y, pRU.x - pLO.x, pRU.y - pLO.y, this->hDlg,(HMENU) iId, hInstance, (LPVOID) NULL);
Der Border Style "WS_DLGFRAME" ist der einzige, der in etwa so aussieht wie bei einer ComboBox.
Das Control erscheint aber dann größer.

Gibt es ein anderes Flag für den Style?

MfG.
fujitsufan
 
Ich bin mir nicht sicher, ob man die gleich aussehend hinbekommt. Versuch mal mit dem Extended Style WS_EX_CLIENTEDGE. Dazu musst du CreateWindowEx benutzen.

Ich meine aber, wenn man CreateWindow (ohne Ex) benutzt, wird WS_EX_CLIENTEDGE sowieso automatisch drangeflanscht.

Es gibt da aber noch andere Extended Border-Styles, vielleicht klappt's ja damit?
 
Hallo Endurion,

das mit CreateWindowEx sieht gar nicht so schlecht aus. Ich verwende als ersten Parameter "WS_EX_STATICEDGE".
Sieht aus wie eine COMBOBOX recht, links, oben. Unten ist ein schwarzer dünner Strich zu sehen.
Dies stört ein bisschen. Was mir mehr zu schaffen macht ist, dass die Schrift nicht auf der mittigen Höhe liegt, also nach oben verschoben ist. Autoscroll habe ich aktiviert.

dwStyle = WS_DLGFRAME | WS_CHILD | ES_NUMBER | ES_AUTOHSCROLL | ES_AUTOVSCROLL;

CreateWindowEx(WS_EX_STATICEDGE, cCtrl, cDefault, dwStyle, pLO.x, pLO.y, pRU.x - pLO.x, pRU.y - pLO.y, this->hDlg,(HMENU) iId, hInstance, (LPVOID) NULL);

Trotzdem vielen Dank!
Gruß
fujitsufan
 
Zurück