почему стиль BTNS_DROPDOWN заставляет всю панель инструментов сдвинуться на пару пикселей вниз? - PullRequest
7 голосов
/ 11 февраля 2009

У меня есть CToolbar, и внутри него есть кнопка со стилем BTNS_BUTTON | BTNS_DROPDOWN. Я хотел бы сделать это кнопкой разделения, поэтому левая сторона кнопки - это кнопка, а справа - выпадающее меню.

Чтобы завершить это, я создаю кнопку, затем вызываю :: SendMessage так:

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

Это прекрасно работает и создает кнопку разделения, но также имеет неприятный эффект от перемещения панели инструментов на пару пикселей. Если я не отправляю сообщение, у меня все еще есть проблема (и у меня больше нет кнопки разделения).

Если я изменю стиль кнопки на BTNS_BUTTON | BTNS_WHOLEDROPDOWN, то у меня не возникнет проблем, хотя у меня также нет кнопки разделения.

Есть хоть какой-то ключ к пониманию того, что здесь может пойти не так? Я полагаю, что есть поле, которое применяется к BNTS_DROPDOWN, и это заставляет панель инструментов двигаться вниз.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Ну, этот вопрос очень старый, но, поскольку он появляется в самом верху результатов поиска Google по этой теме и для дальнейшего просмотра в будущем, кажется, что есть один обходной путь (цитата из * 1003) *http://www.ureader.com/msg/1484852.aspx):

«Не знаю почему, но проблема возникает, когда Я установил стиль BTNS_DROPDOWN с самого начала. Я, если добавить кнопки без какого-либо из установленных в BTNS_DROPWN и в следующей строке I используйте TB_SETBUTTONINFO, чтобы изменить стиль, все работает нормально. "

0 голосов
/ 27 января 2016

У нас была такая же проблема с настройкой стиля BTNS_DROPDOWN для расширения CToolBar, которая стала более очевидной, когда масштабирование DPI было выше 100%.

Ссылка floyd73, кажется, не работает, но попытка установить стиль выпадающего меню отдельно через setbuttoninfo не сработала.

Решение, которое мы нашли, состояло в том, чтобы изменить масштаб панели инструментов после того, как стили были установлены для учета новых размеров кнопок с помощью 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);
}

Мы вставили это в функцию NormalSize () для использования в конце любой пользовательской настройки панели инструментов, которая должна позволить нам поймать любой другой забавный бизнес по изменению размера с помощью стилей кнопок.

Надеюсь, это поможет любому, кто все еще сталкивается с той же проблемой.

...