2012-10-25 68 views
0

我的問題很簡單(至少我認爲是這樣)。我想從文本輸入中捕獲一個值並將其存儲在一個txt文件中。現在我正在使用此代碼,並且操作按鈕用於在單擊時將文件內容寫入文件。但是我得到的是在文件中註冊的按鈕的值。將文本字段中的值存儲在.txt中

case WM_CREATE:{ 
     CreateWindow(
      TEXT("EDIT"), TEXT("value"), 
      WS_VISIBLE | WS_CHILD | WS_BORDER, 
      190, 50, 50, 20, 
      hwnd, (HMENU) NULL, NULL, NULL 
     ); 

     CreateWindow(
      TEXT("BUTTON"), TEXT("Ok"), 
      WS_VISIBLE | WS_CHILD, 
      250, 10, 30, 20, 
      hwnd, (HMENU) ID_BTN, NULL, NULL 
     ); 

     break; 
    } 

    case WM_COMMAND: { 
     if (LOWORD(wParam) == ID_BTN) { 
      std::ofstream outfile; 
      outfile.open("C:\\file.txt", std::ios_base::app); 
      outfile << ID_BTN; 
      outfile.close(); 
      MessageBox(hwnd, "Done!", "Title", MB_ICONINFORMATION); 
       return 0; 
     } 
     break; 
    } 

謝謝。


編輯:@ZanLynx,我試圖做你所說的話,但是編譯器一直說hwndText未聲明,當它。

107 `hwndText' undeclared (first use this function) 

下面的代碼

#define ID_BTN 1 
#define ID_TXT 2 

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
     case WM_CREATE: 
     { 

      HWND hwndText = CreateWindow(
       TEXT("Edit"), TEXT("Write here"), 
       WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 
       190, 10, 100, 20, 
       hwnd, (HMENU) ID_TXT, NULL, NULL 
      ); 

      CreateWindow(
       TEXT("BUTTON"), TEXT("OK"), 
       WS_VISIBLE | WS_CHILD, 
       250, 10, 30, 20, 
       hwnd, (HMENU) ID_BTN, NULL, NULL 
      ); 

      break; 
     } 

     case WM_COMMAND: 
     { 

      if (LOWORD(wParam) == ID_BTN) 
      { 
       LRESULT iTextSize = SendMessage(hwndText, EM_GETLIMITTEXT, 0, 0); 
       char *szText = new char[iTextSize]; 
       SendMessage(hwndText, WM_GETTEXT, iTextSize, (LPARAM)szText); 

       std::ofstream outfile; 
       outfile.open("C:\\f.txt", std::ios_base::app); 
       outfile << szText; 
       outfile.close(); 

       MessageBox(hwnd, "Done!", "Title", MB_ICONINFORMATION); 
       return 0; 
      }; 

      break; 
     } 

     case WM_DESTROY: 
      PostQuitMessage (0); 
      break; 

     default: 
      return DefWindowProc (hwnd, message, wParam, lParam); 
    } 

    return 0; 
} 
+1

您正在將ID_BTN寫入outfile。你期望會發生什麼? –

+0

你可以發送你的編輯框一個'WM_GETTEXT'消息。 – chris

+0

您的hwndText僅在大小寫塊內聲明。您需要使其成爲全局的,或使其成爲某種應用程序結構的一部分,這可能是全局或堆分配。在任何情況下,它都需要在消息之間持續存在並且可以被所有相關功能訪問。 –

回答

1

商店手柄到您的編輯窗口。

然後,您可以使用Edit Control函數獲取文本,以便將其寫入文件。

+0

如何將EDIT的值存儲在句柄中?對不起愚蠢的問題,但我昨天開始使用C++。 –

+0

@AllanDavidson:CreateWindow函數的結果是一個窗口句柄。或者是一個錯誤。你真的應該檢查你編寫的代碼中的錯誤。它可以讓你免受粗魯的驚喜,並想知道爲什麼事情不起作用。 –

+0

我編輯了問題描述。我仍然想知道爲什麼事情不起作用,因爲我不太瞭解C++結構,但不幸的是,由於時間不夠,我沒有時間去完整的學習。謝謝你幫助隊友。 –

相關問題