Постійний збір на дрони FPV для ЗСУ
Закидуй дві гривні!
FPV-дрони змінюють хід війни
Змінюй хід війни!

WinApi sos

🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 04.07.2008
Повідом.: 675
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
Помогите решить задачу по WInApi
У меня записная книжка, в ней содержатся имена студентов,кафедры,группы.
Связал я их с помощью контейнеров STL.Но что то не получается.
Помогите пожалуйста разобратся с этим.
Смысл там таков что Кафедра имеет ID группы и название кафедры.
Группа имеет Свой ID название группы и ID студентов.
А студент имеет ID группы и свои данные.
Мне хотелось бы сделать так чтобы
Я например выбирал кафедру,
И мне выпадал список групп входящих в эту кафедру
Выбирал потом группу а там студентов входящих в эту группу.
Но к сожалению с последним у меня не лады,
и не получается.
Посмотрите пожалуйста вы,возможно заметите ошибку.
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
Я надеюсь никто не обидится, если я скажу, что код ужасный :).
Теперь по делу. Во втором combobox хранится каким-то образом профильтрованный список групп. В этот момент нету никакого простого соответствия между позицией группы в combobox и её ID. Поэтому, чтобы фильтровать студентов нужно сначала найти группу, потом её ID и уж потом по нему фильтровать. По-моему, самое простое и разумное решение, это создать временный vector, который заполнять при заполнении combobox'а, и извлекать группу из него по индексу.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
Согласен код ужасный :)
А если сверять ключи у мультимапа и одинаковые ключи это и будут студенты ?
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
Согласен код ужасный :)
А если сверять ключи у мультимапа и одинаковые ключи это и будут студенты ?

А причём тут multimap? Как хранить студентов, чтобы было их удобно фильтровать пл известной группе и как организовать саму фильтрацию это отдельный вопрос.
Пока у Вас проблема в том, что Вы берёте позицию группы в combobox'е и пытаетесь использовать её как ID
Код:
student_c = SendMessage(cmb[1],CB_GETCURSEL,NULL,NULL);
first_it = sid.lower_bound(0);
last_it = sid.upper_bound(sid.size());
for(;first_it != last_it; first_it++)
{
	if(student_c+2==first_it->first)
	{
		SendMessage(cmb[2],CB_ADDSTRING,wParam,(LPARAM)first_it->second->FIO);
	}
}
Очевидно, что Вы путаете теплоё с мягким! Если, как у вас в исходных данных, группа для кафедры всего одна, то её позиция всегда будет 0 (кстати, обрамляющее условие "if(student_c)" тоже ошибочное, нужно проверять на ">= 0" см.
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
).
Повторяю, Вам нужно как-то по индексу группы в combobox'е найти саму группу, а уж потом фильтровать по её ID, хоть c multimap хоть как угодно ещё. Опять таки повторяю, самый простой, по-моему, способ это заполнять не только combbox стоками, но и ассоциированную с ним коллекцию реальными объектами, чтобы потом легко из коллекции извлекать объект по индексу.

Кстати, с фильтрацией групп по кафедре у вас ровно та же проблема. Сделайте ID кафедр 1001, 1002 и 1003 и посмотрите, как оно будет работать.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
От уж грамотеи.
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
,
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
используйте. Храните в них что угодно: ID, ссылки на обьекты, блек-джек и шлюхи и не морочьте жопу.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
Простите за навязчивость только я не понял как будет это работать с вектором?
Не могли бы вы привести пример с CB_SETITEMDATA, CB_GETITEMDATA.
А то у меня не получается связать их :(

Или как мне сделать по другому???не чеерз мультимапы.
Просто мне нужно чтоб оно работало как выше описано.
А какой способ есть еще я не знаю.
подскажите плиз.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
В lParam пихай ID или указатель на элемент вектора (хотя лучше так не делать).
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
ok thnx,Щас попробую
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9
где-то примерно так.

Код:
class TStudent
{
    public:
        DWORD ID;
        DWORD GroupID;
        char*   Surname;
        char*   Name; 
};

void AddStudentToComboBox(const TStudent* aStudent)
{
    LRESULT lItemIndex = SendMessage(comboboxHandle
                                   , CB_ADDSTRING
                                   , 0
                                   , (LPARAM) aStudent->Surname);

    if (lItemIndex != CB_ERR || lItemIndex != CB_ERRSPACE)
        SendMessage(comboboxHandle
                  , CB_SETITEMDATA
                  , lItemIndex
                  , (LPARAM) aStudent);
        
}

TStudent* GetStudentFromComboBox(const int aIndex)
{
    LRESULT lObject = SendMessage(comboboxHandle
                                , CB_GETITEMDATA
                                , aIndex
                                , 0);
                                
    return lObject == CB_ERR ? NULL : (TStudent*) lObject;     
}

// тогда добраться к студенту через комбобокс говно-вопрос
// MessageBox(0, GetStudentFromComboBox(0)->Surname, "", 0);

Класс TStudent, естественно, нужно доработать: добавить конструктор и деструктор, инициализировать память для строк, например. Код чисто для примера, не тестировался.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10
А если мне нужно будет добавить группу или кафедру или студента, тогда нун будет код проги открывать ?

MessageBox(0, GetStudentFromComboBox(0)->Surname, "", 0);
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
переформулируй вопрос.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
:)
Ну если мне нужно будет через интерфейс проги добавлять студентов кафедру группу.
ТО как мне это сделать?
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13
ну создаешь новый обьект класса TStudent, набиваешь его данными из интерфейса и зовешь AddStudentToComboBox. В чем проблемы?
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #14
Ок попробую,спасибо за помощь!
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #15
Если подумаешь головой, продумаешь структуру программы, классов и заюзишь ООП вовсю (если его не юзить, то нах кодить на С++, если есть С), то у тебя получится изящный, небольшой и, что немаловажно, понятный код.
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #16
Буду стараться ! :)
 
Назад
Зверху Знизу