Консультация № 41602
29.04.2006, 02:33
0.00 руб.
0 4 4
Здраствуйте.
Возникла проблема - при чтении из Edit Control с помощью функции GetWindowText();

Переменная LPWSTR ec_text остается пустой.... Хотя переменная length, содержащая длину текста (значение получено с помощью функции GetWindowTextLength) корректна и показывает, что поле не пустое.

Приложение:
hEdit=GetDlgItem(hWnd,IDC_EDIT1); //Получаем дескриптор поля EDIT1 length=GetWindowTextLength(hEdit); //Получаем длину текста if (length) //Если текст имеется - читаем фамилию { GetWindowText(hEdit, ec_text, length); //Получаем текст }

Обсуждение

Неизвестный
29.04.2006, 07:12
общий
это ответ
Здравствуйте, Kite!
Ну, во-первых, я бы вначале проверил, что возвращает функция GetWindowText, если 0, то вызывал бы GetLastError, чтобы определить ошибку. Если не 0, значит проблема где-то в параметрах. Вроде бы все правильно, только вот как у тебя объявление ec_text выглядит?
Неизвестный
29.04.2006, 13:27
общий
это ответ
Здравствуйте, Kite!
Зачем вам GetWindowText ? Используйте SendMessage
SendMessage(hEdit,WM_GETTEXT,length,ec_text);
Если Вам необходимо использовать именно GetWindowText, используйте GetLastError+FormatMessage, чтобы узнать причину по которой все не работает.
Неизвестный
29.04.2006, 16:56
общий
это ответ
Здравствуйте, Kite!
Очень бы хотелось увидеть весь код... А в приведенном куске вроде все правильно.
И в дополнение к предведущим ответам пришлю код, который хоть и кривоват, но получает текст из Edit Control. Удачи.

Приложение:
#include <windows.h>#include "resource.h"//При появление первого MessageBox, в edit диалогового окна надо ввести текст и нажать ОК в окне MessageBoxBOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ return FALSE;}int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int){ HWND hWnd = CreateDialog(hInstance,MAKEINTRESOURCE(ID_DIALOG), 0, (DLGPROC) DialogProc); ::MessageBox(0,"Enter text in edit and press OK",0,MB_OK);//********************************************************************************************** int length; LPSTR ec_text; HWND hEdit=GetDlgItem(hWnd,IDC_EDIT1); //Получаем дескриптор поля EDIT1 length=GetWindowTextLength(hEdit)+1; //Получаем длину текста ec_text=new char[length]; //выделяем память, размером length if (length) //Если текст имеется - читаем фамилию { GetWindowText(hEdit, ec_text, length); //Получаем текст }//********************************************************************************************** ::MessageBox(0,ec_text,0,MB_OK); delete ec_text; ::EndDialog(hWnd,0); return 0;}
Неизвестный
29.04.2006, 23:42
общий
это ответ
Здравствуйте, Kite!
Можно просто использовать GetDlgItemText вместо вашего запутанного алгоритма. При этом функция вернет вам количество скопированных символов.

Приложение:
char Buf[256];if(GetDlgItem(hWnd,IDC_EDIT1,Buf,256)!=0){}
Форма ответа