Rich Edit Control là một cửa sổ trong đó người dùng có thể nhập và chỉnh sửa văn bản . Văn bản có thể được gán ký tự và định dạng đoạn văn, đồng thời có thể bao gồm các đối tượng OLE được nhúng. Nó được đại diện bởi lớp CRichEditCtrl .
Đây là danh sách các phương thức trong lớp CrichEditCtrl.Đây là danh sách ánh xạ thông báo cho Rich Edit Control.
Hãy để chúng tôi vào một ví dụ đơn giản bằng cách tạo một ứng dụng dựa trên hộp thoại MFC mới.
Bước 1 – Xóa dòng TODO và kéo một Rich Edit Control và ba nút từ Hộp công cụ.
Bước 2 – Thay đổi Chú thích của ba nút này từ Đậm, Nghiêng và Gạch dưới thành IDC_BUTTON_BOLD, IDC_BUTTON_ITALIC và IDC_BUTTON_UNDERLINE tương ứng.
Bước 3 – Đặt các thuộc tính sau thành True: Multiline, Want Return, Vertical Scroll.
Bước 4 – Thêm biến kiểm soát m_richEdit cho Kiểm soát chỉnh sửa phong phú.
Bước 5 − Truy cập CMFCRichEditApp và gọi hàm ::AfxInitRichEdit2() trong hàm CMFCRichEditApp::InitInstance() như được hiển thị trong đoạn mã sau.
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;
}
Bước 6 – Thêm trình xử lý sự kiện Nhấp chuột cho cả ba nút. Đây là cách triển khai cho các sự kiện này
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();
}
Bước 7 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau. Bây giờ hãy nhập văn bản và thay đổi định dạng của nó bằng cách chọn văn bản rồi nhấp vào bất kỳ nút nào trong ba nút.
MFC – Hộc Nhóm
Hộp nhóm là một điều khiển tĩnh được sử dụng để đặt một nhóm điều khiển hiển thị hoặc có lập trình. Điều khiển là một hình chữ nhật nhóm các điều khiển khác lại với nhau. Các điều khiển được nhóm lại bằng cách vẽ đường viền xung quanh chúng và hiển thị văn bản đã cho ở góc trên bên trái.
Trong hộp thoại sau, hộp Nhóm chứa ba nút radio bên trong.
MFC – Nút Xoay
Điều khiển nút xoay (còn được gọi là điều khiển lên xuống) là một cặp nút mũi tên mà người dùng có thể bấm để tăng hoặc giảm giá trị, chẳng hạn như vị trí cuộn hoặc số được hiển thị trong điều khiển đồng hành. nó được đại diện bởi lớp CSpinButtonCtrl . Đây là danh sách các phương thức trong lớp CSpinButtonCtrl
Sơ Không. | Tên & Mô tả |
1 | Tạo ra Tạo điều khiển nút xoay và gắn nó vào đối tượng CSpinButtonCtrl. |
2 | TạoEx Tạo một điều khiển nút xoay với các kiểu mở rộng của Windows đã chỉ định và gắn nó vào một đối tượng CSpinButtonCtrl. |
3 | GetAccel Truy xuất thông tin gia tốc cho điều khiển nút xoay. |
4 | GetBase Truy xuất cơ sở hiện tại cho điều khiển nút xoay. |
5 | GetBuddy Truy xuất một con trỏ tới cửa sổ bạn thân hiện tại. |
6 | GetPos Truy xuất vị trí hiện tại của điều khiển nút xoay. |
7 | Nhận phạm vi Lấy giới hạn trên và dưới (phạm vi) cho điều khiển nút xoay. |
8 | Thiết lập gia tốc Đặt gia tốc cho điều khiển nút xoay. |
9 | SetBase Đặt cơ sở cho điều khiển nút xoay. |
10 | SetBuddy Đặt cửa sổ bạn thân cho điều khiển nút xoay. |
11 | ĐặtPos Đặt vị trí hiện tại cho điều khiển. |
12 | Đặt dải Đặt giới hạn trên và dưới (phạm vi) cho điều khiển nút xoay. |
Dưới đây là danh sách ánh xạ thông báo cho điều khiển Nút xoay.
Thông điệp | nhập bản đồ | Sự mô tả |
BN_CLICKED | ON_BN_CLICKED( <id>, <thành viênFxn> ) | Khung gọi chức năng thành viên này khi được nhấp vào nút. |
BN_DISABLE | ON_BN_DISABLE( <id>, <thành viênFxn> ) | Khung gọi chức năng thành viên này khi nút bị tắt. |
BN_DOUBLECLICKED | ON_BN_DOUBLECLICKED( <id>, <thành viênFxn> ) | Khung gọi chức năng thành viên này khi nút được nhấp đúp. |
BN_PAINT | ON_BN_PAINT( <id>, <thành viênFxn> ) | Khung gọi chức năng thành viên này khi một ứng dụng đưa ra yêu cầu sơn lại một nút. |
Chúng ta hãy xem xét một ví dụ đơn giản về nút Spin bằng cách tạo một ứng dụng dựa trên hộp thoại MFC mới.
Bước 1 – Thêm một Điều khiển quay và một Điều khiển chỉnh sửa từ Hộp công cụ.
Bước 2 – Chuyển đến Thuộc tính của Kiểm soát vòng quay và đặt các giá trị của Auto Buddy và Set Buddy Integer thành True.
MFC – Quản lý Updown Control
Bước 1 – Thêm một biến điều khiển m_spinControl để điều khiển vắt với các cài đặt như trong ảnh chụp nhanh sau đây.
Bước 2 – Thêm biến điều khiển m_editControl cho điều khiển Chỉnh sửa.
Bước 3 – Thêm trình xử lý sự kiện cho sự kiện UDN_DELTAPOS cho nút xoay.
Bước 4 – Cập nhật OnInitDialog() như được hiển thị trong đoạn mã sau.
BOOL CMFCSpinButtonDlg::OnInitDialog() {
CDialogEx::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_spinControl.SetRange(0, 100);
m_spinControl.SetPos(50);
m_editControl.SetWindowText(L"50");
return TRUE; // return TRUE unless you set the focus to a control
}
Bước 5 – Đây là triển khai sự kiện điều khiển quay.
void CMFCSpinButtonDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: Add your control notification handler code here
// Declare a pointer to a CSpinButtonCtrl;
CSpinButtonCtrl *Spinner;
// Get a pointer to our spin button
Spinner = reinterpret_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN1));
// Found out if it is our spin button that sent the message
// This conditional statement appears useless but so what?
if (pNMHDR -> hwndFrom == Spinner -> m_hWnd) {
// Get the current value of the spin button
int CurPos = pNMUpDown→iPos;
// Convert the value to a string
CString str;
str.Format(L"%d", CurPos);
// Display the value into the accompanying edit box
m_editControl.SetWindowText(str);
}
*pResult = 0;
}
Bước 6 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau.