Вы запрашиваете какую-то очень специфическую функциональность. Похоже, вы либо создаете приложение для планирования, либо пытаетесь отобразить журнал событий, которые произошли в прошлом. Это называется Диаграмма Ганта . Вы можете купить элементы управления Gannt Chart для MFC в Интернете. Google для некоторых.
В твоем вопросе есть нечто большее, чем просто как его нарисовать; Вы не можете и не должны использовать CListCtrl в качестве структуры данных. Кажется, у вас есть массив объектов, которые имеют время начала и окончания. Например:
struct Range {
int startTime;
int endTime;
};
std::vector<Range> events;
После того, как вы поместили ваши события в этот простой вектор, вам придется пройтись по всем элементам и сравнить время начала / окончания, чтобы увидеть, не перекрывают ли они рассматриваемый диапазон:
typedef std::vector<Range> RangeVec;
typedef RangeVec::iterator RangeIter;
void is_between(int time, const Range& r)
{
return time >= r.start && time <= r.end;
}
void findRanges(RangeVec *matches, const RangeVec& input, const Range& query)
{
for (RangeIter it = input.begin(); it != input.end(); ++it) {
if (is_between(it.start, query) || is_between(it.end, query) ||
(it.start <= query.start && it.end >= query.end))
{
matches->push_back(*it);
}
}
Теперь вы можете просматривать свои матчи и отображать их по своему усмотрению. Если вы смелы, довольно легко написать собственный элемент управления с подклассами CWnd :: OnPaint (), который просто рисует прямоугольники, пока ваш перекрывающийся диапазон представляет каждое совпадение.