我有这个
CreateWindowA("BUTTON", "Testing!", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 0, 0, 45, 20, hwnd, 0, 0, 0);
并且复选框文本不适合复选框大小。
我可以在文本宽度之后以某种方式设置复选框宽度吗?
最佳答案
您需要使用 GetTextExtentPoint32
来获取字符串的大小,然后您需要使用 GetSystemMetrics
和 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
关于c++ - 文本宽度后的复选框大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19016622/