Api функции

  • Автор темы softrix
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

softrix

Помогите новичку.

Не могу найти функцию для получения char *p (или просто текста) из диалог бокса, т.е. что-то вроде
GetDlgItemInt должно быть но только для строк.
 
S

softrix


Посмотрел эту функцию, не очень понял что она делает. Как я понял она заголовок окна вынимает !?

А мне вообще нужно делать следующее: допустим открывается окно, в нем пользовательский диалог, куда можно вставить кусок текста, нажимаем кнопку и.... Вот что дальше ХЗ как мне этот кусок текста получить, не пойму, функцию для int нашел а для текста ХЗ.

Если для этого можно использовать GetWindowText может напишите коротенький пример?
 
S

softrix

Ну вот кусок кода может будет понятнее:

ПРостое окно, где есть кнопка и окно для ввода данных (в Диалог Едиторе VS называется Edit Control). Вставляем текст в окно и нажимаем кнопку.
Результат обрабатывается в My_OnDlgCommand
[codebox]void My_OnDlgCommand(HWND hwndDlg ,int id, HWND hwndCtrl, UINT codeNotify)
{
HWND hOwner;
hOwner = GetParent(hwndDlg);
switch(id)
{
case IDC_BUTTON1: //Нажали кнопку
int IntInfl;
IntInfl = GetDlgItemInt(hwndDlg,IDC_EDIT1,0,TRUE); //Копирует из диалогового окна int данные это понятно
//А что если нужено текст получить?
WCHAR *tmp;
GetDlgItemText(hwndDlg,IDC_EDIT1,tmp,10); //В tmp ничего нет !!! Как правильно этой функцией пользоваться ?

break;
}
}[/codebox]
 
E

European

Конечно ничего не будет... Кто память под буфер будет выделять?
Код:
WCHAR tmp[10];
 
S

softrix

А синтаксис ее такой?
Код:
		int IntInfl;
IntInfl = SendMessage(hwndDlg,WM_GETTEXTLENGTH ,0,0);

Если так делаю то она мне постоянно возвращает цифру 6, видимо сообщает длинну названия "Dialog", а как ее затавить чтобы из IDC_EDIT1 длинну давала?
 
T

Trupik

[codebox]HWND editBox = GetDlgItem(IDC_EDIT1);
int bufSize = GetWindowTextLength(wnd) + 1;
TCHAR* text = new TCHAR[bufSize];
ZeroMemory(text, bufSize * sizeof(TCHAR));
GetWindowText(editBox, text, bufSize);
// ...
delete [] text;[/codebox]

Писал сходу, т.ч. могут быть неточности с порядком следования аргументов. :)
Ну и, естественно, надо добавить проверки возвращаемых значений.
 
S

softrix

Блин, все равно не получается длинну получить :)((( Вот посмотрите пожалуйста мой код, что тут не так ?

Код:
void My_OnDlgCommand(HWND hwndDlg ,int id, HWND hwndCtrl, UINT codeNotify)
{
HWND hOwner;
hOwner = GetParent(hwndDlg);
HWND editBox=	GetDlgItem(hOwner,IDC_EDIT1);

switch(id)
{
case IDC_BUTTON1:

TCHAR tmp[10];
int IntInfl;
IntInfl = SendMessage(editBox,WM_GETTEXTLENGTH,0,0); // 0
IntInfl = GetWindowTextLength(editBox); // 0

GetDlgItemText(hwndDlg,IDC_EDIT1,tmp,10);  //все ок
GetWindowText(editBox,tmp,10);  //все ок

break;
}
}
 
T

Trupik

Код:
hOwner = GetParent(hwndDlg);
Это не надо. Этой функцией ты запрашиваешь описатель родительского окна (для окон верхнего уровня это, десктоп), которое окном диалога не является и никаких IDC_EDIT1 не содержит.

Правильно:
Код:
HWND editBox = GetDlgItem(hwndDlg, IDC_EDIT1);

P.S.: Чего это у меня блоки кода такие большие? :)
 
S

softrix

Ура получилось ! Спасибо за помощь !
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!