1

我在 Visual Studio 2008 中使用 MFC 功能包。我在功能区中有一个编辑框 (CMFCRibbonEdit),我只想包含大写字母。我知道我可以将 ES_UPPERCASE 传递给“Create”方法,但是“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);

有谁知道我怎么能做到这一点?

4

1 回答 1

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 行之后的所有大写字母。

于 2014-04-08T14:18:47.507 回答