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 に答える