在 MFC 中制定计划的最佳方法是啥

Posted

技术标签:

【中文标题】在 MFC 中制定计划的最佳方法是啥【英文标题】:What is the best way to make a schedule in MFC在 MFC 中制定计划的最佳方法是什么 【发布时间】:2010-04-11 07:00:47 【问题描述】:

我有一个项目列表,每个项目都与开始和结束时间和日期相关联。我想要做的是,给定时间和日期范围,仅显示该窗口内的项目,甚至部分显示。

我正在做的是创建一个包含所有项目的 CListCtrl,并且 CListCtrl 默认按开始时间排序。但是给定一个时间范围,我不知道如何搜索该范围内的第一项。

列表控件的另一个问题是它显示为列表,而如果有一个控件也可以并排显示并发的东西,那就太好了。

我在对话框应用程序中执行此操作。

【问题讨论】:

【参考方案1】:

您需要一些非常具体的功能。听起来您要么正在构建日程安排应用程序,要么正在尝试显示过去发生的事情的日志。这称为Gantt Chart。您可以在 Web 上购买 MFC 的甘特图控件。谷歌一些。

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

【讨论】:

【参考方案2】:

并行处理需要自定义控件。

使用数据范围内的事物填充列表是通过在将它们插入列表框时检查哪些项目在该范围内来完成的。所以不要列出所有项目。这太明显了,我想我误解了你的问题。

【讨论】:

以上是关于在 MFC 中制定计划的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

计划递归解决问题的最佳方法是啥?

使用 Web 应用程序进行计划任务的最佳方法 [重复]

敏捷开发方法XP的12个最佳实践

在 MFC 中管理类似控件行的数据的最佳方法是啥?

Testlink1.9.17使用方法(第六章 测试计划制定)

网站上付费会员的计划工作流程是啥?