やっぱりマークの動作が微妙に気になるので問題点と解決案をまとめてみました。
基本的に ViewPos <= ReadNum <= ResNum の関係が成り立ってるので取れる状態は

(0) ReadNum == 0, キャッシュ無し
(1) ViewPos <= ReadNum < ResNum、未読有り、新しい書き込み有り
(2) ViewPos < ReadNum = ResNum、未読有り、新しい書き込み無し
(3) ViewPos = ReadNum = ResNum、未読無し、新しい書き込み無し

の4つ。(0)はマーク無し(or New)、(1)を赤、(3)を緑にするのは問題ないけど、
(2)を赤、緑どっちに分類するかが問題。

(2)を緑の問題点: 未読があるのが分かりにくい
(2)を赤の問題点: スレを閉じない限り(緑にならないので)新しい書き込みがあっても分かりにくい

・解決案 1: マークを増やす。例えば

(1)赤○、(2)緑○、(3)緑□

みたいに。つまり新しい書き込み有り無しを色、未読有り無しを形で分別(逆でも可)。もしくは単に

(1)赤、(2)黄、(3)緑

みたいに色を変える。問題はユーザが新マークに馴れる必要があること。

・解決案 2: 内部パラメータを増やして従来通りの動作にする。

従来はDatInfo::m_kokoyonNumというパラメータを使って(2)をさらに

(2-1) ViewPos < ReadNum = ResNum、ロード直後でない
(2-2) ViewPos < ReadNum = ResNum、ロード直後

と分けて(1),(2-1)を赤、(2-2),(3)を緑にしてた。問題は内部コードがぐちゃぐちゃになること。