2009-06-11 4 views
1

Ich habe den folgenden Code ein ComboBox zu generieren:Resize Combobox in win32 (ändern Breite)

HWND h = CreateWindowEx("COMBOBOX", "Text", CBS_DROPDOWN | WS_CHILD, WS_EX_CLIENTEDGE, ParentWnd, 0, 0, 200, 24); 

Die Combobox auf meiner Form kein Problem entsteht jedoch, wenn ich es mit dem folgenden es gewonnen versuchen Ändern der Größe‘ t Arbeit:

SetWindowPos(h, 0, 0, 0, NewWidth, OldHeight, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); 

Irgendeine Idee warum würde dies geschehen? Es scheint die Größe des falschen Teils der Combobox zu verändern, der irgendwie transparent ist.

Ich habe seit Tagen mit verschiedenen Dingen versucht, es ist wahrscheinlich etwas dummes, aber ich kann nicht meinen Finger darauf legen.

Mit besten Grüßen, Alain Deschenes http://www.arianesoft.ca

Antwort

0

sind neu gezeichnet Sie das gesamte Fenster nach Größenänderung?

+0

Ja ich bin. h $ = NewControlEx (0, "COMBOBOX", NULL, "TEXT", CBS_DROPDOWN | WS_CHILD, WS_EX_CLIENTEDGE, Parent.Handle, 0, 0, 200, 24); Protokoll (h $); ShowWindow (h $, SW_SHOW); SetWindowPos (h $, 0, 100, 100, 500, 24, SWP_NOZORDER | SWP_NOACTIVATE); InvalidateRect (h $, NULL, True); Dieser Code ist in PPL (meine eigene Sprache) geschrieben und es verwendet CreateWindowEx() in NewControlEx(). – Kornalius

+0

Autsch Formatierung ist nicht sehr nett in Kommentare. Kann ich sonst in meinem eigenen Thread posten? – Kornalius

0

Welcher Teil des Kombinationsfelds wird nicht skaliert? Das Textfeld oder das Dropdown?

Die Dropdown-Liste kann mit der Nachricht CB_SETDROPPEDWIDTH geändert werden.

+0

Der Teil bearbeiten, nicht die Dropdown-Liste. – Kornalius

+0

Ich würde gerne in der Lage sein, einen Screenshot zu senden, gibt es irgendeinen Weg, den ich kann? – Kornalius

2

Jungs, ich fand es ... Es gibt etwas in meiner NewControlEx() C-Funktion, die nicht richtig funktioniert. Ich habe verwendet:

h$ = CreateWindowEx(0, "COMBOBOX", "TEXT", CBS_DROPDOWN | WS_CHILD, 10, 10, 400, 24, Parent.Handle, 0, Instance%, NULL); 
SetWindowPos(h$, 0, 100, 100, 400, 32, SWP_NOZORDER | SWP_NOACTIVATE); 
ShowWindow(h$, SW_SHOW); 
InvalidateRect(h$, NULL, True); 

Dies funktioniert wie es sollte. Entschuldigen Sie die Umstände.

Es stellte sich heraus, dass die WM_SIZE: Ereignisbehandlung, die das ursprüngliche wndproc nicht verarbeitet und sofort zurückgegeben wurde.

Mit besten Grüßen, Alain Deschenes http://www.arianesoft.ca