如何更改与CMFCToolbarEditBoxButton关联的编辑框的高度

时间:2017-05-19 17:28:46

标签: mfc-feature-pack

我想降低与CMFCToolBar上的CMFCToolbarEditBoxButton关联的编辑框的高度。

我已经能够通过在OnToolbarReset中的ReplaceButton步骤之后更改字体大小来成功更改与CMFCToolbarComboBoxButton关联的组合框的高度。

这种方法对CMFCToolbarEditBoxButton不起作用。 (请参阅以下代码中的CGuiEditBox部分。)

第一个代码来自On​​ToolbarSet。我将一个字体分配给编辑框。我甚至尝试使字体的大小非常小。它没有效果。

接下来,我尝试在工具栏的AdjustLocations方法中更改与编辑框关联的矩形。这种方法也没有成功。

LRESULT CMainFrame::OnToolbarReset(WPARAM wp, LPARAM)
{
    UINT uiToolBarId = (UINT)wp;

    switch (uiToolBarId)
    {
    case IDR_TOPTOOLBAR_REG:
    {
        CZoomCombo ZoomCombo;
        ZoomCombo.EnableWindow(TRUE);

        ZoomCombo.SetDropDownHeight(300);
        ZoomCombo.SetCenterVert(TRUE);

        ZoomCombo.AddItem(_T(".5x"));
        ZoomCombo.AddItem(_T("1x"));
        ZoomCombo.AddItem(_T("2x"));
        ZoomCombo.AddItem(_T("3x"));
        ZoomCombo.AddItem(_T("4x"));
        ZoomCombo.AddItem(_T("5x"));
        ZoomCombo.AddItem(_T("6x"));
        ZoomCombo.AddItem(_T("7x"));
        ZoomCombo.AddItem(_T("8x"));
        ZoomCombo.AddItem(_T("9x"));
        ZoomCombo.AddItem(_T("10x"));

        m_wndTopToolBar.ReplaceButton(IDC_ZOOMCOMBO_DUMMY, ZoomCombo);

        do
        {
            CMFCToolBarButton* pButton = NULL;

            int nZoomIndex = m_wndTopToolBar.CommandToIndex(IDC_ZOOMCOMBO);

            if (nZoomIndex == -1)
                break;

            pButton = m_wndTopToolBar.GetButton(nZoomIndex);

            if (pButton == NULL)
            break;

            ASSERT(pButton->IsKindOf(RUNTIME_CLASS(CMFCToolBarComboBoxButton)));

            CMFCToolBarComboBoxButton* pComboButton = (CMFCToolBarComboBoxButton*)pButton;
            CComboBox* pCbo = pComboButton->GetComboBox();
            CEdit* pEdit    = pComboButton->GetEditCtrl();

            if (pCbo == NULL || pEdit == NULL)
            break;

            pCbo->SetFont(&m_ToolBarBtnFont);
            pEdit->SetFont(&m_ToolBarBtnFont);

            m_wndTopToolBar.InvalidateButton(nZoomIndex);

            int nSel = GetZoomComboIndex(m_Zoom);
            if (nSel >= 0)
            {
                pCbo->SetCurSel(nSel);

                CString str;
                pCbo->GetWindowText(str);
                pComboButton->SetText(str);
            }
        } while (false);

        //

        CGuiEditBox GuiEditBox;
        GuiEditBox.EnableWindow(TRUE);

        m_wndTopToolBar.ReplaceButton(IDC_GUIEDITBOX_DUMMY, GuiEditBox);

        do
        {
            CMFCToolBarButton* pButton = NULL;

            int nGuiIndex = m_wndTopToolBar.CommandToIndex(IDC_GUIEDITBOX);

            if (nGuiIndex == -1)
                break;

            pButton = m_wndTopToolBar.GetButton(nGuiIndex);

            if (pButton == NULL)
                break;

            ASSERT(pButton->IsKindOf(RUNTIME_CLASS(CMFCToolBarEditBoxButton)));

            CMFCToolBarEditBoxButton* pEditBoxButton = (CMFCToolBarEditBoxButton*)pButton;
            CEdit* pEdit = pEditBoxButton->GetEditBox();

            if (pEdit == NULL)
                break;

            pEdit->SetFont(&m_ToolBarBtnFont); // height of this font is much less than default

            //CFont* pFont = pEdit->GetFont();
            //LOGFONT lf;
            //pFont->GetLogFont(&lf);  // confirmed that font has been changed

            m_wndTopToolBar.InvalidateButton(nGuiIndex);

        } while (false);

    }
    break;
    }

    return 0;
}

//

void CMFCToolBarEx::AdjustLocations()
{
    CMFCToolBar::AdjustLocations();

    if (GetSafeHwnd())
    {
        CMFCToolBarButton* pButton = NULL;

        int nGuiIndex = CommandToIndex(IDC_GUIEDITBOX);
        if (nGuiIndex != -1)
        {
            pButton = GetButton(nGuiIndex);
            if (pButton)
            {
                ASSERT(pButton->IsKindOf(RUNTIME_CLASS(CMFCToolBarEditBoxButton)));

                CMFCToolBarEditBoxButton* pEditBoxButton = (CMFCToolBarEditBoxButton*)pButton;

                CEdit* pEdit = pEditBoxButton->GetEditBox();
                if (pEdit != NULL)
                {
                    CRect rPos;
                    pEdit->GetRect(&rPos);
                    rPos.DeflateRect(0, 4);
                    pEdit->SetRect(rPos);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我调查了afxtoolbareditboxbutton.cpp的源代码,看到编辑框的高度是通过以下行在OnMove方法中设置的

int cy = GetGlobalData()->GetTextHeight();

我在CMFCToolBarEditBoxButton的子类中更改了该行来解决我的问题。