获得字符宽度?
nMaxwidth //原始宽度
strName 字符名称
CFont* 字体
返回字符最大宽度
int CResourceSelectionDialog::GetDroppedMaxWidth(int nMaxWidth, CString strName, CFont* pFont)
{
if (pFont== nullptr)
return nMaxWidth;
int cx = 0;
CDC memDC;
memDC.CreateCompatibleDC(GetDC());
if (memDC != NULL)
{
memDC.SelectObject(pFont);
CSize size = memDC.GetTextExtent(strName);
memDC.DeleteDC();
cx = size.cx;
}
//防止CreateCompatibleDC失败使用默认字体宽度并加个系数。
if (cx <= 0)
{
CSize siz = GetDC()->GetTextExtent(strName);
cx = siz.cx*1.5;
}
return max(nMaxWidth, cx);
}
设置CBCGPComboBox下拉列表_pCombo下拉宽度?
SetDroppedWidth
CFont* pFont = _pCombo.GetFont();
int nMaxWidth = 0;
// 填充下拉列表
for (auto &spaceType : _spaceTypeList)
{
int nIndex = _pCombo.AddString(spaceType.strName);
_pCombo.SetItemData(nIndex, (DWORD_PTR)&spaceType);
nMaxWidth = GetDroppedMaxWidth(nMaxWidth, spaceType.strName, pFont);
}
_pCombo.SetCurSel(0);
_pCombo.SetDroppedWidth(nMaxWidth);
|