/// <summary> /// テキストの幅を計算し、チェックボックスのチェックマーク部分の幅を考慮して、適切なサイズのCRectを返します /// </summary> /// <param name="text"></param> /// <returns></returns> CRect CalculateCheckboxRect(CButton* pCheckbox, const CString& text) { CDC* pDC = pCheckbox->GetDC(); CFont* pOldFont = pDC->SelectObject(pCheckbox->GetFont()); CSize textSize = pDC->GetTextExtent(text); pDC->SelectObject(pOldFont); pCheckbox->ReleaseDC(pDC); // チェックボックスのチェックマーク部分の幅と高さ(システムメトリクスから取得) int checkWidth = GetSystemMetrics(SM_CXMENUCHECK); int checkHeight = GetSystemMetrics(SM_CYMENUCHECK); // 余白を追加(左右に5ピクセルずつ、上下に2ピクセルずつ) int width = textSize.cx + checkWidth + 10; // 左右の余白10ピクセル int height = max(textSize.cy, checkHeight) + 4; // 上下の余白4ピクセル(2 + 2) // x座標に5ピクセル加えて左の余白を確保 // y座標に2ピクセル加えて上の余白を確保 return CRect(5, 2, width + 5, height + 2); }