CEdt子类化

在制作十六进制文本编辑器的时候遇到这个问题。Edit编辑框如何只选择十六进制数据?CEdit类中的消息函数是固定的不可修改的,它接收键盘输入的字符时直接把字符传给了Edit编辑框。解决办法是生成一个新类,从CEdit类中派生一个新类CMyEdit,修改消息函数。当然需要用CMyEdit先实例化,再在对话框初始化的时候加入Edit_Hex.SubclassDlgItem(IDC_EDIT_HexDisplay,this);进行子类化。具体炒作方法:

1.从CEdit类派生一个新类CMyEdit


产生新的文件MyEdit.cpp和MyEdit.h,剩下的就是修改新的类的消息函数。

2.修改消息处理函数

  在MyEdit.cpp中增加如下函数:

// CMyEdit 消息处理程序

BOOL CMyEdit::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	//switch()
	if(pMsg->message==WM_CHAR)
	{
         int c=(int)pMsg->wParam; 
         if(c>=48&&c <=57||c>='A'&&c <='F') 
		 { 

             last++; 
             if(last==2) 
			 { 
                 last=0; 
                 SendMessage(WM_CHAR,32,0); 
			 } 
             return CEdit::PreTranslateMessage(pMsg); 
		 } 
     else if(c>='a'&&c <='f') 
	 { 

             last++; 
             if(last==2) 
			 { 
                last=0; 
                SendMessage(WM_CHAR,32,0); 
			 } 
             pMsg->wParam-=32; 
             return CEdit::PreTranslateMessage(pMsg); 
	 }
     else 
		 return TRUE; 
}

	
	return CEdit::PreTranslateMessage(pMsg);
}

3.在对话框文件的头文件新增CMyEdit对象

// 实现
protected:
	HICON m_hIcon;
	CMyEdit Edit_Hex;

4.在对话框初始化中增加子类化操作

在BOOL CUSBToolDlg::OnInitDialog()中增加如下:

Edit_Hex.SubclassDlgItem(IDC_EDIT_HexDisplay,this);

这样就OK了。

具体案例详见:

1.http://download.csdn.net/download/wudeshou82666/1664695

2.http://download.csdn.net/download/wudeshou82666/1664489



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值