如何限制MFC的EDIT控件只能粘帖数字

用MFC做了一个基本的计算器程序,运算功能实现了,但是始终无法实现“支持剪切板的复制、粘贴功能,只允许复制、粘贴数字”这个作业要求,请达人我想想办法,要给出相应的代码... 用MFC做了一个基本的计算器程序,运算功能实现了,但是始终无法实现“支持剪切板的复制、粘贴功能,只允许复制、粘贴数字”这个作业要求,请达人我想想办法,要给出相应的代码 展开
 我来答
polang1988
2009-08-18 · TA获得超过171个赞
知道答主
回答量:100
采纳率:0%
帮助的人:109万
展开全部
这是MyEdit.h文件
//////////////////////////////////////////////////////////////////////////
#if !defined(AFX_MYEDIT_H__7729332B_3168_4D56_8147_8D0FF66C4D29__INCLUDED_)
#define AFX_MYEDIT_H__7729332B_3168_4D56_8147_8D0FF66C4D29__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// MyEdit.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CMyEdit window

class CMyEdit : public CEdit
{
// Construction
public:
CMyEdit();

// Attributes
public:

// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyEdit)
//}}AFX_VIRTUAL

// Implementation
public:
virtual ~CMyEdit();

// Generated message map functions
protected:
//{{AFX_MSG(CMyEdit)
afx_msg void OnChange();
//}}AFX_MSG

DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MYEDIT_H__7729332B_3168_4D56_8147_8D0FF66C4D29__INCLUDED_)
//////////////////////////////////////////////////////////////////////////
这是MyEdit.cpp文件
//////////////////////////////////////////////////////////////////////////
// MyEdit.cpp : implementation file
//

#include "stdafx.h"
#include "MyEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyEdit

CMyEdit::CMyEdit()
{
}

CMyEdit::~CMyEdit()
{
}

BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
//{{AFX_MSG_MAP(CMyEdit)
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMyEdit::OnChange()
{
CString strTemp;
GetWindowText(strTemp);
int len = strTemp.GetLength();
for (int i = 0; i < len; i ++)
{
if (strTemp.GetAt(i) < '0' || strTemp.GetAt(i) > '9')
{
if (strTemp.GetAt(i)!= '.')
{
strTemp = strTemp.Left(i);
SetWindowText(strTemp);
SetSel(i,i,TRUE);
return;
}
}
}
}
//////////////////////////////////////////////////////////////////////////
把你的Edit控件关联一个CMyEdit变量,这话你懂不?为一个控件关联变量,先关联CEdit变量,再手动把CEdit修改为CMyEdit。关联变量后会在你的对话框程序里面的DoDataExchange函数里面添加变量和控件的映射,比如 DDX_Control(pDX, IDC_EDIT1, m_qq);IDC_EDIT1控件ID,m_qq CMyEdit变量
实现原理是CMyEdit从CEdit派生出来的,它对EN_CHANGE消息进行拦截处理,就是OnChange函数,我现在编写的代码处理情况是只要不是数字,我就不让它在编辑框里,你可以自己编写特定的代码进行更好的处理,比如过滤掉字符,而不是删除全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
154504457
2009-08-18 · TA获得超过2000个赞
知道小有建树答主
回答量:1182
采纳率:0%
帮助的人:584万
展开全部
那个控件本身就有只写数字的功能,就在属性的第二页。最左边,最下边那个就是。根本就不用代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lz3272
推荐于2016-10-23 · TA获得超过333个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:352万
展开全部
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)

void CCListIconDlg::OnChangeEdit1()
{

CString strTemp;
CEdit* edit1 = ((CEdit*)(GetDlgItem(IDC_EDIT1)));
edit1->GetWindowText(strTemp);
int len = strTemp.GetLength();
for (int i = 0; i < len; i ++)
{
if (strTemp.GetAt(i) < '0' || strTemp.GetAt(i) > '9')
{
if (strTemp.GetAt(i)!= '.')
{
strTemp = strTemp.Left(i);
edit1->SetWindowText(strTemp);
edit1->SetSel(i,i,TRUE);
return;
}
}
}

}//不明白Hi一下
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式