从编辑控件获取文本(纯Win32 API)

Get Text from an Edit Control (Pure Win32 API)

本文关键字:Win32 API 取文本 编辑 控件 获取      更新时间:2023-10-16

我一直在努力让这个工作,但没有效果(悲伤的脸)。

int iChars = GetWindowTextLength (GetDlgItem(handle,ID))+1; // Room for ''
char* pstrText;
pstrText = (char*) malloc (sizeof(char)*iChars);
if (pstrText != NULL) {
    //GetWindowText (GetDlgItem(handle,ID), pstrText, iChars);
        GetDlgItemText(handle,ID,pstrText,iChars);
}
return pstrText; // Memory gets freed after it returns

工作的例子:

char* MWC::System::TextBox::GetText(){
    int len = SendMessage(handle, WM_GETTEXTLENGTH, 0, 0);
    char* buffer = new char[len];
    SendMessage(handle, WM_GETTEXT, (WPARAM)len+1, (LPARAM)buffer);
    return buffer;
}

这里的wParam参数是错误的:

SendMessage(handle, WM_GETTEXT, (WPARAM)len, (LPARAM)buffer);

您应该通过len+1,因为零终止符

在返回之前释放内存!!

if ((pstrText != NULL) {
    GetDlgItemText(handle,ID,pstrText,sizeof(pstrText));
    free (pstrText); // Freeing memory Here!
}

你必须提供一种方式让客户端在不再需要的时候释放…

希望这对你有帮助!

您在返回之前已经释放了pstrText所指向的内存。您应该返回一个字符串对象,它实际上可以包含文本,并在释放时自动释放它。或者你必须要求调用者为字符串分配内存,但你只是包装API。