MFC - 富文本编辑控件

Rich Edit 富文本编辑控件控件是用户可以在其中输入和编辑文本的窗口。 文本可以指定字符和段落格式,并且可以包含嵌入的 OLE 对象。 它由 CRichEditCtrl 类表示。

让我们通过创建一个新的基于 MFC 对话框的应用程序来了解一个简单的示例。

步骤 1 − 删除 TODO 行并从工具箱中拖动一个 Rich Edit 控件和三个按钮。

富文本编辑

步骤 2 − 将这三个按钮的标题从粗体、斜体和下划线分别更改为 IDC_BUTTON_BOLD、IDC_BUTTON_ITALIC 和 IDC_BUTTON_UNDERLINE。

步骤 3 − 将以下属性设置为 True:Multiline、Want Return、Vertical Scroll。

步骤 4 − 为 Rich Edit 控件添加控件变量 m_richEdit。

富文本编辑

步骤 5 − 转到 CMFCRichEditApp 并调用 CMFCRichEditApp::InitInstance() 函数中的 ::AfxInitRichEdit2(),如以下代码所示。

BOOL CMFCRichEditApp::InitInstance() {
//TODO: call AfxInitRichEdit2() to initialize richedit2 library.
   // InitCommonControlsEx() is required on Windows XP if an application
   // manifest specifies use of ComCtl32.dll version 6 or later to enable
   // visual styles. Otherwise, any window creation will fail.
   INITCOMMONCONTROLSEX InitCtrls;
   InitCtrls.dwSize = sizeof(InitCtrls);
   // Set this to include all the common control classes you want to use
   // in your application.
   InitCtrls.dwICC = ICC_WIN95_CLASSES;
   InitCommonControlsEx(&InitCtrls);

   ::AfxInitRichEdit2();
   CWinApp::InitInstance();

   
   AfxEnableControlContainer();
   
   // Create the shell manager, in case the dialog contains
   // any shell tree view or shell list view controls.
   CShellManager *pShellManager = new CShellManager;

   // Activate "Windows Native" visual manager for enabling themes in MFC controls
   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

   // Standard initialization
   // If you are not using these features and wish to reduce the size
   // of your final executable, you should remove from the following
   // the specific initialization routines you do not need
   // Change the registry key under which our settings are stored
   // TODO: You should modify this string to be something appropriate
   // such as the name of your company or organization
   SetRegistryKey(_T("Local AppWizard-Generated Applications"));

   CMFCRichEditDlg dlg;
   m_pMainWnd = &dlg;
   INT_PTR nResponse = dlg.DoModal();
   if (nResponse == IDOK) {
      // TODO: Place code here to handle when the dialog is
      // dismissed with OK
   }else if (nResponse == IDCANCEL) {
      // TODO: Place code here to handle when the dialog is
      // dismissed with Cancel
   }else if (nResponse == -1) {
      TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so
                                application is terminating unexpectedly.\n");
      TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on
              the dialog, you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n");
   }
	
   // Delete the shell manager created above.
   if (pShellManager != NULL) {
      delete pShellManager;
   }
	
   // Since the dialog has been closed, return FALSE so that we exit the
   // application, rather than start the application's message pump.
   return FALSE;
}

步骤 6 − 为所有三个按钮添加 Click 事件处理程序。 以下是这些事件的实现。

void CMFCRichEditDlg::OnBnClickedButtonBold() { 
   // TODO: Add your control notification handler code here 
   CHARFORMAT Cfm;
	
   m_richEdit.GetSelectionCharFormat(Cfm);  
	
   Cfm.cbSize = sizeof(CHARFORMAT); 
   Cfm.dwMask = CFM_BOLD; 
   Cfm.dwEffects ^= CFE_BOLD; 
	
   m_richEdit.SetSelectionCharFormat(Cfm); 
   m_richEdit.SetFocus(); 
}
  
void CMFCRichEditDlg::OnBnClickedButtonItalic() { 
   // TODO: Add your control notification handler code here
   CHARFORMAT Cfm;  
   
   m_richEdit.GetSelectionCharFormat(Cfm);  
	
   Cfm.cbSize = sizeof(CHARFORMAT); 
   Cfm.dwMask = CFM_ITALIC; 
   Cfm.dwEffects ^= CFE_ITALIC;  
	
   m_richEdit.SetSelectionCharFormat(Cfm); 
   m_richEdit.SetFocus(); 
}
  
void CMFCRichEditDlg::OnBnClickedButtonUnderline() { 
   // TODO: Add your control notification handler code here 
   CHARFORMAT Cfm;  
	
   m_richEdit.GetSelectionCharFormat(Cfm); 
	
   Cfm.cbSize = sizeof(CHARFORMAT); 
   Cfm.dwMask = CFM_UNDERLINE; 
   Cfm.dwEffects ^= CFE_UNDERLINE;  
	
   m_richEdit.SetSelectionCharFormat(Cfm); 
   m_richEdit.SetFocus(); 
} 

步骤 7 − 当上面的代码被编译并执行时,您将看到以下输出。 现在输入文本并通过选择文本更改其格式,然后单击三个按钮中的任何一个。

富文本编辑

❮ mfc_windows_controls.html