在派生类中重载WM_CHAR的处理函数:
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call 
int oldpos=LOWORD(GetSel());
CString str;
GetWindowText(str);

if ( nChar>='0' && nChar<='9' )
{
if ( oldpos<4 || ( oldpos>4 && oldpos<7) || oldpos>7)
{
str.Delete(oldpos,1);
SetWindowText(str);
SetSel(FormatPos(oldpos,oldpos));
CEdit::OnChar(nChar, nRepCnt, nFlags);
if ( LOWORD(GetSel())==4 || LOWORD(GetSel())==7)
{
oldpos=LOWORD(GetSel());
SetSel(FormatPos(oldpos+1,oldpos+1));
}
}
else
if ( oldpos==4 || oldpos==7 )
{
oldpos+=1;
SetSel(FormatPos(oldpos,oldpos));
str.Delete(oldpos,1);
SetWindowText(str);
SetSel(FormatPos(oldpos,oldpos));
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}
else
if ( nChar==VK_BACK )
{
if ( (oldpos>0 && oldpos<5) || ( oldpos>5 && oldpos<8) || oldpos>8)
{
str.Insert(oldpos,' ');
SetWindowText(str);
SetSel(FormatPos(oldpos,oldpos));
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
if ( oldpos==5 || oldpos==8 )
{
SetSel(FormatPos(oldpos-1,oldpos-1));
}
}

}重载键盘消息的处理函数:
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call 
CString str;
int oldpos=LOWORD(GetSel());
GetWindowText(str);
if ( nChar==VK_DELETE )
{
if ( oldpos<4 || ( oldpos>4 && oldpos<7) || oldpos>7)
{
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
GetWindowText(str);
if ( oldpos<7 )
str.Insert(str.Find('-',oldpos),' ');
SetWindowText(str);
SetSel(FormatPos(oldpos,oldpos));
}
else
if ( oldpos==4 || oldpos==7 )
return ;
}
else
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
这段代码是把一个CEDIT类扩展成一个具有时间日期格式的编辑框类。
我的问题是
if ( nChar>='0' && nChar<='9' )
{
if ( oldpos<4 || ( oldpos>4 && oldpos<7) || oldpos>7)
{
str.Delete(oldpos,1);
........................................若干代码
中的str.Delete(oldpos,1);起到什么作用。为什么把这句代码注视起来之后,在编辑框中就不能输入字符了。

解决方案 »

  1.   

    为啥不用Date Time Picker控件???
      

  2.   

    CString::Delete
    Deletes a character or characters from a string starting with the character at the given index.在你的代码中的功能是将选择的字符删除
      

  3.   

    多谢楼上2为的帮助,前面的问题已经解决。目前又遇到一个问题,就是实现输入的格式已经能够完成,但是如何控制输入的字符为“合理的字符”。
    比如说只有1,3,5,7,8,10,12月有31号,2月有可能只有29天。
    再比如说满30天就进一个月,满12个月就进一年。
    有什么好的实现方法呢?
    关于为什么用编辑框控件,我也是被逼的。。
    是不是应该在ONCHAR()中实现,或者是有别的更简单的方法?
    哪位哥们能够给段代码或者发给类似控制的链接做个参考,先在这里谢谢哥几个的关注了啊!