2008-11-12 5 views
3

Quand je faisWS_VSCROLL, oeuvres de style CreateWindow, SetWindowLong ne marche pas

wnd = CreateWindow("EDIT", 0, 
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | 
    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN, 
    x, y, w, h, 
    parentWnd, 
    NULL, NULL, NULL); 

tout va bien, si je supprimer le WS_VSCROLL et WS_HSCROLL puis effectuez les opérations ci-dessous, je ne les obtiennent pas ont donc la fenêtre incorrecte. Pourquoi? Non seulement je reçois une fenêtre incorrecte, il est inutilisable si les deux WS_VSCROLL et WS_HSCROLL manquent

style = WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | 
    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN; 
SetWindowLong(wnd, GWL_STYLE, style); 

Répondre

7

Certains styles de contrôle ne peuvent pas être modifiés après la création de la fenêtre. Le style ES_AUTOHSCROLL (qui contrôle essentiellement l'habillage des mots) en fait partie; cela est indiqué (un peu indirectement) par la section MSDN sur Edit Control Styles. Vous pouvez définir les bits à l'aide de SetWindowLong(), mais le contrôle les ignorera ou se comportera de manière erratique.

La seule façon de procéder correctement consiste à recréer le contrôle d'édition en utilisant les styles requis. C'est en fait ce que fait le Bloc-notes lorsque vous basculez le paramètre "Word Wrap".

1

Vous pouvez le faire avec la fonction ShowScrollBar(). Vous pouvez également trouver intéressante la fonction EnableScrollBar() si vous voulez activer/désactiver les barres de défilement d'une fenêtre. Cordialement.

Questions connexes