VC编辑控件Edit基本操作

本文以一个简单的例子实现编辑控件的基本操作。


首先,新建一个对话框应用程序


然后在对话框上添加一个edit控件

VC编辑控件Edit基本操作_第1张图片


修改menu菜单

VC编辑控件Edit基本操作_第2张图片 VC编辑控件Edit基本操作_第3张图片 


添加处理程序

void CEditDemoDlg::InitUi() 
{
	CRect rect;
	GetClientRect(&rect);
	CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
	if (pEdit)
	{
		pEdit->MoveWindow(&rect);
	}
}

void CEditDemoDlg::OnFileExit() 
{
	// 调用基类成员函数 OnCancel 终止对话框
	OnCancel();
}

void CEditDemoDlg::OnFileNew() 
{
	// 将编辑控件中的文本初始化为零, 并清除其撤消缓冲区。
	CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
	pEdit->SetWindowText("");
	pEdit->EmptyUndoBuffer();
}

void CEditDemoDlg::OnEditUndo() 
{
	// 直接调用类 CEdit 的成员函数 Undo
	CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
	pEdit->Undo();
}

void CEditDemoDlg::OnEditCut() 
{
	// 直接调用类 CEdit 的成员函数 Cut
	((CEdit*)GetDlgItem(IDC_EDIT))->Cut(); 
}

void CEditDemoDlg::OnEditCopy() 
{
	// 直接调用类 CEdit 的成员函数 Copy
	((CEdit*)GetDlgItem(IDC_EDIT))->Copy(); 
}

void CEditDemoDlg::OnEditPaste() 
{
	// 直接调用类 CEdit 的成员函数 Paste
	((CEdit*)GetDlgItem(IDC_EDIT))->Paste();
}

void CEditDemoDlg::OnEditDel() 
{
	// 直接调用类 CEdit 的成员函数 Clear
	((CEdit*)GetDlgItem(IDC_EDIT))->Clear(); 
}

void CEditDemoDlg::OnEditSelectall() 
{
	int nStart,nEnd;
	// 设置选定字符的开始
	nStart=0;
	// 设置选定字符的结尾。函数 GetWindowTextLength 返回编辑控件中文本的长度
	nEnd=((CEdit*)GetDlgItem(IDC_EDIT))->GetWindowTextLength();
	// 以 nStart 和 nEnd 为参数调用类 CEdit 的成员函数 SetSel
	((CEdit*)GetDlgItem(IDC_EDIT))->SetSel(nStart,nEnd);
}

void CEditDemoDlg::OnEditSetfont() 
{
	LOGFONT lf;
	static CFont font;
	// 获得编辑框原来使用的字体信息,并使用该信息初始化字体对话框
	CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
	pEdit->GetFont()->GetLogFont(&lf);
	CFontDialog dlg(&lf);
	// 弹出字体对话框以供用户选择新的字体,
	// 并在用户确认的情况下更改编辑控件所使用的字体。
	if (dlg.DoModal()==IDOK)
	{
		dlg.GetCurrentFont(&lf);
		font.DeleteObject();
		font.CreateFontIndirect(&lf);
		pEdit->SetFont(&font);
	}
}

void CEditDemoDlg::OnInitMenuPopup( CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu )
{
	CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
	// 当用户单击的是窗口的控制菜单时 bSysMenu 参数为真,否则为假
	if (!bSysMenu)
	{
		// 检查编辑控件是否有可撤消的操作
		if (pEdit->CanUndo())
		{
			pPopupMenu->EnableMenuItem(ID_EDIT_UNDO,MF_ENABLED);
		}
		else
		{
			pPopupMenu->EnableMenuItem(ID_EDIT_UNDO,MF_GRAYED);
		}
		// 检查编辑控件中是否有选定的文本
		int nStart,nEnd;
		pEdit->GetSel(nStart,nEnd);
		if (nStart==nEnd)
		{
			pPopupMenu->EnableMenuItem(ID_EDIT_CUT,MF_GRAYED);
			pPopupMenu->EnableMenuItem(ID_EDIT_COPY,MF_GRAYED);
			pPopupMenu->EnableMenuItem(ID_EDIT_DEL,MF_GRAYED);
		}
		else
		{
			pPopupMenu->EnableMenuItem(ID_EDIT_CUT,MF_ENABLED);
			pPopupMenu->EnableMenuItem(ID_EDIT_COPY,MF_ENABLED);
			pPopupMenu->EnableMenuItem(ID_EDIT_DEL,MF_ENABLED);
		}
		// 检查剪贴板中是否有文本格式的数据可供粘贴
		// 该过程通过调用 Win32 API 函数 IsClipboardFormatAvailable 来实现
		if (IsClipboardFormatAvailable(CF_TEXT))
		{
			pPopupMenu->EnableMenuItem(ID_EDIT_PASTE,MF_ENABLED);
		}
		else
		{
			pPopupMenu->EnableMenuItem(ID_EDIT_PASTE,MF_GRAYED);
		}
	}
}


void CEditDemoDlg::OnSize(UINT nType, int cx, int cy) 
{	
	// 调用基类的 OnSize 成员函数
	CDialog::OnSize(nType, cx, cy);
	CRect rect;
	// 获得父窗口的客户区矩形
	GetClientRect(&rect);
	CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
	if (pEdit)
	{
		// 改变编辑控件的大小以适应父窗口大小的改变
		pEdit->MoveWindow(&rect);
	}
}

运行效果

VC编辑控件Edit基本操作_第4张图片


源码下载


你可能感兴趣的:(操作,VC,编辑控件,eidt)