惧留孙网

juliusun.com

惧留孙网 > 在线教程 > WIN32 SDK教程

编辑框

  编辑框控件的窗口类名是"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 C语言窗口程序学习群 本教程内容由 juliusun.com 保留版权,请匆复制传播。

上一页  目录  下一页
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的