2013-04-24 139 views
1

我做了一個簡單的win32應用程序,用編輯控件打開一個對話框。搜索幾個小時後,我無法找到一種方法從此編輯控件獲取用戶輸入並將其存儲在一個字符串中。我認爲代碼here做我想要的(沒有測試它),但我不明白任何它。所以解釋或其他解決方案會很好。 (我使用VC++ 2012)C++從對話框中獲取數據

其他solution我發現,IS C++:S

好的,我製成一個單獨的消息循環,和插入的代碼在那裏。現在看起來是這樣的:

INT_PTR CALLBACK IP(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    UNREFERENCED_PARAMETER(lParam); 
    switch (message) 
    { 
    case WM_INITDIALOG: 
     return (INT_PTR)TRUE; 

    case WM_COMMAND: 
     if (LOWORD(wParam) == IDCANCEL) 
     { 
      EndDialog(hDlg, LOWORD(wParam)); 
      return (INT_PTR)TRUE; 
     } 
     else if(LOWORD(wParam) == IDOK) 
     { 
      TCHAR szBuf[40]; 
      GetDlgItemText(hDlg, IDC_EDIT1, szBuf, 39); 
       //Breakpoint here! 
       //szBuf="127.0.0.1" as intended :) 
      EndDialog(hDlg, LOWORD(wParam)); 
      return (INT_PTR)TRUE; 
     } 
     break; 
    } 
    return (INT_PTR)FALSE; 
} 
+2

難怪你不理解的文章,它使用C#來解決問題,而不是C++。尋找一個C++解決方案 – 2013-04-24 15:30:16

+3

我只能想象你對鏈接頁面的困惑可能與它是C#而不是C++有關。那麼你有什麼代碼嘗試過?發佈後,對於看起來*不*按照您的預期工作的具體問題。你有沒有試過[這個](http://bit.ly/144FW43)? – WhozCraig 2013-04-24 15:36:49

回答

7

嘗試使用

UINT WINAPI GetDlgItemText(
    _In_ HWND hDlg, 
    _In_ int nIDDlgItem, 
    _Out_ LPTSTR lpString, 
    _In_ int nMaxCount 
); 

這樣的:

TCHAR szBuf[BUFF_LEN]; 
GetDlgItemText(hWnd, TXT_MYEDIT_ID, szBuf, BUFF_LEN - 1); 
+1

'sizeof(szBuf)'是TCHAR很寬的時候的一個壞主意(因爲它與Unicode一樣,VS2010中的默認字符集以及更高版本),如果它不是自動數組,則更糟糕。如果使用自動數組,則使用WIN32提供的宏_countof();如果是動態緩衝區,則在TCHAR中指定實際的緩衝區大小。 – WhozCraig 2013-04-24 15:35:11

+0

我已編輯,謝謝! – duDE 2013-04-24 15:37:06

+0

現在有用,謝謝! – BioCycle 2013-04-24 17:06:11