2011-11-04 3 views
0

시작할 때 양식을 시작하려고하고 내 응용 프로그램의 실행 시간 전체를 배경으로 유지하려고합니다. 본질적으로 모든 바탕 화면 아이콘을 숨기고 빈 배경을 갖고 싶습니다. 또한 사용자가 특정 버튼을 클릭하면 BackColor 양식이 변경되기를 원합니다.winforms의 바탕 화면/맨 아래 창에있는 창

나는 무리를 수색했으며 나는 계속해서 하프 솔루션을 찾고있다. 여기에 지금까지 시도했습니다 무엇 :

은의 WndProc 이벤트를 우선 적용 BackBaseForm를 작성하고 WM_WINDOWPOSCHANGING 경우, 나는 base.WndProc(ref m)를 호출하고 대신 다음과 같은 메시지를 전송하지 않습니다 그러나

SetWindowPos(Handle, new IntPtr(1), 0, 0, this.width, this.height, SWP_NOZORDER);

을 , 나는 그것을 클릭 할 때마다 여전히 앞쪽으로 가져온다. 나는 또한 WINDOWPOS 구조체를 만들려고 시도했다. 구조체에 포인터를 마샬링 한 다음 구조체를 수정했다. 나는 이것이 메시지의 실제 lParam을 변경한다고 생각하지 않습니다.

답변

0

'기본'양식의 소유자 양식을 만들고 해당 배경 양식으로 설정하십시오. 예 :

frmBackground backgroundForm = new frmBackground(); 
frmMain mainForm = new frmMain(); 
mainForm.Owner = backgroundForm; 
backgroundForm.Show(); 
mainForm.Show(); 
+0

몇 가지 다른 어셈블리에서 시작하는 많은 형태가있을 것입니다. – user1030064

+0

모든 윈도우가 같은 프로세스에있는 한 클래스 폼이 어떤 어셈블리 타입인지는 중요하지 않습니다. 다른 프로세스에서라도이 작업을 수행 할 수 있어야하지만 더 낮은 수준의 Win32 API 호출을 사용해야합니다. –

0

frmBackground.Enabled을 false로 설정하십시오. 당신이 할 경우

protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     var bg = new Form(); 
     bg.WindowState = FormWindowState.Maximized; 
     bg.ShowInTaskbar = false; 
     bg.FormBorderStyle = FormBorderStyle.None; 
     bg.Show(); 
     bg.Enabled = false; 
     this.Owner = bg; // optional - see below 
    } 

이 : 그럼

this.Owner = f; 

당신이 배경 양식을 클릭 할 때 기본 양식 테두리 난, 적어도 Windows 7에서 (플래시됩니다 mainform에서

다른 버전에 대해서는 확실하지 않음). 어느 쪽이든, Enabled를 false로 설정하면 작동합니다. 배경 화면을 클릭하면 삐 소리가납니다. 이는 성가심 일 수 있습니다. 아마 그것을 막을 수있는 방법이있을 것입니다.

관련 문제