Передача информации с Combobox

217
25 апреля 2018, 06:49

Мне нужно передавать информацию(1) (что я выбрал в комбобоксе в свою функцию) а потом результат функции записываю в Edit (2). Но почемуто не записывается в Edit(( Код :

 hEndVertexStatic = CreateWindowW(L"Static", L"End Vertex:",
    WS_CHILD | WS_VISIBLE,
    695, 150, 80, 20,
    hWnd, (HMENU)ID_END_VERTEX_STATIC, 
    hInst, NULL);
hEndVertexCombo = CreateWindowW(L"Combobox", NULL,
    WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
    770, 150, 120, 110, hWnd, NULL, 
    hInst, NULL);
................................
if (HIWORD(wParam) == BN_CLICKED)
{
    SendMessage(hStartVertexCombo, CBS_DROPDOWNLIST, (WPARAM)TRUE, 0);
    return;
}
if (HIWORD(wParam) == BN_CLICKED)
{
    SendMessage(hEndVertexCombo, CBS_DROPDOWNLIST, (WPARAM)TRUE, 0);
    return;
}
if (LOWORD(wParam) == ID_FIND_PATH_BUTTON)
{
            /* тут я вызываю свою функцию*/
    FindPath(hWnd);
    return;
}
if (HIWORD(wParam) == ID_FILE_PATH_EDIT)
{
              /* тут  должен результат вывести моей функции FindPath*/
    SendMessage(hFoundPathEdit, CB_SHOWDROPDOWN, (WPARAM)TRUE, 0);
    return;
}
    .......................
for (const Vector& vertex : vertexBuffer)
{
..........................................................................
   SendMessage(hStartVertexCombo, CB_ADDSTRING, 0, (LPARAM)vertexStr.c_str());
        SendMessage(hEndVertexCombo, CB_ADDSTRING, 0, (LPARAM)vertexStr.c_str());
}
 ...................
void FindPath(HWND hWnd)
{
     int iStartVertex = (int)SendMessage(hStartVertexCombo, CB_GETCURSEL, 0, 0);
     int iEndVertex = (int)SendMessage(hEndVertexCombo, CB_GETCURSEL, 0, 0);
     auto findPath = findShortestPath(graph, iStartVertex, iEndVertex);
     Path vector = std::move(findPath.first);
     for (VertexIndex index = 0; index < vector.size(); ++index)
     {
      .............................................
         SendMessage(hFoundPathEdit, WM_SETTEXT, 0, (LPARAM)vertexStr.c_str());
    //SetWindowText(hFoundPathEdit, vertexStr.c_str());
     }
}

UPD:

Answer 1

Вы отправляете собщение WM_SETTEXT элементу EDITBOX в каждой итерации цикла. Но это сообщение устанавливает в EDITBOX новую строку (а не дописывает ее к уже существующему тексту). Поэтому все выводы в окно подобным образом до последнего прохода по телу цикла не имеют смысла - в окошке все равно будет только последняя строка. Если Вы хотите дописывать новые строки в EDITBOX в каждом проходе цикла, используйте пару сообщений EM_SETSEL (переместить каретку в конец текста) и EM_REPLACESEL (заменить пустое выделение новым текстом т.е. добавить новую строку в конец существующего текста).

READ ALSO
Добавить классы в массив

Добавить классы в массив

У меня есть куча классовЯ в цикле хочу создать объект каждого класса и вызвать у него определенный метод

166
c++ как брать данные из интернета? [требует правки]

c++ как брать данные из интернета? [требует правки]

Скорее всего вопрос поставлен некорректно, но суть таковаХочу написать небольшое приложение

189
Ошибка С2061 по непонятным причинам

Ошибка С2061 по непонятным причинам

В моей программе (лабораторная работа на тему наследования по Павловской) возникает ряд ошибок указывающих на то, что я сделал синтаксическую...

188
Не работает отладчик для компилятора MVSC в Qt creator

Не работает отладчик для компилятора MVSC в Qt creator

Устанавливал VS 2015 communityПотом зашел в комплекты выбрал комплект MVSC 32 компилятора, для этого комплекта выбрал 1 из нескольких MVSC компиляторов,...

203