Как вычислить размер LPWSTR при использовании функции GetDlgItemText () - PullRequest
5 голосов
/ 18 февраля 2012

Мой запрос маленький Я использую GetDlgItem() для получения текста из текстового поля, но у меня проблема с четвертым параметром (то есть размером буфера).

LPWSTR txtbuff;
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, 50); // the fourth parameter (50)
MessageBox(NULL,txtbuff,L"Error message",MB_OK)

Как вычислить размер txtbuff

Ответы [ 4 ]

8 голосов
/ 18 февраля 2012

Вы можете использовать GetDlgItem , чтобы получить HWND элемента управления, и GetWindowTextLength , чтобы определить, сколько символов удерживается вашим элементом управления.

0 голосов
/ 18 февраля 2012

Вы можете использовать sizeof примерно так:

TCHAR txtbuff[50];
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(txtbuff) * sizeof(TCHAR));
0 голосов
/ 18 февраля 2012

Это не размер буфера.Это количество строки, которую вы на самом деле хотите скопировать.Вы можете установить его на любой ненулевой размер, который вы хотите в теории.С другой стороны, размер вашего собственного буфера - это отдельная история, просто убедитесь, что вы не переполнены.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms645489%28v=vs.85%29.aspx

0 голосов
/ 18 февраля 2012

Вы должны выделить буфер самостоятельно:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...