2009-02-10 6 views
6

J'ai un CToolbar et dedans j'ai un bouton avec le style BTNS_BUTTON | BTNS_DROPDOWN. Je voudrais en faire un bouton divisé, de sorte que le côté gauche du bouton est un bouton, et le côté droit a un menu déroulant.Pourquoi le style BTNS_DROPDOWN fait-il baisser la barre d'outils de quelques pixels?

Pour compléter cela, je crée le bouton alors que j'appelle :: SendMessage comme ceci:

::SendMessage(hwndForButton, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS); 

Cela fonctionne très bien et crée le bouton split, mais il a aussi les mauvais effet de déplacer vers le bas la une barre d'outils quelques pixels. Si je n'envoie pas le message, j'ai toujours le problème (et je n'ai plus le bouton de division).

Si je change le style du bouton à BTNS_BUTTON | BTNS_WHOLEDROPDOWN alors je n'ai pas de problème, bien que je n'ai pas le bouton de division.

Une idée de ce qui pourrait ne pas aller ici? Je suppose qu'il y a une marge qui est appliquée à un BNTS_DROPDOWN et qui fait descendre la barre d'outils.

+0

Avez-vous déjà résolu ce problème? - Je reçois exactement le même problème :( – Alan

+0

Non, je n'ai jamais résolu cela, j'ai fini par déplacer la fenêtre de quelques pixels pour corriger la disposition, ce qui est loin d'être idéal et peut rendre la barre d'outils drôle à haute résolution. mises en place. – Jared

Répondre

1

Eh bien cette question est très ancienne, certes, mais puisqu'il apparaît au sommet des résultats de Google sur le sujet et pour référence future navigation un peu plus loin, il semble qu'il y ait une solution de contournement (cité http://www.ureader.com/msg/1484852.aspx):

« Je ne sais pas pourquoi, mais la hausse du problème lorsque je définir le style BTNS_DROPDOWN depuis le début. J'ai si ajouter les boutons sans de l'ensemble à BTNS_DROPWN et dans la ligne suivante, je utilise TB_SETBUTTONINFO à changer le style, tout fonctionne bien. "

0

Nous avons rencontré le même problème en définissant le style BTNS_DROPDOWN, sur une extension CToolBar, qui était rendu plus apparent lorsque la mise à l'échelle DPI était supérieure à 100%.

Le lien de floyd73 semble être cassé, mais avoir essayé de définir le style de liste déroulante séparément via setbuttoninfo n'a pas fonctionné.

La solution que nous avons trouvé était de nouveau à l'échelle de la barre d'outils après que les styles ont été définis pour prendre en compte les nouvelles dimensions des boutons à l'aide SetSizes():

auto imgList = GetToolBarCtrl().GetImageList(); 
if (imgList) 
{ 
    //Scale toolbar buttons to fit the correct scaled icons 
    CSize buttonSize(GetToolBarCtrl().GetButtonSize()); 
    CSize imageSize; 
    ImageList_GetIconSize(imageList, &imageSize.cx, &imageSize.cy); 

    SetSizes(buttonSize, imageSize); 
} 

Nous coincé cela en fonction normalsize() à utiliser à la fin de toute configuration de barre d'outils personnalisée, ce qui devrait nous permettre d'attraper toute autre entreprise de redimensionnement drôle avec des styles de bouton.

J'espère que cela aidera tous ceux qui sont toujours confrontés au même problème.