什么是在MFC中制定计划的最佳方式

问题描述:

我有一个项目列表,每个项目都与开始和结束时间和日期相关联。我想要做的是,在给定时间和日期范围的情况下,只显示落在该窗口内的项目,甚至部分显示。什么是在MFC中制定计划的最佳方式

我在做什么是创建一个CListCtrl与其中的所有项目和CListCtrl按默认开始时间排序。但是考虑到时间范围,我不知道如何搜索范围内的第一个项目。

列表控件的另一个问题是它显示为一个列表,而如果有一个控件也可以显示并行并发的东西,那将会很不错。

我在对话框应用程序中这样做。

你在问一些非常具体的功能。这听起来像你要么建立一个调度应用程序,要么试图显示过去发生的事情的日志。这被称为Gantt Chart。您可以在网上购买MFC的Gannt Chart控件。谷歌一些。

还有更多的问题,而不仅仅是如何画它;你不能也不应该使用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()编写自定义控件是相当容易的,只要你的重叠范围代表每个匹配,就可以绘制矩形。

并行的事情将需要一个自定义控件。

用数据范围内的东西填充列表是通过检查哪些项目在你插入到列表框中的那一段时间内完成的。所以不要列出所有项目。这很明显,我想我误解了你的问题。