原文地址:http://blog.csdn.net/clever101/article/details/7639449
作者:朱金灿
来源:http://blog.csdn.net/clever101
很多时候当编辑框输入的数据不合法时我们想显示输入前的值。如何实现这个功能呢?
这时需要给编辑框发送EM_UNDO消息。
具体做法可以参考如下:编一个简单的对话框测试程序,添加两个编辑框,其中一个ID为IDC_EDIT1,然后添加下面代码:
void CTestEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
// m_nNum为对话框的int型数据成员
DDX_Text(pDX, IDC_EDIT1, m_nNum);
}
BEGIN_MESSAGE_MAP(CTestEditDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_EN_KILLFOCUS(IDC_EDIT1, &CTestEditDlg::OnEnKillfocusEdit1)
END_MESSAGE_MAP()
// IDC_EDIT1编辑框失去输入检点时响应
void CTestEditDlg::OnEnKillfocusEdit1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if(m_nNum>100)
::SendDlgItemMessage(m_hWnd,IDC_EDIT1,EM_UNDO,0,0);
}
参考文献:http://blog.csdn.net/wuyuan2011woaini/article/details/8059834
其中 SendDlgItemMessage的定义如下
//API函数
LRESULT SendDlgItemMessage(
HWND hDlg, // handle to dialog box
int nIDDlgItem, // control identifier
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
//Remarks
// The SendDlgItemMessage function does not return until the message has been processed.
// Using SendDlgItemMessage is identical to retrieving a handle to the specified control and calling the SendMessage function.
//CWnd::SendDlgItemMessage
LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
//说明:
// 这个函数向控件发送一条消息。
// SendDlgItemMessage直到消息被处理之后才会返回。
// 使用SendDlgItemMessage等同于获得给定控件的CWnd*指针并调用其SendMessage成员函数。