最近一个项目需要将CEdit控件的复制功能屏蔽掉,思来想去用了一个比较另类的方法解决了此问题。
基本思想:1 将CEdit控件的右键消息处处理掉,防止通过右键菜单中的复制选项,但是还可以利用快捷键ctrl+c复制
2 将CEdit控件中的鼠标移动消息处理掉,防止用鼠标选中文本
3 将CEdit控件的鼠标双击消息处理掉,防止利用双击选中文本
实现这几个功能CEdit控件的复制功能就无法实现了
实现步骤:
1. 从CEdit类派生出自己的类CMyEdit类
class CMyEdit : public CEdit
{
// Construction
public:
CMyEdit();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyEdit)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMyEdit();
// Generated message map functions
protected:
//{{AFX_MSG(CMyEdit)
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
2.重载鼠标右键消息函数
void CMyEdit::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CEdit::OnRButtonDown(nFlags, point);将原有的CEdit右键函数屏蔽掉,是他失去功能
}
3.重载鼠标移动消息函数
void CMyEdit::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CEdit::OnMouseMove(nFlags, point);
}
4.重载鼠标双击消息函数
void CMyEdit::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CEdit::OnLButtonDblClk(nFlags, point);
}
5.将CMyEdit类实例化