1

我正在使用Visual Studio 2008中的MFC Feature Pack。我在功能區中有一個編輯框(CMFCRibbonEdit),我只想包含大寫字母。我知道我可以將ES_UPPERCASE傳遞給「Create」方法,但是從功能區本身調用「Create」,而不是由我的代碼明確地調用。如何使CMFCRibbonEdit自動將內容轉換爲大寫?

編輯框添加到我的絲帶,我稱之爲:

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); 

有誰知道我該怎麼做到這一點?

+1

您的解決方案無法正常工作的原因是因爲該控件實際上是一個豐富的編輯,它不支持'ES_UPPERCASE' - 請參閱http://msdn.microsoft.com/zh-cn/library/bb774367.aspx 。 – ChrisN 2010-09-16 21:06:55

回答

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函數行之後全部大寫字母。