문제

VB 2005에는 XP 스타일에서는 멋져 보이지만 클래식 스타일에서는 형편없는 UI가 있습니다.

사용자가 어떤 모드에 있는지 감지하고 즉시 양식 형식을 다시 지정하는 방법에 대한 아이디어가 있습니까?


게시물 답변 편집:

Daniel님, 감사합니다. 이렇게 하면 될 것 같습니다.저는 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 esources hemes\luna\luna.msstyles"가 표시됩니다.사용자가 이 두 테마가 아닌 다른 테마를 설정하면 어떤 일이 발생하는지 좀 더 확인해야 하지만 큰 문제는 아닙니다.

도움이 되었습니까?

해결책

다음의 조합을 사용해 보세요. 현재테마이름 가져오기 (MSDN 페이지) 그리고 DwmIsCompositionEnabled

첫 번째 항목을 PInvoke에 연결하여 코드에 놓기만 하면 되고, 두 번째 항목에는 MSDN 주석에 제공된 코드를 사용할 수 있습니다.

[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();

이 두 함수에서 어떤 결과를 얻는지 확인하세요.다른 테마를 사용하고 싶은 시기를 결정하는 데 충분할 것입니다!

다른 팁

개인적으로 저는 다음을 사용하여 앱이 테마로 실행되고 있는지 확인합니다.

if (Application.RenderWithVisualStyles)
{
    // you're themed
}

거기에 테마활성화됨 WinAPI 기능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top