リストビューで CDDS_SUBITEMが送られてこない – プログラミング – Home

リストビューで CDDS_SUBITE...
 
通知
すべてクリア

[解決済] リストビューで CDDS_SUBITEMが送られてこない


ぐらん
 ぐらん
(@ぐらん)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

WindowsXP SDK VC2005

リストビューのカスタムドローについて質問です。

case NM_CUSTOMDRAW:
lplvcd = (LPNMLVCUSTOMDRAW)lParam;

switch( lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
return TRUE;

case CDDS_ITEMPREPAINT:
return TRUE;

case CDDS_ITEMPREPAINT|CDDS_SUBITEM:
return TRUE;
}
return CDRF_DODEFAULT;

CDDS_PREPAINT には処理がうつります
CDDS_ITEMPREPAINT にも処理がうつります
CDDS_ITEMPREPAINT|CDDS_SUBITEM これには処理が移りません。
特定のセルの背景だけ色を変えたいのですが・・・。
CDDS_SUBITEMをつかまえて、特定のセルの色を変えたいと思っています。

CDDS_SUBITEMをつかまえるにはどうしたらいいでしょうか。
宜しくお願い致します。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

戻り値が皆 TRUE なのが気になります。

(参考)
http://forums.belution.com/ja/vc/000/063/22s.shtml


返信引用
ぐらん
 ぐらん
(@ぐらん)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

言い忘れてしまいましたが、ダイアログベースで作成しています。

  case CDDS_PREPAINT:
return CDRF_NOTIFYSUBITEMDRAW;
case CDDS_ITEMPREPAINT:
return CDRF_NOTIFYSUBITEMDRAW;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
...ここでいろいろする...
return CDRF_DODEFAULT;

↑こちらのように、returnを書き換えましたが、結果は同じでした。
case CDDS_ITEMPREPAINT | CDDS_SUBITEM のしたにブレークポイントを置いても、
HITしませんでした。

case CDDS_PREPAINT:
 SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NOTIFYITEMDRAW );
 return TRUE;

case CDDS_ITEMPREPAINT:
 SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NEWFONT);
 return TRUE;

case CDDS_ITEMPREPAINT|CDDS_SUBITEM:
-処理-
 SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NEWFONT);
 return TRUE;

↑いまはこう書いていますが、結果は同じでした・・・


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

写し間違いかもしれませんが、
「今はこう書いています」の方のコードでは、
CDRF_NOTIFYSUBITEMDRAW
を返していませんよ。


返信引用
ぐらん
 ぐらん
(@ぐらん)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

レスありがとうございます。
以下のように、CDRF_NOTIFYITEMDRAWをリターンさせてみましたが、
結果は同じで、ブレークポイントにヒットしませんでした。

case CDDS_PREPAINT:
 SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NOTIFYITEMDRAW );
 return CDRF_NOTIFYITEMDRAW;

case CDDS_ITEMPREPAINT:
 SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NEWFONT);
 return CDRF_NOTIFYITEMDRAW;

case CDDS_ITEMPREPAINT|CDDS_SUBITEM:
-処理-
 SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NEWFONT);
 return TRUE;

うーん・・・何が悪いのやら・・


返信引用
ぐらん
 ぐらん
(@ぐらん)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

case CDDS_ITEMPREPAINT|CDDS_SUBITEM:

のところで、CDRF_NOTIFYITEMDRAW や CDRF_NEWFONTをリターンしてみても、結果は同
じでした。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

この場合、返すとは、
SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NOTIFYITEMDRAW);
とするという意味です。


返信引用
ぐらん
 ぐらん
(@ぐらん)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

なるほど。そういうことでしたか。
SetWindowLong( hWndDebug, DWL_MSGRESULT,(long)CDRF_NOTIFYITEMDRAW);
としたら、ちゃんとCDDS_SUBITEMが送られてきました!

diarygoodsさん、どうもありがとうございました。


返信引用
ぐらん
 ぐらん
(@ぐらん)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

おかげさまで、解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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