リストビューの文字色を変更したいのですが、
オーナードローが難しすぎて行き詰っています。
どなたか、オーナードローの仕方を簡単に教えてくれる方か
文字色を簡単に変更できる方法を教えてください。
m_listview.SetTextColor(RGB(255,255,255));
m_listview.SetTextBkColor(RGB(0,0,0));
m_listview.SetBkColor(RGB(0,0,0));
で文字色は変更できたのですが。
全部変更したいのではなく
私がしたいのは個別にある文字だけ色変更がしたいです。
どうか宜しくお願いします。
簡単に実現したいのであればカスタムドローですね。
(VC++のバージョンが書かれていないのでこれ以上のアドバイスは不可)
すいません、VC2005です。
編集 削除ダイアログだとすると、リソースエディタより
リストコントロールを選択して、(通常は右にある)プロパティウィンドウの
管理イベント(雷マークのやつ)より
NM_CUSTOMDRAW
のイベントハンドラを作成します。
あとは
http://www24.cds.ne.jp/~neg/pro/piyo1/clc/custom.html
のCTest0031Dlg::OnCustomDraw関数ように記述すればいいです。
たとえば、上から2行目の文字の色を赤に変えるならば
void CSampleDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: ここにコントロール通知ハンドラ コードを追加します。
LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
switch(pNMLVCD->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
*pResult = CDRF_DODEFAULT;
if (pNMLVCD->nmcd.dwItemSpec == 1) // 変えたい行(0から)
{
pNMLVCD->clrText = RGB(0xff,0x00,0x00); // 文字色
*pResult = CDRF_NEWFONT;
}
break;
default:
*pResult = CDRF_DODEFAULT;
break;
}
//*pResult = 0;
}
といった感じになります。
ご回答ありがとうございます。
私もそこ見て解決してました!
あと、リソースビューの"項目”(リストービューの頭のところの
文字色も変更する方法はないものでしょうか?
項目のclrTextBkの色も変更する方法があったら教えてください。
とりあえずヘッダーのところはカスタムドローでは無理です。
オーナードローのみになります。
>項目のclrTextBk
とは?サブアイテムのこと?
リンク先に載っていますよ。
いや、項目のclrTextBk
ヘッダーのバックのことです。
わかりました!ありがとうございました〜