Windowsフォームアプリで黒字が白字になる謎現象との闘い(ActiveCaptionText)


あるWindowsフォームアプリケーションでtooltipを使っています。
ユーザーからtooltipの字を大きくできませんか?と要望がありました。

以下の方法で対応
tooltip.OwnerDraw=True
としてから、
tooltip.Drawイベントのハンドラに

        Dim sf As StringFormat = New StringFormat()
        sf.LineAlignment = StringAlignment.Center
        sf.FormatFlags = StringFormatFlags.NoWrap
        Dim f As Font = New Font("MS UI Gothic", フォントのサイズ)
        e.DrawBackground()
        e.DrawBorder()
        e.Graphics.DrawString(e.ToolTipText, f, Brushes.ActiveCaptionText, e.Bounds, sf)

としました。

Win10の開発環境で確認してリリースしたところ「tooltipに文字が表示されてないです(枠と背景と枠は表示される)」との報告が。

この事象が発生したのはWin7のマシンで、しかも全部でなく一部、という非常に嫌なパターンです。

「tooltipに文字が表示されてない」の画面を、よーーーく見ると

なんかシミ(笑)のような白いのがうっすら見えるようなみえないような…
これ、文字は表示されています。でもなぜかフォントカラーが白い(開発時は黒だった)。

DrawStringで使用した

Brushes.ActiveCaptionText

これが悪さをしていました。

Win10や通常のWin7ではこれは黒です。
しかしWin7のディスプレイの個人設定のテーマで「クラシック」を選んでいると、白になってしまいます。

Brushes.Black

としましたら、解決。
なんで最初からこうしなかったのかというと、どこかのサンプルからコードをコピペしたからです。気を付けないと。

Windowsのシステムカラーが環境によってどう変化するかをまとめているサイトがあればと思ったのですが、見つかりませんでした。機会があればもう少し調べようと思います。