实现的功能是:按下ENTER键,焦点转移到下一个编辑框,需要重写默认的IDOK按钮的消息响应函数。
可以通过捕获键盘按键消息,然后在此消息响应函数中把输入焦点移动到下一编辑框控件来实现。有两种实现方式
1::为编辑框控件生成一个类,然后利用这个类来捕获按键消息
2::修改编辑框控件的窗口过程函数,就是自己编写一个编辑框控件的窗口过程,然后替换MFC提供的默认的编辑框控件窗口过程函数。
我们知道,窗口的所有消息都要到该窗口的窗口过程函数中来报道,因此,在这个新过程函数中可以进行一个判断,如果当前来到的是一个字符消息,并且该字符是一个回车符,那么就将输入焦点移动到下一编辑框控件。
我们知道,窗口过程是子啊定义窗口类时设置的,那么当一个窗口已经创建之后,如何去修改该窗口已指定的过程函数呢?可以通过调用SetWindowLong函数来实现。
函数原型:
long SetWindowLong(HWND hWnd,int nIndex,LONG dwNewLong)
参数意义:hWnd,指定想要改变其属性的窗口句柄
nIndex,指定要设置的属性值的偏移地址
dwNewLong,指定设置的初值
函数调用成功,将返回先前为窗口指定的32位整型值,也就是,如果为指定窗口设定一个新的窗口过程,则该函数返回先前为该窗口类指定的窗口过程的地址。因此,可以利用这个函数来修改编辑框控件的窗口过程。在响应函数时,对话框的子控件尚未完成,只用在消息处理完毕之后,对话框及其子控件才全部创建完成,因此在此消息的响应函数中是无法获得对话框中各子控件的窗口对象的。
实际中,在对话框及其子控件创建完成,将要显示之前会发送一个消息:WM_INITDLALOG,因此,在此消息的响应函数中修改编辑框控件的窗口过程比较合适,
窗口过程:WndProc