Introduction
I create my toolbar by single TB_ADDBUTTONS
message calls. I used TB_ADDBUTTONS
message calls to create separators as well. But the width of the separators starts too small and then it increases with each separator.
Background
To get the right separator width (8px each), the TBSTYLE_SEP
must not be added to the toolbar separately. To solve this problem, I changed my API and added the bPrependSeparator
argument. This is the result:
Using the Code
I know - it could be made shorter, but the code is readable and does what it should:
UINT OgwwToolBar::AddButton(HBITMAP hBmpImage, HBITMAP hBmpMask,
UINT uiCommandID, BYTE byState,
BYTE byStyle, LPCWSTR wszText, BOOL bPrependSeparator)
{
if (hBmpImage != NULL)
{
::ImageList_Add(_hImageList, hBmpImage, hBmpMask);
_wBitmapUsed++;
}
if (bPrependSeparator != FALSE)
{
TBBUTTON tbb[2];
::ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = 0;
tbb[0].idCommand = 0;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_SEP;
tbb[0].iString = 0;
tbb[1].iBitmap = (_hImageList != NULL) ? _wBitmapUsed - 1 : 0;
tbb[1].idCommand = uiCommandID;
tbb[1].fsState = byState;
tbb[1].fsStyle = byStyle;
tbb[1].iString = 0;
::SendMessageW((HWND)_hHandle, TB_ADDBUTTONS, 2, (LPARAM)tbb);
}
else
{
TBBUTTON tbb;
::ZeroMemory(&tbb, sizeof(tbb));
tbb.iBitmap = (_hImageList != NULL) ? _wBitmapUsed - 1 : 0;
tbb.idCommand = uiCommandID;
tbb.fsState = byState;
tbb.fsStyle = byStyle;
tbb.iString = 0;
::SendMessageW((HWND)_hHandle, TB_ADDBUTTONS, 1, (LPARAM)&tbb);
}
return (_wBitmapCount - _wBitmapUsed);
}
Happy programming!
Points of Interest
Not everything that is allowed/compiles works.
History
- 16th January, 2020: Initial version