Частичный ответ:
Используйте CToolBarCtrl::GetItemRect
, чтобы найти прямоугольник для кнопки панели инструментов.
CToolBarCtrl::GetButtonInfo
(инкапсуляция MFC для TB_GETBUTTONINFO
) также должна возвращать кнопкуширина, основываясь на документации, я не знаю, почему это не так.
Если панель инструментов создана в стиле TBSTYLE_WRAPABLE
, а кнопка на панели инструментов имеет флаг BTNS_AUTOSIZE
, то GetButtonInfo
вернетправильное значение для TBBUTTONINFO::cx
.Пример:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
toolbar.Create(WS_CHILD | WS_VISIBLE | TBSTYLE_WRAPABLE, CRect(0, 0, 0, 0), this, 100);
toolbar.SendMessage(TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
toolbar.AddStrings(L"New\0Open\0Save\0\0");
TBBUTTON tbb[2] = {
{ 0, 1000, TBSTATE_ENABLED, BTNS_AUTOSIZE, {0}, 0, 0},
{ 0, 1001, TBSTATE_ENABLED, BTNS_AUTOSIZE, {0}, 0, 1},
};
toolbar.AddButtons(_countof(tbb), tbb);
toolbar.AutoSize();
TBBUTTONINFO tbbi = { sizeof(tbbi), TBIF_BYINDEX | TBIF_SIZE };
toolbar.GetButtonInfo(0, &tbbi);
TRACE("tbbi.cx = %d", tbbi.cx);
return TRUE;
}