前回、教えていただいたURLを見たのですが、やはり自分では無理でした。
そこで、過去ログも探してみたのですが、なかなか見つからず、何日か経ってしまいました。
再度、過去ログで探してみると見つかりました。
(過去ログNo.1298)カスタムドロー - hirayama 11/28-21:39 No.9250
それを改良し、文字色だけの変更をすることができました。
こちらです(宣言等は省略させていただきます) [ここをクリックすると内容が表示されます]
ここから本題です。コード: 全て選択
Case WM_NOTIFY 'リストビュー描写
Dim lvdisp As *LV_DISPINFO 'リストビューからのメッセージ通知取得構造体ポインター
lvdisp = lParam
If(lvdisp->hdr.idFrom = ListView1) Then 'ListViewからのメッセージか否かの判別
Select Case(lvdisp->hdr.code) '送られたコード判別による処理
Case NM_CUSTOMDRAW '項目描画関連処理
Dim lpLVCD As *NMLVCUSTOMDRAW 'リストビューからのメッセージ通知取得構造体ポインター
lpLVCD = lParam
Select Case lpLVCD->nmcd.dwDrawStage '描画状態の判別
Case CDDS_PREPAINT
MainWndProc = CDRF_NOTIFYITEMDRAW
Exit Function 'return CDRF_NOTIFYITEMDRAW;
Case CDDS_ITEMPREPAINT '着色処理
'メインアイテムのチェックボックスの状態で判別(ListView_GetCheckStateを展開)
If((SendMessage(hList, LVM_GETITEMSTATE, lpLVCD->nmcd.dwItemSpec, LVIS_STATEIMAGEMASK) >> 12) - 1) Then
lpLVCD->clrText = RGB(255, 0, 0) '青時に赤
End If
MainWndProc = CDRF_NOTIFYPOSTPAINT
Exit Function 'return CDRF_NOTIFYPOSTPAINT;
End Select
End Select
End If
上記の方法では、チェックした項目だけ色が変わると思いますが、リストから*番目の横一列の部分だけの色変更をしたいのです。
で、以下のようにすると出来たのですが、色変更していない部分の文字が消えてしまいます。
[ここをクリックすると内容が表示されます]
(コード中にあるReadiniIntはRGB(255,255,255)(白)の戻り値です。)コード: 全て選択
Dim lvdisp As *LV_DISPINFO 'リストビューからのメッセージ通知取得構造体ポインター
lvdisp = lParam
If(lvdisp->hdr.idFrom = ListView1) Then 'ListViewからのメッセージか否かの判別
Select Case(lvdisp->hdr.code) '送られたコード判別による処理
Case NM_CUSTOMDRAW '項目描画関連処理
Dim lpLVCD As *NMLVCUSTOMDRAW 'リストビューからのメッセージ通知取得構造体ポインター
lpLVCD = lParam
Select Case lpLVCD->nmcd.dwDrawStage '描画状態の判別
Case CDDS_PREPAINT
MainWndProc = CDRF_NOTIFYITEMDRAW
Exit Function 'return CDRF_NOTIFYITEMDRAW;
Case CDDS_ITEMPREPAINT '着色処理
'メインアイテムのチェックボックスの状態で判別(ListView_GetCheckStateを展開)
If((SendMessage(hList, LVM_GETITEMSTATE, lpLVCD->nmcd.dwItemSpec, LVIS_STATEIMAGEMASK) >> 12) - 1) Then
lpLVCD->clrText = RGB(255, 0, 0) '青時に赤
End If
If ListViewSelect<>-1 Then
lpLVCD->nmcd.dwItemSpec=ListViewSelect
lpLVCD->clrText = RGB(255,0,0)
Else
lpLVCD->clrText = ReadiniInt("Setting","TEXTColor",65280)
End If
MainWndProc = CDRF_NOTIFYPOSTPAINT
Exit Function 'return CDRF_NOTIFYPOSTPAINT;
End Select
End Select
End If
(ListViewSelectは、リストから*番目の*の部分です。)
どうすれば、他の文字列も消えず、なおかつ指定の部分の色変更ができるのでしょうか?
説明不足部分があるかもしれませんが、よろしくお願いします。