Я хочу добавить текст в элементе управления списком в дочерний элемент моего главного окна. Ребенок по существу является элементом управления редактированием, но не является диалогом. Я пробовал несколько разных функций уже без успеха, я считаю, что моя проблема в том, что мне нужно каким-то образом переключить фокус из диалогового окна на дочернее окно перед добавлением текста. Я бы предпочел не получать ответ с определенным кодом, но если бы я мог указать на полезную функцию или концепцию, это было бы здорово!Получить текст в элементе управления списком, добавленном в дочернее окно
EDIT: Список является частью большего диалогового окна, которое позволяет пользователю вводить текст, а затем добавлять его в список. Эти функции работают очень хорошо. То, что я хотел бы сделать, - это получить текст, который добавлен в список, перемещенный в дочернее окно, когда пользователь нажимает кнопку в диалоговом окне, предпочтительно без необходимости выбирать элементы перед нажатием кнопки.
Там много кода, но я думаю, что эти части являются релевантными:
Детского окно:
case WM_CREATE:
{
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
0, 0, 100, 100, w, (HMENU) IDC_EDIT, NULL, NULL);
if (hEdit == NULL){
MessageBox(NULL, "Could not create child window :(", "ERROR", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
}
break;
case WM_SIZE:
{
RECT wSize;
GetClientRect(w, &wSize);
SetWindowPos(hEdit, NULL, 0, 0, wSize.right, wSize.bottom, NULL);
}
Функция добавления текста в дочернем окно, нажав кнопку в диалоговом окне (HWND HEdit, дочернее окно, определяется глобально):
case ID_ADDMAIN:
{
HWND hList = GetDlgItem(w, IDC_LIST1);
int count = SendMessage(hList, LB_GETCOUNT, NULL, NULL);
if (count > 0){
DWORD textLength = GetWindowTextLength(hList);
LPSTR alloc;
alloc = (LPSTR) GlobalAlloc(GPTR, textLength + 1);
if(GetWindowText(hList, alloc, textLength + 1)){
SendMessage(hEdit, WM_SETTEXT, NULL, (LPARAM) alloc);
}
GlobalFree(alloc);
}
else{
MessageBox(NULL, "There's nothing to add!", "???", MB_ICONINFORMATION | MB_OK);
}
}
break;
Кроме функции SendMessage, я также попытался SetWindowText и я пытался получать каждую строку в ListBox отдельно, используя цикл for, а не GetWindowText. Спасибо заранее за вашу помощь.
Где объявляется 'hEdit'? –
Это глобальная переменная, поэтому она вне всех моих функций. – user2924162