Как я могу сделать CMFCRibbonEdit автоматически конвертировать содержимое в верхний регистр? - PullRequest
1 голос
/ 16 сентября 2010

Я использую пакет компонентов MFC в Visual Studio 2008. У меня есть поле для редактирования (CMFCRibbonEdit) на ленте, которое я хотел бы содержать только заглавными буквами.Я знаю, что могу передать ES_UPPERCASE в метод «Create», однако «Create» вызывается из самой ленты, а не явно из моего кода.

Чтобы добавить поле редактирования на мою ленту, я вызываю:

CMFCRibbonPanel* pPanel = pCategoryViewer->AddPanel("Panel Title");
CMFCRibbonEdit *cEdit = new CMFCRibbonPanel( ID_MYEDITBOX, 60, "Edit Title" );
pPanel->Add( cEdit );

Исходя из того, что я прочитал в MSDN, я увидел, что могу перегрузить функцию «CreateEdit» CMFCRibbonEdit.Я попробовал это, но это не сработало.

class UpperCaseRibbonEdit : public CMFCRibbonEdit
{
public:
  UpperCaseRibbonEdit( UINT nID, int nWidth, LPCTSTR lpszLabel )
    :CMFCRibbonEdit( nID, nWidth, lpszLabel )
  {}

  CMFCRibbonRichEditCtrl* CreateEdit( CWnd* pWndParent, DWORD dwEditStyle )
  {
    return CMFCRibbonEdit::CreateEdit( pWndParent, dwEditStyle | ES_UPPERCASE );
  }
};

Я также попытался сделать этот вызов после инициализации моей ленты и ее элементов управления.Это тоже не сработало.

HWND editHwnd = GetDlgItem( ID_MYEDITBOX )->GetSafeHwnd();
SetWindowLong(editHwnd, GWL_STYLE, (LONG)GetWindowLong(editHwnd, GWL_STYLE) | ES_UPPERCASE);

Кто-нибудь знает, как мне это сделать?

1 Ответ

0 голосов
/ 08 апреля 2014

Как я думаю, вы уже знаете, CMFCRibbonEdit имеет внутри переменную-член CMFCRibbonRichEditCtrl* m_pWndEdit;, тип которой является потомком CRichEditCtrl.Таким образом, поскольку на странице @ в комментарии Станича говорится, что ES_UPPERCASE для него не поддерживается.

Полагаю, ваш лучший вариант: в своем производном классе вы не забудете поместить ON_CONTROL_REFLECT(EN_CHANGE, OnChange) в карту сообщений;и ищем исходный код базового класса:

void CMFCRibbonRichEditCtrl::OnChange()
{
    CString strText;
    GetWindowText(strText);

    m_edit.m_strEdit = strText;
    m_edit.SetEditText(strText);
}

замените в вашем strText все прописные буквы после строки GetWindowText.

...