[英]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);
GetDlgItem(hPort,...)應該是GetDlgItem(hDlg,...),用於檢索任何子控件句柄。
正確分配你的記憶。
僅在使用對話框proc時不處理消息時返回FALSE。 這告訴調用者轉發到DefDlgProc()所以你不必這樣做。 在這方面,Dialog回調與Window回調不同。
幾乎/所有本地變量都不需要靜態。 真的沒有保存任何東西。 具有諷刺意味的是,兒童控制手柄實際上是體面的候選者,具有諷刺意味,因為它們在某種程度上是問題的核心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.