编辑框控件的窗口类名是"edit",编辑框内容改变时,父窗口会收到WM_COMMAND通知,wParam参数的高16位为EN_CHANGE,低16位为窗口标识符。lParam值为编辑框窗口句柄。
本来想通过点击按钮事件画获取编辑框内容,考虑到可能部分读者可能仍然不会使用按钮。所以本节代码是在编辑框内容改变时获取编辑框内容。学一个控件时尽量不使用另一个控件,防止混淆。
  代码如下:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  static HWND hEdit;/*创建完成后,编辑框窗口句柄保留,会在获取内容时用到*/
  	TCHAR string[100];/*获取的窗口内容存放在此处*/
  	switch (uMsg)
  	{
  	case WM_CREATE:
#define	IDE_CONTENT	102
    		hEdit = CreateWindowEx(0, TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE, 10, 10, 100, 30, hWnd, (HMENU)IDE_CONTENT, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    		break;
  	case WM_COMMAND:
    		switch (HIWORD(wParam))
    		{
    		case EN_CHANGE:
      			switch (LOWORD(wParam))
      			{
      			case IDE_CONTENT:
        				GetWindowText(hEdit, string, 100);
/*GetWindowText可以获取窗口标题,第一个参数是窗口句柄、第二个参数是字符串地址、第三个参数是最多存放的字符个数*/
/*lParam是通过消息传递过来的编辑框句柄,不过考虑到可移植性,本代码使用了保存在hEdit变量中的句柄。*/
        			MessageBox(hWnd, string, TEXT("编辑框内容如下"), MB_OK);
/*MessageBox第一个参数是窗口句柄,此时,当对话框存在时,hWnd对应的窗口将不允许用户操作*/
        				break;
      			}
      			break;
    		}break;
  	case WM_CLOSE:
    		DestroyWindow(hWnd);
    		break;
  	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
  	default:
    		return DefWindowProc(hWnd, uMsg, wParam, lParam);
  	}
  	return 0;
}
为查看编辑框效果,本例把窗口背景改为GRAY_BRUSH,效果图如下:
 
    
注意,上述代码中是通过GetWindowText函数获取窗口句柄,这不是唯一方法。通过WM_GETTEXT消息同样能获取编辑框内容。事实上,本代码获取本进程中的子窗口内容时GetWindowText内部也是通过WM_GETTEXT消息实现的。跨进程时GetWindowText工作方法与此不一。有兴趣可以查一查WM_GETTEXT消息用法。
代码:
| UNICODE编码源码地址: | 13unicode.php | 
| TCHAR编码源码地址: | 13tchar.php | 
| ANSI编码源码地址: | 13ansi.php | 
作者QQ:3304576112  交流QQ群:316930386  本教程内容由 juliusun.com 保留版权,请匆复制传播。
 本教程内容由 juliusun.com 保留版权,请匆复制传播。
