资源描述:
《带有菜单的EDIT控件实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、带有菜单的EDIT控件实现 eidt控制是vc中经常使用的文本输入输出交互控制,有的时候,我们为了实现对输入,输出有特殊的操作过程,那么,原来的edit控制的功能也许就不一定能实现我们的要求,或者实现的不是那么灵活,因此,我们也经常在edit控件的基础上继承基类来做一些配生的子类情况下实现我们自己在工程中需要的特殊的要求。本文介绍一个可以带有菜单操作的edit类的实现过程,基础类eidt基类,在继承的子类上添加各个菜单操作功能,其中的菜单操作也是为了实现多edit中的文本进行各种文本的常规操作。 这个类的实现
2、过程如下:。h文件#if!defined(AFX_MENUEDIT_H__8EA53611_FD2B_11D4_B625_D04FA07D2222__INCLUDED_)#defineAFX_MENUEDIT_H__8EA53611_FD2B_11D4_B625_D04FA07D2222__INCLUDED_#if_MSC_VER>1000#pragmaonce#endifclassCMenuEdit:publicCEdit{public: CMenuEdit(){};protected: virtualBOOLOn
3、Command(WPARAMwParam,LPARAMlParam); afx_msgvoidOnContextMenu(CWnd*pWnd,CPointpoint); DECLARE_MESSAGE_MAP()};#endif。cpp文件#include"stdafx.h"#include"MenuEdit.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif#defineMES_UNDO _
4、T("&Undo")#defineMES_CUT _T("Cu&t")#defineMES_COPY _T("&Copy")#defineMES_PASTE _T("&Paste")#defineMES_DELETE _T("&Delete")#defineMES_SELECTALL _T("Select&All")#defineME_SELECTALL WM_USER+0x7000BEGIN_MESSAGE_MAP(CMenuEdit,CEdit) ON_WM_CONTEXTMENU()END_
5、MESSAGE_MAP()voidCMenuEdit::OnContextMenu(CWnd*pWnd,CPointpoint){ SetFocus(); CMenumenu; menu.CreatePopupMenu(); BOOLbReadOnly=GetStyle()&ES_READONLY; DWORDflags=CanUndo()&&!bReadOnly?0:MF_GRAYED; menu.InsertMenu(0,MF_BYPOSITION
6、flags,EM_UNDO, MES_UNDO);
7、 menu.InsertMenu(1,MF_BYPOSITION
8、MF_SEPARATOR); DWORDsel=GetSel(); flags=LOWORD(sel)==HIWORD(sel)?MF_GRAYED:0; menu.InsertMenu(2,MF_BYPOSITION
9、flags,WM_COPY, MES_COPY); flags=(flags==MF_GRAYED
10、
11、bReadOnly)?MF_GRAYED:0; menu.InsertMenu(2,MF_BYPOSITION
12、flag
13、s,WM_CUT, MES_CUT); menu.InsertMenu(4,MF_BYPOSITION
14、flags,WM_CLEAR, MES_DELETE); flags=IsClipboardFormatAvailable(CF_TEXT)&& !bReadOnly?0:MF_GRAYED; menu.InsertMenu(4,MF_BYPOSITION
15、flags,WM_PASTE, MES_PASTE); menu.InsertMenu(6,MF_BYPOSITION
16、MF_SEP
17、ARATOR); intlen=GetWindowTextLength(); flags=(!len
18、
19、(LOWORD(sel)==0&&HIWORD(sel)== len))?MF_GRAYED:0; menu.InsertMenu(7,MF_BYPOSITION
20、flags,ME_SELECTALL,