A widzisz, wypowiadam się w konkretnym celu, mianowicie żeby wiedzieć "Yyy, to po co ci ta kolumna?" - bo to mi jest potrzebne, żebyś Ty głupot nie robił :>
Masz układ komórki + kolorowanie komórek, chcesz uniknąć dodatkowej tablicy (czyli nie myliłem się zasadniczo ;] ).
W uczciwy sposób to robiąc, dane o kolorze zapisz w... komórce, która ma być kolorowana. Zobacz, jak wiele rzeczy możesz przydzielić każdej komórce: MSDN:LVITEM; ciebie szczególnie niech zainteresuje pole lParam. Jak chcesz wiedzieć, czym zapisywać nie tylko tekst, ale wszystko inne: LVM_GETITEM LVM_SETITEM
Ale tutaj coś wydaje mi się to zbyt proste zdaje, ze względu na tekst:
aby nie wykonywać podwójnej operacji odczytywania danych które mają być pokolorowany tylko od razu w procesie budowania zaznaczyć
to może powiedz, czym tę listę budujesz - skąd dane są pobierane na samym początku, i w jakiej postaci je przekazujesz funkcji budującej. I czy widzisz opcję przerobienia funkcji budującej tak, żeby na podstawie wejścia potrafiła tekst wstawić jako tekst, a kolor jako lparam (wewnętrznie za pomocą LVM_INSERTITEM).
Dodatkowa kolumna używana jako "wewnętrzne dane implementacji" to tak paskudne rozwiązanie, że unikać go trzeba naprawdę gdzie się da. No chyba, że się nie da - wtedy nie będę już judził :]