标  题: 如何限制编辑框中的准许字符                       
发信人: Pacific (无情~~~Nolove), 信区: VisualC
发信站: BBS 水木清华站 (Fri Oct 16 17:16:48 1998)


    如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指           
定新的创建标志ES_NUMBERS,它是Windows 95新增加的标志,该标志限制 编辑控           
件只按收数字字符。如果用户需要复杂的编辑控件,可以使用Microsoft 的屏蔽           
编辑控件,它是一个很有用的OLE定制控件。                                          
    如果希望不使用OLE 定制控件自己处理字符,可以派生一个CEdit 类并处理           
WM_CHAR消息,然后从编辑控件中过滤出特定的字符。首先,使用ClassWizard 建          
立一个 CEdit的派生类,其次,在对话类中指定一个成员变量将编辑控件分类在           
OnInitdialog 中调用CWnd: : SubclassDlgItem .                                     
                                                                                 
//In your dialog class declaration (.H file )                                    
private :                                                                        
    CMyEdit m_wndEdit ; // Instance of your new edit control .                   
                                                                                 
//In you dialog class implementation (.CPP file )                                
BOOL CSampleDialog : : OnInitDialog ( )                                          
{                                                                                
    …                                                                           
                                                                                 
    //Subclass the edit lontrod .                                                
    m_wndEdit .SubclassDlgItem  (IDC_EDIT,this );                                
                                                                                 
    …                                                                           
}                                                                                
    使用ClassWizard处理WM_CHAR消息,计算nChar参量并决定所执行的操作,用          
户可以确定是否修改、传送字符。下例说明了如何显示字母字符,如果字符是字母         
字符,则调用CWnd ; OnChar,否则不调用OnChar.                                     
//Only display alphabetic dharacters .                                           
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )               
{                                                                                
    //Determine if nChar is an alphabetic character .                            
    if (: : IsCharAlpha  ( ( TCHAR) nChar ) )                                    
        CEdit : : OnChar (nChar, nRepCnt , nFlags );                             
}                                                                                
    如果要修改字符,则不能仅仅简单地用修改过的nChar调用CEdit : : OnChar,        
然后CEdit: : OnChar调用CWnd: : Default获取原来的wParam 和lParam 的值 ,这        
样是不行的。要修改一个字符,需要首先修改nChar,然后用修改过的nChar调用           
CWnd: : DefWindowProc。下例说明了如何将字符转变为大写:                          
                                                                                 
//Make all characters uppercase                                                  
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )               
{                                                                                
    //Make sure character is uppercase .                                         
    if (: : IsCharAlpha  ( .( TCHAR) nChar)                                      
         nChar=: : CharUpper (nChar ) ;                                          
                                                                                 
    //Bypass default OnChar processing and directly call                         
    //default window proc.                                                       
    DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt , nFlags )) ;              
}                                                                                

--
        老鸟有交待,中鸟要等待,菜鸟要忍耐。
        老鸟级功夫:吹牛、聊天、玩MUD 、发呆。
        中鸟级功夫:睡觉、灌水、玩游戏、NT&VC。
        菜鸟级功夫:学习、泡妞、玩篮球、And so on

        My E-Mail: Nolove@263.net

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: yazhou.bbs@bbs.net.t]
※ 修改:.fzx 于 Aug  9 16:51:12 修改本文.[FROM: heart.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.375毫秒