2013-02-10 3 views
1

C#을 사용하여 경계선없는 양식과 최대화 방법을 사용하여 응용 프로그램 '전체 화면 모드'를 제공하고 있습니다. 양식이 최대화되지 않은 상태에서 경계선을 만들 때 완벽하게 작동합니다. 화면에서 볼 수있는 것은 양식이며 작업 표시 줄에 적용됩니다. 그러나 양식을 수동으로 최대화 (사용자 상호 작용) 한 다음 테두리가 없으므로 &을 최대화하면 작업 표시 줄이 양식 위에 그려집니다 (작업 영역을 사용하고 있지 않기 때문에 양식의 컨트롤 부분이 숨겨져 있습니다. 작업 표시 줄을 표시하지 않으려는 의도 된 동작입니다). 폼의 속성 TopMost를 true로 설정하려고 시도했지만 그 효과가없는 것 같습니다.테두리없는 양식 최대화 정상적인 크기에서 최대화 할 때 작업 표시 줄에만 적용됩니다.

작업 표시 줄을 항상 덮어 씌울 수있는 방법이 있습니까?

if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None) 
    {   
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
    } 
    else 
    { 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; 
    } 
    if (this.WindowState != FormWindowState.Maximized) 
    { 
    this.WindowState = FormWindowState.Maximized; 
    } 
    else 
    { 
     if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.Sizable) this.WindowState=FormWindowState.Normal; 
    } 

답변

1

그러나, 수동 형태를 (사용자 조작)을 최대화하는 경우 ...

,

문제는 이미 내부적으로 최대화 상태로 표시되어 있다는 것입니다. 그래서 최대화 다시 양식의 현재 크기를 변경하지 않습니다. 그러면 작업 표시 줄이 노출됩니다. 먼저 정상으로 복원 한 다음 다시 최대화해야합니다. 예, 조금 깜박입니다.

private void ToggleStateButton_Click(object sender, EventArgs e) { 
     if (this.FormBorderStyle == FormBorderStyle.None) { 
      this.FormBorderStyle = FormBorderStyle.Sizable; 
      this.WindowState = FormWindowState.Normal; 
     } 
     else { 
      this.FormBorderStyle = FormBorderStyle.None; 
      if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal; 
      this.WindowState = FormWindowState.Maximized; 
     } 
    } 
0

확실하지 이런 일이 왜, 그리고 나는 그들이 내 화면을 모두 취할 수 가정 응용 프로그램의 싫어 . 이 1024 × 768 디스플레이에 수용 될 수도 있지만, 내 30 "디스플레이는 망할 일이 내 화면을 소유 결정할 때 그래서 내 메시지는, 어쩌면 당신의 모든 컨트롤을 확인하는에 집중되어있다.

을 낭비 볼 수 있습니다보다는 집중하고있다

예기치 않은 문제를 해결하면서 항상 창 크기 변경을 감지 한 다음 기본 동작을 무시할 수 있지만 최대화 및 30 인치 디스플레이를 모두 사용하는 대신 윈도우가 필요하고 그에 따라 크기를 설정해야합니다.

내 생각은 가치가 정확히 무엇을 내 2 센트,

)

+1

John, 개발중인 응용 프로그램은 공개 응용 프로그램이 아니므로 프로덕션 환경에서는 작업 표시 줄을 모두 사용할 수 없게됩니다. 그러나, 순결의 목적을 위해 내 애플 리케이션이 작업 표시 줄이 활성화 된 Windows를 처리 할 수 ​​있는지 확인하고 싶습니다. 더 나아가이 특정 시나리오는 VMR9 렌더러를 전체 화면으로 만드는 데 사용됩니다. 작업 표시 줄이 없을 때 비디오를 보는 것이 더 즐겁다는 데 동의합니까? – zaitsman

0

당신이처럼 WINAPI을 SetWindowPos 방법을 사용하여 시도 할 수 : 양식에서

public static class WinApi 
{ 
    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, 
            int x, int y, int width, int height, 
            uint flags); 

    static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 
    const uint SWP_NOSIZE = 0x0001; 
    const uint SWP_NOMOVE = 0x0002; 
    const uint SWP_SHOWWINDOW = 0x0040; 

    public static void SetFormTopMost(Form form) 
    { 
     SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, 
        SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); 
    } 
} 

이 같이 호출 :

WinApi.SetFormTopMost(this);