- 題名: TreeView文字のForeColor変更
- 日時: 2005/04/11 6:32:14
- ID: 10338
- この記事の返信元:
- (なし)
- この記事への返信:
- [10420] Re[1]: TreeView文字のForeColor変更2005/04/14 17:40:36
- ツリーを表示
興味があったので調べてみました。 NM_CUSTOMDRAW 通知メッセージを処理することで文字色の変更ができるようです。 NMTVCUSTOMDRAW で Google 検索すれば日本語サイトのサンプルも ( C++ ですけど ) 見つかりますので 色々試してみては如何でしょう。 #以下蛇足 > どなたかヒント頂けないでしょうか? とのことだったので上記だけで十分でしょうけど、序でですのでこちらで動作確認したコードを 下記しておきます。 選択したノードの文字色を黄色、背景色を黒色にするという内容です。フォーム ( Form1 ) 上に ツリービューコントロール ( treeView1 ) を配置してあるという前提で記述してますので、 必要に応じて書き換えてください。 #見ての通りコメントは一切振っておりませんので、もし参考にする場合でも各パラメータの意味等は #お調べになってくださいね。 #こちらの管理人さまが発行されてるメルマガ『.NETプログラミング研究』の 35 号も #一部参考になるかと思います。 # http://dobon.net/vb/melma/dotnet35.txt //using System.Runtime.InteropServices; public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TreeView treeView1; // 〜 中略 〜 private const int WM_NOTIFY = 0x004E; private const uint NM_FIRST = (0U - 0U); private const uint NM_CUSTOMDRAW = unchecked(NM_FIRST - 12U); private const int CDDS_PREPAINT = 0x00000001; private const int CDDS_ITEM = 0x00010000; private const int CDDS_ITEMPREPAINT = (CDDS_ITEM | CDDS_PREPAINT); private const int CDRF_SKIPDEFAULT = 0x00000004; private const int CDRF_NOTIFYITEMDRAW = 0x00000020; private const int CDIS_SELECTED = 0x0001; private struct NMHDR { public IntPtr hwndFrom; public uint idFrom; public uint code; }; private struct NMCUSTOMDRAW { public NMHDR hdr; public uint dwDrawStage; public IntPtr hdc; public RECT rc; public uint dwItemSpec; public uint uItemState; public IntPtr lItemlParam; }; private struct NMTVCUSTOMDRAW { public NMCUSTOMDRAW nmcd; public uint clrText; public uint clrTextBk; public int iLevel; }; private struct RECT { public int left; public int top; public int right; public int bottom; }; protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == WM_NOTIFY) { NMTVCUSTOMDRAW nmtvcd = (NMTVCUSTOMDRAW)Marshal.PtrToStructure(m.LParam, typeof(NMTVCUSTOMDRAW)); if ((nmtvcd.nmcd.hdr.hwndFrom == this.treeView1.Handle) && (nmtvcd.nmcd.hdr.code == NM_CUSTOMDRAW)) { switch (nmtvcd.nmcd.dwDrawStage) { case CDDS_PREPAINT: m.Result = new IntPtr(CDRF_NOTIFYITEMDRAW); return; case CDDS_ITEMPREPAINT: bool selected = ((nmtvcd.nmcd.uItemState & CDIS_SELECTED) != 0); if (!selected) break; nmtvcd.clrText = (uint)ColorTranslator.ToWin32(Color.Yellow); nmtvcd.clrTextBk = (uint)ColorTranslator.ToWin32(Color.Black); Marshal.StructureToPtr(nmtvcd, m.LParam, false); m.Result = new IntPtr(CDRF_SKIPDEFAULT); break; } } } base.WndProc(ref m); } }
分類:[.NET]
TreeViewのノードの文字のForeColorは標準で変更できるように
なってますが、選択されたとき必ず決まった色になるようです。
これをカスタムドローで変更したいですが、
どなたかヒント頂けないでしょうか?
よろしくお願いします。