用VC做一个文本框。
要求:前三个必须是英文字母,大写。后三位为数字。
void CHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
CHexEdit(CEDIT派生类)
是否是在这个派生类函数中实现??
怎样实现??谢谢!!
要求:前三个必须是英文字母,大写。后三位为数字。
void CHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
CHexEdit(CEDIT派生类)
是否是在这个派生类函数中实现??
怎样实现??谢谢!!
解决方案 »
- UDP发送数据sendto碰到延时返回的奇怪问题。
- activex 控件对鼠标按键的响应,传到子控件 (CTreeCtrl) 问题
- 求助!在线等待100分!利用系统钩子取得虚拟键值问题
- 请问这样的错误该怎样修改:error LNK2001: unresolved external symbol "public: static class CORBA::BOA CORBA::Orbix" (?Orbix@CORB
- 为何win2000任务管理器杀不掉服务进程?
- 对话框CDialog类的的一个对象,用DoModal()弹出后,是否会启动一个线程.
- 程序员遭遇爱情(散分)
- ▁▂▃▄▅在线结贴▅▄▃▂▁vc库里有没有可以直接调用的2-10-16进制互相转换函数
- edit控件的问题??
- 屏幕保护程序,要求根据键盘信息来自动运行,可以设定自动运行的时间,多久没按键然后才开始运行!
- 在多文档中使用CSplitterWnd类分割窗体,出现"建立空文档失败!"错误,请教!
- 进度条的边框问题
如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指定新
的创建标志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 ))
}
long fncGetColNo(CEdit* pEdit)
{
long i;
long j;
long k;
long LineNo;
long ColNo;
i = ::SendMessage(pEdit->m_hWnd, EM_GETSEL, NULL, NULL);
j=i / 65536;
LineNo = ::SendMessage(pEdit->m_hWnd, EM_LINEFROMCHAR, j, 0);
LineNo = LineNo + 1;
k = ::SendMessage(pEdit->m_hWnd, EM_LINEINDEX, -1, 0);
ColNo = j - k + 1;
return ColNo;
}
提醒你:千万不能仅仅考虑过滤键盘事件,还应该考虑用户通过ctrl+V键粘贴,还应该防止用户通过键盘上的pop menu键弹出粘贴项目。
我劝你,还不如听从上面朋友的建议,不要实时的过滤,还是到提交的时候作输入格式的合法性check比较好,又简单,又安全。通常的程序也都是这样做的。
=
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
{
// TODO: Add your control notification handler code here
char buff[100];
ZeroMemory(buff,100);
UpdateData(TRUE);
strcpy(buff,m_MailAddr);
for (int i=0;i<3;i++)
{
if ((buff[i]<65)||(buff[i]>90))
{
MessageBox("不是大写字母");
break;
} }
for (int k=3;k<6;k++)
{
if ((buff[k]<48)||(buff[k]>57))
{
MessageBox("不是数字");
break;
}
}
}