문제

나는 Visual Styles의 영향을받는 MenuStrip 컨트롤을 방지하려고 노력하고 있습니다.

그래서 간단한 메뉴 스트립과 Main()의 비활성화 된 시각적 스타일을 사용하여 간단한 양식을 만들었습니다.

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

이 외관을 산출합니다 (참고 회색 테두리 및 배경) :

여기에 이미지 설명

이제이 양식의 다른 컨트롤이 시각적 스타일의 영향을받는 방식으로 동일한 작업을 원합니다 (이 드롭을 사용하여 시각적 스타일을 비활성화하고 싶습니다).

그래서 처음에는 모든 DropDownToolStripMenuItem의 시각적 스타일을 비활성화하려고했지만 작동하지 않았습니다. 그런 다음 전체 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 컨트롤 사용에도 불구하고 Application.EnableVisualStyles();Main()가 호출되면 양식의 모양이 (파란색) :

여기에 이미지 설명

이 드롭 다운의 모양에 어떤 아이디어가있을 수있는 아이디어는 무엇입니까?
내가 누락 된 것은 무엇입니까?

감사합니다.

도움이 되었습니까?

해결책

Menustrip은 전혀 기본 Windows 제어가 아니므로 시각적 스타일 테마의 직접적인 영향을받지 않습니다.모든 렌더링은 .NET 코드로 수행됩니다.이것을 수행하는 기본 클래스는 ToolStripRenderer 인 ToolStripProfessionalRenderer 및 ToolStripsystemRenderer의 두 가지 구현이있는 툴 스트라이퍼 렌더러입니다.후자는 운영 체제를 에뮬레이션하려고 시도하고, Menustrip의 렌더링 장치를 "시스템"으로 설정하여 얻을 수 있습니다.에뮬레이션은 Windows 7과 같은 나중에 운영 체제에서 그렇게 그렇게 그렇고 정확하게 잘못되었습니다.

실제 운영 체제를 찾아야하는 경우 MainMenu를 대신 사용하십시오.Menustrip에 비해 몇 가지 제한 사항이 있습니다.색상을 변경하려면 자신의 렌더러를 구현하고 컬러 테이블을 수정할 수 있습니다.이 답변 .

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