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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章