VB 2005 には、XP スタイルでは見栄えがよく、クラシック スタイルでは見栄えの悪い UI がいくつかあります。
ユーザーがどのモードにいるかを検出し、その場でフォームを再フォーマットする方法についてのアイデアはありますか?
回答投稿編集:
ダニエルに感謝します。これでうまくいくようです。GetCurrentThemeName() 関数で投稿した最初のソリューションを使用しています。
私は次のことをしています:
関数宣言:
Private Declare Unicode Function GetCurrentThemeName Lib "uxtheme" (ByVal stringThemeName As System.Text.StringBuilder, ByVal lengthThemeName As Integer, ByVal stringColorName As System.Text.StringBuilder, ByVal lengthColorName As Integer, ByVal stringSizeName As System.Text.StringBuilder, ByVal lengthSizeName As Integer) As Int32
コード本体:
Dim stringThemeName As New System.Text.StringBuilder(260)
Dim stringColorName As New System.Text.StringBuilder(260)
Dim stringSizeName As New System.Text.StringBuilder(260)
GetCurrentThemeName(stringThemeName, 260, stringColorName, 260, stringSizeName, 260)
MsgBox(stringThemeName.ToString)
Windows クラシック スタイル/テーマでは MessageBox が空になり、Windows XP スタイル/テーマでは "C:\WINDOWS\resources\Themes\luna\luna.msstyles" が表示されます。ユーザーがこれら 2 つ以外のテーマを設定した場合に何が起こるかを確認するために、もう少しチェックを行う必要がありますが、大きな問題にはなりません。