I have this
CreateWindowA("BUTTON", "Testing!", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 0, 0, 45, 20, hwnd, 0, 0, 0);
and the checkbox text does not fit inside the checkbox size.
Can i somehow set the checkbox width after the text width?
Found this wonderful message deep in some MSDN browsing!
BCM_GETIDEALSIZE
HWND cbhwnd = CreateWindowA("BUTTON", "Testing!", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 0, 0, 0, 0, hwnd, 0, 0, 0);
SIZE size;
SendMessage(cbhwnd, BCM_GETIDEALSIZE, 0, &size);
SendMessage(cbhwnd, WM_SIZE, 0, size);
You need to use GetTextExtentPoint32
to get the size of the string, then you need to add the size of the checkbox itself by using GetSystemMetrics
with SM_CXMENUCHECK:
HDC hDc = GetDC(hWnd);
HFONT hCurrentFont;
HFONT hNewFont = (HFONT)GetStockObject(SYSTEM_FONT); //Change this if you want to use a different font!
if(hCurrentFont = (HFONT)SelectObject(hDc, hNewFont))
{
SIZE stringSize;
if(GetTextExtentPoint32A(hDc, "Testing!", sizeof("Testing!"), &stringSize))
{
int totalWidth = stringSize.cx + GetSystemMetrics(SM_CXMENUCHECK);
int totalHeight = stringSize.cy;
CreateWindowA("BUTTON", "Testing!", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
0, 0, totalWidth, totalHeight, hWnd, 0, 0, 0);
}
else
{
//error! unable to get size
}
}
else
{
//error! unable to get font
}
hNewFont = (HFONT)SelectObject(hDc, hCurrentFont);
DeleteObject(hNewFont);
ReleaseDC(hWnd, hDc); //Release DC
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With