Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153

Нужен ваш совет по WinAPI (Combobox, Path)

23.04.2018, 11:01. Показов 1725. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть программа которая открывает файл и по заданным вершинам ищет, так вот у меня вопрос: на картинке вы можете увидеть мою программу, и под (1) я хочу передавать туда путь к файлу после того как я его открыл. Как я это думал делать

C++
1
2
3
.................................. 
hFilePathEdit = CreateWindowW(L"Edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 690, 100, 200, 21, hWnd, (HMENU)ID_FILE_PATH_EDIT, hInst, NULL);
 ........................................
SendMessage(hFilePathEdit, CB_ADDSTRING, 0, (LPARAM)file.lpstrFile);
Но оно не работает. Также если вы посмотрите на картинку (2) Combobox , когда я там выбираю что-то, мне этот выбор нужно фиксировать. Но я не нашел где это сохраняется в Combobox
Миниатюры
Нужен ваш совет по WinAPI (Combobox, Path)  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2018, 11:01
Ответы с готовыми решениями:

Нужен ваш совет
Вот делал свое дитё месяц и пару дней назад запустил Нужна ваша оценка дизайна. Дайте пожалуйста совет как улучшить и что добавить для...

Нужен ваш совет
Добрый день. Появилась необходимость работы с клиентами не только в офисе, но и через WEB. Пока только начинаю знакомится с...

нужен совет ваш
добрый день скажите пожалуйста,вот я хочу пойти на курсы по Курсы системных администраторов, курсы по ремонту ПК,вот программа...

39
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.04.2018, 15:36
Студворк — интернет-сервис помощи студентам
Ну так и сделайте в отработке WM_CREATE.
На худой конец, после вызова создания окна (перед обработкой очереди)

Добавлено через 38 секунд
Цитата Сообщение от dimaSlon Посмотреть сообщение
все я разобрался)))
Ну и славно

Добавлено через 4 минуты
Еще одна возможность: при создании добавить стиль окна WS_DISABLED
1
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
24.04.2018, 15:46  [ТС]
такой вопрос. мне нужно делать кнопку активной после того как я выбрал в комбобоксе. А как можно узнать что я чтото выбрал в комбобоксе?

Добавлено через 2 минуты
Мне тут уже посказывали:
C++
1
2
int  startIndex = (int)SendMessage(hStartVertexCombo, CB_GETCURSEL, 0, 0);
    int endIndex = (int)SendMessage(hEndVertexCombo, CB_GETCURSEL, 0, 0);
но я это уже делаю когда нажал на кнопку. И не хочется два раза это делать
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.04.2018, 16:01
Обратите внимание на нотификации CBN_SELCHANGE, CBN_SELENDOK
Кстати, рекомендую проверять результат CB_GETCURSEL на CB_ERR
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
24.04.2018, 16:30  [ТС]
liv,
C++
1
2
3
4
5
if ((startIndex == CB_ERR) || (endIndex == CB_ERR))
    {
        
        return;
    }
делаю

Добавлено через 4 минуты
C++
1
2
3
4
    if(HIWORD(wParam) == CBN_SELCHANGE)
    {
        EnableWindow(hFindPathButton, 1);
    }
но оно срабатывет после первого комбобокс. а мне нужно чтобы после обоих
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.04.2018, 16:34
dimaSlon, давайте полученный на данный момент код
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
24.04.2018, 16:49  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
hStartVertexCombo = CreateWindow(L"Combobox", NULL,
        WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
        97, 70, 120, 110, hWnd, NULL, 
        hInst, NULL);
 
    hEndVertexCombo = CreateWindow(L"Combobox", NULL,
        WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
        307, 70, 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(HIWORD(wParam) == CBN_SELCHANGE)
    {
        EnableWindow(hFindPathButton, 1);
    }
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.04.2018, 16:59
Я ожидал увидеть весь код...
Я бы строил программу как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
switch (HIWORD(wParam))
{
case BN_CLICKED:
        SendMessage(hStartVertexCombo, CBS_DROPDOWNLIST, (WPARAM)TRUE, 0);
        SendMessage(hEndVertexCombo, CBS_DROPDOWNLIST, (WPARAM)TRUE, 0);
        break;
case CBN_SELCHANGE:
        EnableWindow(hFindPathButton, 1);
        EnableWindow(hLoadFileButton, 1);
        break;
}
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
24.04.2018, 17:11  [ТС]
liv,
C++
1
EnableWindow(hLoadFileButton, 1);
мне не нужно делать кнопку эту не активной)

Добавлено через 25 секунд
я так понял, ваш код аналогичный этому:
C++
1
2
3
4
5
6
7
8
9
10
11
if (HIWORD(wParam) == BN_CLICKED)
    {
        SendMessage(hStartVertexCombo, CBS_DROPDOWNLIST, (WPARAM)TRUE, 0);
        SendMessage(hEndVertexCombo, CBS_DROPDOWNLIST, (WPARAM)TRUE, 0);
        return;
    }
    
    if(HIWORD(wParam) == CBN_SELCHANGE)
    {
        EnableWindow(hFindPathButton, 1);
    }
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.04.2018, 17:16
Цитата Сообщение от dimaSlon Посмотреть сообщение
мне не нужно делать кнопку эту не активной)
Я не могу об этом догадываться
Вы ж не даете весь код

