CFormatBar::CFormatBar() { CFont fnt; fnt.Attach(GetStockObject(theApp.m_nDefFont)); m_szBaseUnits = GetBaseUnits(&fnt); CLocalComboBox::m_nFontHeight = m_szBaseUnits.cy; }
void CButtonDialog::PositionControls() { CSize sizeBase = GetBaseUnits(); int nButtonHeight = (sizeBase.cy*14)/8; int nHeight = 0; int nSep,nLeftMargin,nRightMargin,nTopMargin,nBottomMargin; int nButtonAdj; int nWidth = 0; CRect rectText; // a) 5/8 screen Width // b) Caption // c) nLeftMargin ICON nSep TEXT nRightMargin // d) nLeftMargin Button1 nSep Button2 ... nRightMargin // client width is max(b,d, min(c,a)) CSize sizeIcon(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); nSep = sizeIcon.cx/2; nLeftMargin = nSep; nRightMargin = nSep; nTopMargin = nSep; nBottomMargin = nSep; CClientDC dc(this); CFont* pOldFont = dc.SelectObject(&m_font); nButtonAdj = dc.GetTextExtent(_T("XXX"),3).cx; // padding on buttons int nScreenWidth58 = dc.GetDeviceCaps(HORZRES)*5/8; int nCaptionWidth = dc.GetTextExtent(m_strCaption, m_strCaption. GetLength()).cx; CSize sizeText = dc.GetTextExtent(m_strText,m_strText.GetLength()); int nTextIconWidth = nLeftMargin+sizeIcon.cx+nSep+sizeText.cx+nRightMargin; int nButtons = (int)m_strArray.GetSize(); int nButtonsWidth = nLeftMargin+nRightMargin+(nButtons-1)*nSep; int i = 0; for (i=0;i<nButtons;i++) { nButtonsWidth += dc.GetTextExtent(m_strArray[i],m_strArray[i].GetLength()).cx+ nButtonAdj*2; } nWidth = min(nTextIconWidth,nScreenWidth58); nWidth = max(nWidth, nCaptionWidth); nWidth = max(nWidth, nButtonsWidth); m_staticIcon.SetWindowPos(NULL, nLeftMargin, nTopMargin, sizeIcon.cx, sizeIcon.cy, SWP_NOZORDER); if (sizeText.cx > nWidth-nLeftMargin-nRightMargin-sizeIcon.cx-nSep) { sizeText.cx = nWidth-nLeftMargin-nRightMargin-sizeIcon.cx-nSep; // int nTextWidth = nWidth-nLeftMargin-nRightMargin-sizeIcon.cx-nSep; // rectText.SetRect(0, 0, nTextWidth, 32767); rectText.SetRect(0, 0, sizeText.cx, 32767); /* Ask DrawText for the right cy */ sizeText.cy = dc.DrawText(m_strText, m_strText.GetLength(), &rectText, DT_CALCRECT | DT_WORDBREAK | DT_EXPANDTABS | DT_NOPREFIX); } m_staticText.SetWindowPos(NULL, nSep+sizeIcon.cx+nSep, nTopMargin, sizeText.cx, sizeText.cy, SWP_NOZORDER); sizeText.cy = max(sizeText.cy, sizeIcon.cy); // at least icon height nHeight = nTopMargin + sizeText.cy + nSep + nButtonHeight + nBottomMargin; CRect rect; rect.left = (nWidth - (nButtonsWidth - nLeftMargin - nRightMargin))/2; rect.top = nTopMargin + sizeText.cy + nSep; rect.bottom = rect.top + nButtonHeight; for (i=0;i<m_strArray.GetSize();i++) { rect.right = rect.left + dc.GetTextExtent(m_strArray[i],m_strArray[i].GetLength()).cx + 2*nButtonAdj; m_pButtons[i].MoveWindow(&rect); rect.left = rect.right + nSep; } rect.SetRect(0,0,nWidth,nHeight); CalcWindowRect(&rect); SetWindowPos(NULL, (dc.GetDeviceCaps(HORZRES)-rect.Width())/2, (dc.GetDeviceCaps(VERTRES)-rect.Height())/2, rect.Width(), rect.Height(), SWP_NOZORDER|SWP_NOACTIVATE); if(m_nCancel == -1) // no cancel button { // CMenu* pMenu = GetSystemMenu(FALSE); // if (pMenu != NULL) // pMenu->DeleteMenu(SC_CLOSE, MF_BYCOMMAND); } dc.SelectObject(pOldFont); }