2017-05-19 278 views
0

我想要減少與CMFCToolBar上的CMFCToolbarEditBoxButton相關的編輯框的高度。如何更改與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); 
       } 
      } 
     } 
    } 
} 

回答

0

我調查的源代碼afxtoolbareditboxbutton.cpp,看到的是,編輯框的高度在OnMove方法被設置通過以下行

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

我改變該行中的子類CMFCToolBarEditBoxButton解決我的問題。

相關問題