2009-06-11 9 views
1

je le code suivant pour générer un ComboBox:Redimensionner Combobox dans win32 (Largeur de changement)

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

Le combobox est créé sur ma forme pas de problème, si je tente de le redimensionner avec les éléments suivants il a gagné » t travail:

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

Une idée pourquoi cela se produirait-il? Il semble redimensionner la mauvaise partie de la combobox qui est en quelque sorte transparente.

J'ai essayé pendant des jours avec des choses différentes, il est probablement quelque chose de stupide, mais je ne peux pas mettre mon doigt dessus.

Cordialement, Alain Deschenes http://www.arianesoft.ca

Répondre

0

Vous redessiner la fenêtre entière après le redimensionnement?

+0

Oui je suis. h $ = NewControlEx (0, "COMBOBOX", NULL, "TEXT", CBS_DROPDOWN | WS_CHILD, WS_EX_CLIENTEDGE, Parent.Handle, 0, 0, 200, 24); log (h $); ShowWindow (h $, SW_SHOW); SetWindowPos (h $, 0, 100, 100, 500, 24, SWP_NOZORDER | SWP_NOACTIVATE); InvalidateRect (h $, NULL, True); Ce code est écrit en PPL (ma propre langue) et utilise CreateWindowEx() dans NewControlEx(). – Kornalius

+0

Le formatage Ouch n'est pas très agréable dans les commentaires. Toute autre façon que je peux poster dans mon propre fil? – Kornalius

0

Quelle partie de la zone de liste déroulante ne redimensionne? La zone de texte ou la liste déroulante?

La liste déroulante peut être redimensionnée avec le message CB_SETDROPPEDWIDTH.

+0

La partie Modifier, pas la liste déroulante. – Kornalius

+0

J'aimerais pouvoir envoyer une capture d'écran, est-ce possible? – Kornalius

2

Les gars, je l'ai trouvé ... Il y a quelque chose dans ma fonction C NewControlEx() qui ne fonctionne pas correctement. J'ai utilisé:

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); 

Cela fonctionne comme il se doit. Désolé pour le dérangement.

Il est avéré être le WM_SIZE: la gestion des événements qui n'a pas été le traitement du wndproc original et retourné tout de suite.

Cordialement, Alain Deschenes http://www.arianesoft.ca

Questions connexes