簡體   English   中英

無法在編輯控件中檢索文本的長度

[英]Cant retrieve the length of the text in an edit control

INT_PTR CALLBACK ConnectDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc = GetDC(hDlg);
    int wmId, wmEvent;
    static HWND hIpControl;
    static HWND hPort;
    static LPWSTR lpIPAddress = (LPWSTR)malloc(sizeof(LPWSTR));
    static LPWSTR lpPort       = (LPWSTR)malloc(sizeof(LPWSTR));
    static char* IPArgtoFn;
    static size_t IPAddressLength; 
    static size_t PortLength;
    static POINT pt;
    hIpControl = GetDlgItem(hDlg, IDC_IPADDRESS1);
    hPort      = GetDlgItem(hPort, IDC_EDIT2);
    switch (message)
    {
    case WM_INITDIALOG:
        {

        return (INT_PTR)TRUE;
        break;
        }
    case WM_COMMAND:
        {

        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        switch (wmId)
            {
            case IDCANCEL:
                EndDialog(hDlg, wmId);
                break;
            case IDCONNECT:
                IPAddressLength = GetWindowTextLength(hIpControl) + 1;
                PortLength = SendMessage(hPort, WM_GETTEXTLENGTH, 0, 0);
                GetWindowText(hIpControl, lpIPAddress, IPAddressLength);

                pt.x = 10; pt.y = 10;
                wcstombs(IPArgtoFn, lpIPAddress, IPAddressLength);
                //TextOut(hdc, 10, 10, lpIPAddress , IPAddressLength);
                mySocket.ConnectToServer(IPArgtoFn, (int)lpPort, hdc, pt); 

                return (INT_PTR)FALSE;
                break;


            default:
                return DefWindowProc(hDlg, message, wParam, lParam);
                break;
            }
        }
    }
    return (INT_PTR)FALSE;
    }

我知道我選擇了正確的控件。 它的標識符是IDC_EDIT2,我知道這是對的。 但每當我嘗試檢索編輯控件的長度並將其保存到變量PortLength時,我調試時該值始終為0。 我已經嘗試過使用GetWindowTextLength,並且可以正常使用IP控件,但是當我將它與編輯控件一起使用時,無論我在框中輸入多長時間,長度始終為0。

立即錯誤在這一行:

hPort = GetDlgItem(hPort, IDC_EDIT2);

這應該是:

hPort = GetDlgItem(hDlg, IDC_EDIT2);
  1. GetDlgItem(hPort,...)應該是GetDlgItem(hDlg,...),用於檢索任何子控件句柄。

  2. 正確分配你的記憶。

  3. 僅在使用對話框proc時不處理消息時返回FALSE。 這告訴調用者轉發到DefDlgProc()所以你不必這樣做。 在這方面,Dialog回調與Window回調不同。

  4. 幾乎/所有本地變量都不需要靜態。 真的沒有保存任何東西。 具有諷刺意味的是,兒童控制手柄實際上是體面的候選者,具有諷刺意味,因為它們在某種程度上是問題的核心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM