CBaseDialog::~CBaseDialog() { POSITION pos= m_wndList.GetHeadPosition(); CButton* pBtn = NULL; while (pos) { pBtn = (CButton*)m_wndList.GetNext(pos); if (pBtn->GetSafeHwnd() != NULL) { pBtn->UnsubclassWindow(); } delete pBtn; } m_wndList.RemoveAll(); }
void CGeneralMsgBox::CreateBtns() { // The minimum button's dimension m_dimBtn = CSize(FromDlgX(m_aMetrics[CX_MIN_BTN]), 0); // DC and Font for use in some dimension calculations CClientDC dc(this); CFont *pWndFont = GetFont(); CFont *poldFont = dc.SelectObject(pWndFont); CRect rcDummy; // dimesion doesn't matter here INT_PTR cBtns = m_aBtns.GetSize(); for (int i = 0; i < cBtns; ++i) { BTNDATA &btndata = m_aBtns[i]; // Finding the minimum dimension needed to properly show any button CSize dimBtn = dc.GetTextExtent(btndata.strBtn); m_dimBtn.cx = max(m_dimBtn.cx, dimBtn.cx); m_dimBtn.cy = max(m_dimBtn.cy, dimBtn.cy); // Creating the button with MFC's CButton help. CButton btnCtrl; btnCtrl.Create(btndata.strBtn, WS_CHILD|WS_VISIBLE|WS_TABSTOP, rcDummy, this, btndata.uiIDC); btnCtrl.SetFont(pWndFont); btnCtrl.UnsubclassWindow(); } dc.SelectObject(poldFont); // Add the button margins m_dimBtn.cx += 2 * FromDlgX(m_aMetrics[CX_BTN_BORDER]); m_dimBtn.cy += 2 * FromDlgY(m_aMetrics[CY_BTN_BORDER]); }