2009-02-10 6 views
6

Ich habe eine CToolbar und darin habe ich eine Schaltfläche mit Stil BTNS_BUTTON | BTNS_DROPDOWN. Ich möchte es zu einem Split-Button machen, also ist die linke Seite des Buttons eine Schaltfläche und die rechte Seite hat ein Drop-Down-Menü.Warum bewirkt der Stil BTNS_DROPDOWN, dass sich die gesamte Symbolleiste um ein paar Pixel nach unten bewegt?

diese zu vervollständigen, ich auf die Schaltfläche erstellen dann nenne ich :: Sendmessage wie so:

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

Dies funktioniert gut und schafft die Split-Taste, sondern hat auch die schlecht Wirkung der Bewegung der Werkzeugleiste ein nach unten paar Pixel. Wenn ich die Nachricht nicht sende, habe ich immer noch das Problem (und ich habe den Split-Button nicht mehr).

Wenn ich den Stil der Schaltfläche zu BTNS_BUTTON | BTNS_WHOLEDROPDOWN ändern, habe ich kein Problem, obwohl ich auch nicht die Split-Taste habe.

Irgendwelche Hinweise, was hier schief gehen könnte? Ich denke, es gibt einen Rand, der auf ein BNTS_DROPDOWN angewendet wird, und es bewirkt, dass die Symbolleiste nach unten bewegt.

+0

Haben Sie das jemals gelöst? - Ich bekomme genau das gleiche Problem :( – Alan

+0

Nein, habe nie das gelöst. Ich landete nur das Fenster ein paar Pixel, um das Layout zu korrigieren. Dies ist weniger als ideal und kann dazu führen, dass die Symbolleiste lustig auf hoher DPI Aufbauten. – Jared

Antwort

1

Nun, diese Frage ist sehr alt in der Tat, aber da scheint es an der Spitze der Google-Ergebnisse zum Thema und zum späteren Nachschlagen ein wenig weiter Surfen es scheint, dass eine Abhilfe gibt (von http://www.ureader.com/msg/1484852.aspx zitiert) ist:

„ich weiß nicht warum, aber das Problem Anstieg bei habe ich die die BTNS_DROPDOWN Stil von Anfang an. ich habe, wenn fügen Sie die Tasten ohne des Satzes BTNS_DROPWN und in der nächsten Zeile I TB_SETBUTTONINFO verwenden zu ändere den Stil, alles funktioniert gut. "

0

Wir hatten das gleiche Problem mit dem Festlegen des BTNS_DROPDOWN-Stils auf einer CToolBar-Erweiterung, der deutlicher wurde, wenn die DPI-Skalierung über 100% lag.

Der Link von floyd73 scheint kaputt zu sein, aber es hat nicht funktioniert, den Dropdown-Stil separat über setbuttoninfo einzustellen.

Die Lösung, die wir war gefunden um die Symbolleiste wieder Maßstab, nachdem die Stile SetSizes zu berücksichtigen, die neue Schaltfläche Größen mit() festgelegt wurden: function

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

Wir stecken diese in einen normal() am Ende jeder benutzerdefinierten Symbolleiste zu verwenden, die es uns ermöglichen sollte, andere lustige Größenänderungen mit Schaltflächenstilen zu fangen.

Hoffen, dass dies hilft, immer noch mit dem gleichen Problem konfrontiert.