none
TreeView 特定行の文字色または背景色を変える方法に関して RRS feed

  • 質問

  • VisualStudio2019

    Windows10 x64

    上記の環境化となります。

    既存システムの環境化でC++のGUIが全く分からないため教えてください。

    Tree-View Control ITreeEditorがRCの中にDialogとして登録されています。

    こちらのTreeViewにノードを登録するタイミングで、ノードに登録する状態に応じて文字色または背景色を変えたいと考えています。

    色を変えるにはどうすればよいか検索したところ

    https://hp.vector.co.jp/authors/VA016117/treeview.html

    上記のサイトを見つけたのですが、初心者には見ても何をすればさっぱりわかりませんでした。

    ノード登録をする場合は、TVITEM構造体、TVINSERTSTRUCT構造体を使用して登録しているようです。

    以上、よろしくお願いします。

    2020年10月26日 2:05

回答

  • この内容はカスタムドロー(Custom Draw)という方法です。
    Windowsのコントロールのほとんどはこの機能を持っています。
    原理的な手順は次の通りです。

     (1)コントロールが自身を描画する際、親にカスタムドローを行うかどうかを問い合わせます。
     (2)問い合わせにはWM_NOTIFYメッセージが使用されます。LPARAMが( NMHDR *)です。
     (3)カスタムドロー(NMHDR::code==NM_CUSTOMDRAW)ではLPARAMに( NMCUSTOMDRAW *)が設定されています。
     (4)NMCUSTOMDRAWのdwDrawStageを判断して描画のタイミングの通知を要請します。
     (5)通知が来たらNMCUSTOMDRAWのメンバを使って描画を行います。

    実験してみることが理解の早道です。
    まずは、CDDS_PREPAINT時にCDRF_NOTIFYPOSTPAINTをreturnし、
    後にCDDS_POSTPAINTがセットされて来たら
    NMCUSTOMDRAW::hdcに対してNMCUSTOMDRAW::rcをFillRect()などしてみてはどうでしょう。

    また、上記に現れるキーワードを検索してみてください。

    2020年10月26日 7:17

すべての返信

  • この内容はカスタムドロー(Custom Draw)という方法です。
    Windowsのコントロールのほとんどはこの機能を持っています。
    原理的な手順は次の通りです。

     (1)コントロールが自身を描画する際、親にカスタムドローを行うかどうかを問い合わせます。
     (2)問い合わせにはWM_NOTIFYメッセージが使用されます。LPARAMが( NMHDR *)です。
     (3)カスタムドロー(NMHDR::code==NM_CUSTOMDRAW)ではLPARAMに( NMCUSTOMDRAW *)が設定されています。
     (4)NMCUSTOMDRAWのdwDrawStageを判断して描画のタイミングの通知を要請します。
     (5)通知が来たらNMCUSTOMDRAWのメンバを使って描画を行います。

    実験してみることが理解の早道です。
    まずは、CDDS_PREPAINT時にCDRF_NOTIFYPOSTPAINTをreturnし、
    後にCDDS_POSTPAINTがセットされて来たら
    NMCUSTOMDRAW::hdcに対してNMCUSTOMDRAW::rcをFillRect()などしてみてはどうでしょう。

    また、上記に現れるキーワードを検索してみてください。

    2020年10月26日 7:17
  • 回答ありがとうございます。

    ご指摘頂きましたキーワードをもとに勉強してみたいと思います。

    2020年10月27日 2:59