2017-05-19 41 views
0

CMFCToolBarのCMFCToolbarEditBoxButtonに関連付けられたエディットボックスの高さを低くしたいとします。CMFCToolbarEditBoxButtonに関連付けられたエディットボックスの高さを変更する方法

CMFCToolbarComboBoxButtonに関連付けられたコンボボックスの高さを、OnToolbarResetのReplaceButtonステップの後にフォントサイズを変更することによって正常に変更できました。

このアプローチは、CMFCToolbarEditBoxButtonでは機能しません。 (次のコードのCGuiEditBoxセクションを参照してください)

最初のコードはOnToolbarSetのコードです。編集ボックスにフォントを割り当てます。私はフォントのサイズを非常に小さくしようと試みました。それは効果がなかった。

次へ私は、ツールバーの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の。

関連する問題