非常に具体的な機能を求めています。スケジューリング アプリを作成しているか、過去に起こったことのログを表示しようとしているようです。これをガント チャートと呼びます。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() を使用してカスタム コントロールを作成するのはかなり簡単です。これは、オーバーラップした範囲が各一致を表す限り、長方形を描画するだけです。