我在Visual Studio 2008中使用MFC功能包。我在功能区中有一个编辑框(CMFCRibbonEdit),我只想包含大写字母。我知道我可以将ES_UPPERCASE传递给“Create”方法,但是从Ribbon本身调用“Create”,而不是我的代码显式调用。
要将编辑框添加到功能区,我称之为:
CMFCRibbonPanel* pPanel = pCategoryViewer->AddPanel("Panel Title");
CMFCRibbonEdit *cEdit = new CMFCRibbonPanel( ID_MYEDITBOX, 60, "Edit Title" );
pPanel->Add( cEdit );
根据我在MSDN上阅读的内容,我看到我可以重载CMFCRibbonEdit的“CreateEdit”功能。我试过了,但没办法。
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);
有谁知道我怎么能做到这一点?
答案 0 :(得分:0)
我认为你已经知道了,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行之后的所有大写字母。