我的请求很小我使用GetDlgItem()
从文本字段中获取文本,但在第四个参数(即缓冲区大小)中出现问题。
LPWSTR txtbuff;
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, 50); // the fourth parameter (50)
MessageBox(NULL,txtbuff,L"Error message",MB_OK)
如何计算txtbuff
您可以使用GetDlgItem获取控件的HWND和GetWindowTextLength来确定控件包含的字符数。
您需要自己分配一个缓冲区:
WCHAR txtbuff[50];
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, 50);
/* or... */
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(textbuff)/sizeof(textbuff[0]));
MessageBox(NULL, txtbuff, L"Error message", MB_OK);
一个简单的LPWSTR
变量是一个指针,在您的示例中,您有一个指针但它还没有指向任何位置。通过显式创建缓冲区,可以指定大小,并可以将其提供给GetDlgItem
。
这不是缓冲区的大小。它是您实际想要复制的字符串的数量。理论上,你可以将其设置为任何你想要的非零大小。另一方面,你自己缓冲区的大小是另一回事,只是要确保你不会溢出。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645489%28v=vs.85%29.aspx
您可以像这样使用sizeof
:
TCHAR txtbuff[50];
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(txtbuff) * sizeof(TCHAR));