Как я могу сделать CMFCRibbonEdit автоматически конвертировать содержимое в верхний регистр?
Я использую пакет компонентов 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 ответ
Как я думаю, вы уже знаете, CMFCRibbonEdit имеет внутри переменную-член CMFCRibbonRichEditCtrl* m_pWndEdit;
какой тип является потомком CRichEditCtrl. Таким образом, как говорится в комментарии к странице @Stanich, 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.