2013-09-29 29 views
-1

我需要此代码的帮助。我需要将焦点设置为编辑按钮,然后读取编辑框中输入的值并将其移至变量以供进一步处理。此代码使用TextOut()创建一个文本提示,其中显示“输入mass的值:”以及带有IDC_EDIT_MASS和hEditMASS旁边的编辑框。无法从编辑框中读取值(windows编程和C)

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

#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; 
     } 

回答

0

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

static HWND hEditMASS; 

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

+0

我会试试看。谢谢。 – Scifie

+0

问题WM_COMMAND stmts,特别是GetWindowtextlength()和GetWindowText()。当程序运行时,“WM_SETFOCUS”案例有助于将焦点设置到编辑框中,还有更多的工作要做。因为没有这样的事情发生,所以我需要使用鼠标来选择编辑框,并尝试输入值,虽然Im无法这样做,因为WM_COMMAND中的Messagebox()被执行。 – Scifie