无法从EDIT框中读取值(Windows编程和C)

时间:2013-09-29 03:52:48

标签: c windows

我需要有关此代码的帮助。我需要将焦点设置为编辑按钮并读取在编辑框中输入的值并将其移动到变量以进行进一步处理。此代码使用TextOut()创建一个文本提示,其中显示“输入质量值:”和一个带有IDC_EDIT_MASS和hEditMASS的编辑框。

我无法将编辑框中的值读入变量质量。 代码如下*

#define IDC_EDIT_MASS 103         // Edit box identifier
RESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
 lParam)
{ 
   HWND hEditMASS;
   HDC hDC;
   PAINTSTRUCT Ps;
   HFONT        font;
   float mass;
   char msgMASS[]="Enter the value of mass:";
   switch (message)                  /* handle the messages */
      {
      case WM_CREATE :
          hEditMASS=CreateWindowEx(WS_EX_CLIENTEDGE, “EDIT",
            "",    WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
            550,
            200,
            200,
            20,
            hwnd,
            (HMENU)IDC_EDIT_MASS,
            GetModuleHandle(NULL),
            NULL);
            Break;
      case WM_COMMAND:
        switch (LOWORD(wParam)) { 
          case IDC_EDIT_MASS:
            SendMessage(hEditMASS,WM_GETTEXT, sizeof(buffer)/sizeof(buffer[0]), 
                reinterpret_cast<LPARAM>(buffer));
            int ctxtlen=GetWindowTextlength(GetDlgItem(hwnd, IDC_EDIT_MASS));
            GetWindowText(GetDlgItem(hwnd, IDC_EDIT_MASS), buffer,(cTxtLen + 1);
            mass=atoi(buffer);
            MessageBox(NULL,buffer,"Information",MB_ICONINFORMATION);
            break;
          }
         Break;
       case WM_SETFOCUS :
         SetFocus (hwnd) ;
         break;
       case WM_PAINT:
         hDC = BeginPaint(hwnd, &Ps);
         //inputs prompts ...
         TextOut(hDC,300,200,msgMASS,sizeof(msgMASS));
         EndPaint(hwnd, &Ps);
         break;
       case WM_DESTROY:
         PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
         break;
       default:                      /* for messages that we don't deal with */
          return DefWindowProc (hwnd, message, wParam, lParam);
        }
       return 0;
       }

1 个答案:

答案 0 :(得分:0)

hEditMASS是一个本地的自动存储持续时间变量。您可以在邮件为WM_CREATE时进行设置。但是,您可以在邮件为WM_COMMAND时访问它。自动存储持续时间变量不会在调用之间保留其值。为了保持其价值,您必须使其成为全局或使其成为静态,例如:

static HWND hEditMASS;

请记住,您现在可能只能在一个窗口中使用窗口过程,因为创建具有相同窗口过程的任何其他窗口最终将使用相同的hEditMASS变量,并且当您接下来尝试访问hEditMASS,它将指向具有该窗口过程的最近创建的窗口中的编辑控件。