2013-09-29 80 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