
リストビューのカスタムドローについての質問です。
一列目の項目が、たとえば
1になるとその行全体を赤に
2になるとその行全体を青に
という処理をするため、WM_NOTIFYにカスタムドローの処理を記述したのですが、一列目の項目しか色が変わりません。
そこでカスタムドローと一緒に行全体の値を書き換える処理を入れてみたのですが、今度は延々とWM_NOTIFY→更新→WM_NOTIFY・・となっていまい、表示がチカチカ点滅してしまいます。
一列目にカスタムドローの通知が来たとき、他の列にカスタムドロー通知をする方法を探してみましたが、見つかりませんでした。
何か良い方法はないでしょうか。
No.2ベストアンサー
- 回答日時:
イベント処理をどのように行っているか分からないので分からないですが、
switch(lplvcd->nmcd.dwDrawStage){
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW; // サブアイテムも通知する
break;
case CDDS_ITEMPREPAINT|CDDS_SUBITEM://サブアイテムの処理
{
//色を変える処理
}
こんな感じでイベント処理すればできませんかね?
あと、1列目の値を書き換える際に
InvalidateRect
を呼ぶようにすれば、全体を再描画してくれると思います。
カスタムドローの記述は同じように書いていましたが、
InvalidateRectがありませんでした。
これでできそうです。ありがとうございました。
No.1
- 回答日時:
参考URLからの引用で恐縮なのですが
『"項目の描画前通知" をプログラムに送るようにするためには、"描画前" 通知を受け取ったときに、ウィンドウプロシージャで CDRF_NOTIFYITEMDRAW という値を返してやればよい。そうすると、項目毎の描画前通知を受け取ることができるようになります。』
とのことです。
サンプルも載ってるようなので参考にしてみてはいかがでしょうか。
参考URL:http://www.geocities.jp/i96815/ui/ui02.html
この回答への補足
ありがとうございます。
CDRF_NOTIFYITEMDRAWですが、これを返してもアイテム毎の通知を受け取ることができるようになるだけで、実際に通知が来るのはそのアイテムの内容が更新された時など特定の動作をした時のようなので、こちらの思い通りのタイミングで通知を受け取ることはできないみたいです。
今考えているのは、行全体の値を書き換える処理をWM_NOTIFYに書くのではなく、一列目の内容を更新する処理の中に入れると、良いタイミングでカスタムドローできるかもしれません。
ですがこの方法は多少無理やりな気がします。
もう少し待ってみて、何か無いようならこの方法で行こうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 発達障害・ダウン症・自閉症 数ヶ月前、ASD/ADHDの検査と共に、IQテストのようなものも受けたのですが、見方がよく分からない 2 2022/08/08 11:20
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) VBAで重複データを確認したい 5 2022/10/07 16:24
- 数学 一般的な行列の逆行列に関する質問 3 2022/04/21 14:53
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お家デートをしててハグを長い...
-
内部処理形式ってなんですか
-
エクセルで、日付を入力すると...
-
英語の知識があって、数学の知...
-
皆さんが1番信じているものはな...
-
「ご処理進めて頂きますようお...
-
VBA Progress barが動作しない
-
カスタムドロー
-
VBAでCOPYを繰り返すと、処理が...
-
計算の問題なのですが、 例えば...
-
VBAでループ内で使う変数名を可...
-
インタラクティブの反対語は?
-
ハードウェア処理とソフトウェ...
-
VCで処理中ダイアログボックス...
-
文字が入力されたときに処理に...
-
シェルアイコンがイメージリス...
-
パワーポイントでは、どうすれ...
-
掃き出し法 コツ
-
VBの質問#if 0 then ってどう...
-
マルチプロセッシングとマルチ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
Do~Loopした回数をカウントしたい
-
VBAでCOPYを繰り返すと、処理が...
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
リョウ・・・量?料?
-
vba 空のデータをSplitする時の...
-
findは動くがfindnextがマクロ...
おすすめ情報