Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2013, 17:33   #1
Elloriane
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 60
По умолчанию Win32Api (окошко типа "EDIT")

Были созданы кнопочка и окошко 'edit'.
Код:
	button1 = CreateWindow("button", "Ok!", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,290, 10, 90, 23, hWnd, (HMENU)INPUT, hInst, NULL);
	edit = CreateWindow("edit","" ,WS_CHILD | WS_VISIBLE | WS_TABSTOP |WS_BORDER| ES_LEFT | ES_AUTOHSCROLL,30, 10, 250, 23, hWnd, NULL, hInst, NULL);
Считываю информацию с окна 'edit' по нажатии кнопки
Код:
case WM_COMMAND:
		{
			if(wParam == INPUT)  
			{
				int i = 0;
				char massExpr[MAX_PATH] = " ";
				InputExpr = (char *) malloc(sizeof(char) * MAX_PATH);
				SendMessage(edit,EM_GETLINE,0,(LPARAM)massExpr); 
				while (massExpr[i] != 0)
					InputExpr[i] = massExpr[i++];
				InputExpr[i] = 0;
				MessageBox(hWnd, InputExpr, "Сообщение",MB_OK|MB_ICONINFORMATION);
				if (InputExpr != NULL)
				{
					free(InputExpr);
					InputExpr = NULL;
					SetFocus(hWnd);
					DrawGLScene(0);					// Draw The Scene
					SwapBuffers(hDC);				// Swap Buffers (Double Buffering)
				}
				ShowWindow(hWnd, SW_NORMAL);
				SetFocus(hWnd);
				ShowWindow(hWnd, SW_NORMAL);
			}
			return 0;
		}
Всё работает, но при вызове 'message box', он выводит введенные данные + мусор различной длины на конец (который я не вводил), а может и не вывести
То есть если в 'edit' == "sd5ty"
То 'message box' выведет либо тоже самое, либо что-то вроде == "sd5ty+/*НН/"

В чем может быть проблема (чувствую, что ошибка в ерунде какой-то)

----
Я заметил, что первый раз выводит всегда правильно, я что-то не очищаю?

Последний раз редактировалось Elloriane; 09.03.2013 в 17:36.
Elloriane вне форума Ответить с цитированием
Старый 09.03.2013, 19:46   #2
Elloriane
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 60
По умолчанию

Ни у кого нет идей?
Просто на этом моменте моя разработка встала

Могу более подробный код скинуть

Как вариант можете подсказать, как узнать длину введеной строки в 'edit' перед её считыванием по нажатию кнопки (чтобы просто обрезать хлам)?
Elloriane вне форума Ответить с цитированием
Старый 09.03.2013, 20:39   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

GetWindowTextLength()
GetWindowText()
waleri вне форума Ответить с цитированием
Старый 10.03.2013, 00:04   #4
Elloriane
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 60
По умолчанию

Можно немного поподробнее (интернет с телефона не позволит гуглить)
В идеале было бы пример, если не сложно
Elloriane вне форума Ответить с цитированием
Старый 10.03.2013, 11:11   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Старый 10.03.2013, 14:20   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Цитата:
EM_GETLINE message (Windows)
Return value
The return value is the number of TCHARs copied. The return value is zero if the line number specified by the wParam parameter is greater than the number of lines in the edit control.
Remarks
Edit controls: The copied line does not contain a terminating null character.
Так должно работать:
Код:
int size=SendMessage(edit,EM_GETLINE,0,(LPARAM)massExpr);
if(size>0)
{
  while (i < size)
	InputExpr[i] = massExpr[i++];
  InputExpr[i] = 0;
  MessageBox(hWnd, InputExpr, "Сообщение",MB_OK|MB_ICONINFORMATION);
}
else
  MessageBox(hWnd, "Поле не содержит текста", "Сообщение",MB_OK|MB_ICONINFORMATION);
counter вне форума Ответить с цитированием
Старый 11.03.2013, 00:34   #7
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

GetWindowTextA(Дескриптор EDIT,Буфер,Размер буфера)
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 11.03.2013, 08:23   #8
Elloriane
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 60
По умолчанию

Спасибо, пробую внедрить так сказать
Elloriane вне форума Ответить с цитированием
Старый 13.03.2013, 20:51   #9
Elloriane
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 60
По умолчанию

counter, всё заработало, огромное спасибо!
Elloriane вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неявное преобразование типа "string" в "int" невозможно artscorp C# (си шарп) 4 10.02.2013 20:59
Поиск Handle'a объекта типа "Edit" в окне стороннего приложения TRIZER Win Api 6 12.07.2012 15:59
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
На чем пишутся стратегии типа "Казаков" и "Эпохи империи" Tayfun Свободное общение 3 26.06.2007 20:27