2012-05-21 4 views
1

MenuStrip 컨트롤이 시각적 스타일의 영향을받지 않도록하려고합니다.ToolStripDropDownMenu의 시각적 스타일 사용 안 함

은 그래서 Main()에 간단한 메뉴 스트립 장애인 시각적 스타일과 간단한 양식을 만들었습니다

enter image description here

이 모양을 얻을 수

// Application.EnableVisualStyles(); <-- no visual styles 
Application.SetCompatibleTextRenderingDefault(false); 
Application.Run(new Form1()); 

(회색 테두리와 배경에주의) 이제이 양식의 다른 컨트롤이 시각적 스타일의 영향을받는 방식으로 동일한 작업을 수행하려고합니다.이 드롭 다운의 비주얼 스타일을 사용하지 않도록 설정하고 싶습니다.

처음에는 DropDown (ToolStripMenuItem)의 시각적 스타일을 사용하지 않으려 고했지만 처음에는 작동하지 않았습니다. 그런 다음 전체 MenuStrip에 대한 시각적 스타일을 사용하지 않으려 고했지만 그 중 하나도 작동하지 않았습니다. Main()에서 Application.EnableVisualStyles();가 호출 될 때, 사용자 정의 MenuStrip 컨트롤의 사용에도 불구하고

class MPMenuStrip : MenuStrip 
{ 
    [DllImportAttribute("uxtheme.dll")] 
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist); 

    protected override void OnHandleCreated(EventArgs e) 
    { 
     // first attempt: 
     foreach (ToolStripMenuItem menuItem in this.Items) 
      SetWindowTheme(menuItem.DropDown.Handle, "", ""); 

     // second attempt: 
     SetWindowTheme(this.Handle, "", ""); 
     base.OnHandleCreated(e); 
    } 
} 

, 형태의 모양이 (파란색) 다음입니다 : 여기

은 MenuStrip 내 사용자 지정의 코드입니다

enter image description here

다른 아이디어는이 드롭 다운의 모양에 어떤 영향을 줄 수 있습니까?
내가 무엇이 누락 되었습니까?

감사합니다.

답변

1

MenuStrip이 네이티브 Windows 컨트롤이 아니기 때문에 비주얼 스타일 테마의 영향을 직접받지 않습니다. 모든 렌더링은 .NET 코드에 의해 수행됩니다. 이 작업을 수행하는 기본 클래스는 ToolStripProfessionalRenderer와 ToolStripSystemRenderer의 두 가지 구현이있는 ToolStripRenderer입니다. 후자는 운영체제 모양을 에뮬레이션하려고하는데 MenuStrip의 RenderMode를 "System"으로 설정하면됩니다. Windows 7과 같은 최신 운영 체제에서는 에뮬레이션이 너무나 잘못되었습니다.

실제 운영 체제의 모양과 느낌을 원한다면 대신 MainMenu를 사용하십시오. MenuStrip에 비해 몇 가지 제한 사항이 있습니다. 색상을 변경하려면 고유 한 렌더러를 구현하고 색상 표를 수정할 수 있습니다. this answer과 같이

+0

고마워, 그게 내가 원하는거야. 모든 것이 이제 완벽하게 이해됩니다 :) – LihO