リストビューの選択した行の背景色を変える – プログラミング – Home

リストビューの選択した行の背景色を変え...
 
通知
すべてクリア

[解決済] リストビューの選択した行の背景色を変える


松田
 松田
(@松田)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

VisualStudio2005, MFC, WindowsXP。
リストビューで選択した行のみの背景色を変更したいのですが、以下の書き方ではうま
くいきません。

NM_CUSTOMDRAWのイベントハンドラからOnCustomDraw関数を作成し、以下のようにしまし
た。

void CXXXView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
   LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;

   switch(lplvcd->nmcd.dwDrawStage)
   {

      case CDDS_PREPAINT:
         *pResult = CDRF_NOTIFYSUBITEMDRAW;
         break;

      case CDDS_ITEMPREPAINT:
         *pResult = CDRF_NOTIFYSUBITEMDRAW;
         break;

      case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
         *pResult = CDRF_DODEFAULT;

      CData mdata = GetDocument()->m_defcell;

      CListCtrl& list = GetListCtrl();
      POSITION pos = list.GetFirstSelectedItemPosition();
      int i = list.GetNextSelectedItem(pos);//※

      if (lplvcd->nmcd.dwItemSpec == i)
         lplvcd->clrTextBk = RGB(255, 200, 150);

   }
}

※の箇所をint a = 2に変更で3行目の色が変更された。

選択した行の背景色を指定した色に変更できるようによろしくお願いします。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

NMLVCUSTOMDRAW構造体のnmcd.uItemStateで判定できないでしょうか?
選択状態になっているのであれば、CDIS_SELECTEDになっていると思うので
わざわざ一致判定をしなくても大丈夫ではないかと思うのですが。


返信引用
松田
 松田
(@松田)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

if (nmcd.uItemState & CDIS_SELECTED)を条件としてみましたが、選択行ではなく全体
の色が変更されてしまいました。

もう少し調べてやってみたいと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

随分前にどこかの掲示板でリストコントロールの選択色を変えたいと言うのが
あったんですが、もしかしてそれを言われてますか?
確か、選択色はカスタムドロウでは変更できないと言う話だったような。

一行選択できるようにしているなら多分、その行の色は変えられないと思います。
どうしてもやりたいならオーナードロウで全て自分で描画するしかなかったような
気がします。


返信引用
松田
 松田
(@松田)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

実行したかったのは、一度選択された行の色の変更でした。
現在選択している行を変えたいというわけではありません。

データのlplvcd->nmcd.dwItemSpec番目の中のデータの中に選択されたフラグをたてるこ
とで解決しました。

伝わりづらい質問ですいませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました