gpt4 book ai didi

c++ - 在 MFC 中制作日程表的最佳方法是什么

转载 作者:太空狗 更新时间:2023-10-29 22:53:18 26 4
gpt4 key购买 nike

我有一个项目列表,每个项目都与开始和结束时间和日期相关联。我想要做的是,在给定时间和日期范围的情况下,仅显示属于该窗口的项目,即使是部分项目。

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

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

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

最佳答案

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

您的问题不仅仅是如何绘制它;您不能也不应该使用 CListCtrl 作为您的数据结构。您似乎有一组开始和结束时间的对象。例如:

struct Range {
int startTime;
int endTime;
};
std::vector<Range> events;

一旦您将事件放入这个简单的 vector 中,您将必须遍历所有元素并比较开始/结束时间以查看它们是否与您正在考虑的范围重叠:

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() 编写自定义控件会相当容易,只要您的重叠范围代表每个匹配项,它就可以绘制矩形。

关于c++ - 在 MFC 中制作日程表的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com