Для кнопок я бы не отрабатывал BN_CLICKED, а код кнопки в LOW(wParam)
Цитата Сообщение от dimaSlon Посмотреть сообщение
я так понял, ваш код аналогичный этому:
Почти.
C++
1
2
3
4
else if(HIWORD(wParam) == CBN_SELCHANGE)
    {
        EnableWindow(hFindPathButton, 1);
    }
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
25.04.2018, 15:32  [ТС]
переделал по другому, работает

Добавлено через 7 часов 42 минуты
liv,
C++
1
2
3
4
5
if ((startIndex == CB_ERR) || (endIndex == CB_ERR))
    {
        
        return;
    }
а что тут нужно в return возвращать?
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.04.2018, 15:40
dimaSlon, обычно, функция окна, если отрабатывает сообщение, то должна вернуть 0
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
25.04.2018, 17:30  [ТС]
liv, у меня очередной вопрос: а как очищать едит?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.04.2018, 17:41
Цитата Сообщение от dimaSlon Посмотреть сообщение
а как очищать едит?
Да просто загнать туда пустую строку
1
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
25.04.2018, 17:45  [ТС]
liv, Я так думал:
C++
1
2
3
4
5
6
7
8
if (..............)
        {
            SendMessage(hStartVertexCombo, CB_DELETESTRING, 0,NULL);
            SendMessage(hEndVertexCombo, CB_DELETESTRING, 0, NULL);
                        SendMessage(hFoundPathEdit, CB_DELETESTRING, 0, NULL);
            
            return;
        }
но оно срабатывает
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.04.2018, 17:52
Сообщение CB_DELETESTRING для едита - чужое. По идее должна вернуться ошибка.
У Вас, так понимаю, эти комбо увязаны с едитом в другом месте. Изменение в комбо приводит к изменению едита.
Удалив там - очищаете и едит Вот и срабатывает
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
25.04.2018, 17:59  [ТС]
liv, а как заганять?
я так делаю:
C++
1
SendMessage(hEdit, CB_ADDSTRING, 0, L"");
на последний аргумент кричит

Добавлено через 1 минуту
а для комбобокса можна так деалть?
C++
1
2
SendMessage(hStartVertexCombo, CB_DELETESTRING, 0,NULL);
            SendMessage(hEndVertexCombo, CB_DELETESTRING, 0, NULL);
но у меня все равно и в комбобоксе не срабатывает(

Добавлено через 4 минуты
liv, можете пример навести как бы вы сделали. а то я хожу по колу и у Вас время забираю
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.04.2018, 18:05
dimaSlon, CB_ ни о чем не говорит? Это сокращение от ComboBox! Что же так упорно скармливаете едиту чужие сообщения-то? Родные сообщения начинаются на EM_(Edit Message), кроме того еще есть универсальные сообщения WM_(Window MEssage)
Кроме того, есть несколько функций, которые несколько скрывают, как именно они работают
Например, для засылки строки в едит мне больше всего нравится SetWindowText(hEdit, L"");

Добавлено через 3 минуты
Команда
C++
1
SendMessage(hEndVertexCombo, CB_DELETESTRING, 0, NULL);
означает удалить одну нулевую строку в списке соответствующего комбо. Вы этого хотели? Чтобы очистить полностью комбо, есть команда CB_RESETCONTENT
1
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
25.04.2018, 18:11  [ТС]
liv, ок. попробую ее
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.04.2018, 18:15
Цитата Сообщение от dimaSlon Посмотреть сообщение
с комбобокс не срабатывает
что именно не работает? Что именно Вы хотите сделать?

Добавлено через 2 минуты
C++
1
SendMessage(hEndVertexCombo, CB_RESETCONTENT, 0, 0);
Как раз предназначена для очистки комбо
0
1 / 1 / 0
Регистрация: 23.06.2017
Сообщений: 153
26.04.2018, 15:29  [ТС]
liv, все сделал. спасибо. То форум глючит и я ваше сообщения об CB_RESETCONTENT не увидел и написал пост
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2018, 15:29
Помогаю со студенческими работами здесь

Нужен Ваш совет
Ребята,нужен совет.Есть лабораторные работы(методичка прикреплена) и я хочу послушать ваши предложение о том, на каком языке...

Нужен ваш совет
Ребята, помогите мне решить номер, в VBA совсем недавно, не могу решить задание: САМА ЗАДАЧА --- Удалить во всех словах букву «а»,...

Нужен ваш совет
Ребят, почему не выходит елочка? var num = 4; var a = ; var b = ; var ce = a.push('*'); var d = b.pop(); for(var i = 1;i <=...

Нужен совет ваш.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,...

нужен ваш совет!
господа,помогите плиз Печать таблиц операций сложения и умножения для троичных чисел. таблица сложения имеет вид: + 0 1 2 0 0 1 2 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru