-1

我需要有关此代码的帮助。我需要将焦点设置为编辑按钮并读取在编辑框中输入的值并将其移动到变量中以进行进一步处理。此代码使用 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;
       }
4

1 回答 1

0

hEditMASS是一个本地的、自动存储持续时间的变量。您在消息为 时设置它WM_CREATE。但是,当消息为WM_COMMAND. 自动存储持续时间变量在调用之间不保留其值。为了使其保持其价值,您必须使其成为全局或使其成为静态,例如:

static HWND hEditMASS;

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

于 2013-09-29T03:55:30.720 回答