2014-05-14 2 views
1

투명하고 클릭 할 수있는 맨 위에 항상있는 양식을 만들려고 노력하고 있습니다. 순전히 초점을 잃지 않는 정보를 그리는 데 사용됩니다. 항상 맨 위에 표시됩니다. 아이디어는 항상 다른 모든 창의 맨 위에 표시 될 정보를 내 화면에 그릴 수있게하는 것입니다.이 정보는 단순한 텍스트 일 ​​가능성이 높지만 보이지 않는 동안 다른 프로그램과의 상호 작용을 방해하지는 않습니다.항상 위에 머물 수있는 양식을 클릭하십시오

내가 겪고있는 문제는 다른 프로그램에 중점을두고 있음에도 불구하고 항상 맨 위에있는 양식을 얻는 것입니다. TopMost 속성을 사용해 보았지만 작동하지 않는 것처럼 보였습니다. 초점이 맞지 않는 창에 초점을 맞추었지만 조금 어색해 보였고 아무렇게나 작동하지 않았습니다. Windows 8.1에서 문제가 발생했습니다.

모든 답변을 크게 감상, 감사합니다.

+0

항상 상단에 위치하도록 설정된 다른 프로그램이나 항상 상단에 위치하도록 설정되지 않은 프로그램 위에 있어야 할 것으로 예상됩니까? 전자는 정말로 할 수 없지만 후자는 확실합니다. – Servy

+0

모든 프로그램의 맨 위에 있지만 항상 맨 위에 있지 않도록 설정된 프로그램의 맨 위에 배치하는 것이 좋습니다. – user3599771

+0

그리고 "TopMost"설정이 작동하지 않는다면 어떤 방식으로 작동하지 않습니까? 꼭 필요한 기능을 수행해야하기 때문에? – Servy

답변

-1

확장 된 Windows 스타일을 사용해야합니다.이 코드는 어떻게 수행하는지 보여줍니다.

이 양식은 마우스 상호 작용을 양식 뒤에 전달하며 다른 최상위 창을 활성화 한 상태에서도 TopMost로 표시됩니다.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    const int GWL_EXSTYLE = -20; 
    const int WS_EX_TRANSPARENT = 0x20; 

    [DllImport("user32.dll", CharSet=CharSet.Auto)] 
    extern static int GetWindowLong(IntPtr hWnd, int nIndex); 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    extern static int SetWindowLong(IntPtr hWnd, int nIndex, int nStyle); 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var style = GetWindowLong(this.Handle, GWL_EXSTYLE); 
     var newStyle = style | WS_EX_TRANSPARENT; 

     SetWindowLong(this.Handle, GWL_EXSTYLE, newStyle); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     this.BringToFront(); 
    } 
} 

사용자가 양식과 상호 작용하는 것은 약간의 트릭이지만, 수행하려는 작업에 대한 자세한 내용을 제공해야합니다.

항상 창을 맨 위에 표시하려면 타이머를 100ms 간격으로두고 양식 속성 TopMost을 true로 설정하십시오.

+0

[Raymond Chen이 말한대로] (http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx)이 방법은 창문이 항상 위를 차지할 수있는 확실한 방법이 아니며, 로 시작하기 위하여 그것을 시도하는 것은 생산적이지 않다. 이것은 유일하게이기는 움직임이없는 게임 중 하나입니다. – Servy

+0

그냥이 코드를 가지고 놀아주세요. ** WS_EX_TRANSPARENT ** 창에 대한 마우스 이벤트를 창 뒤에 놓습니다 (요청에 따라 클릭 가능). 정말 작동합니다. 양식을 만들어 직접 시도해보십시오. 작동하지 않으면 답을 제거 할 것입니다. – LawfulHacker

+0

질문에 OP는 이미 자신의 양식을 투명하게 만들 수 있다고 말합니다. 그는 자신의 양식을 최상위 양식으로 만드는 데 문제가 있습니다. 그것이 그 질문에 관한 모든 것입니다. – Servy

관련 문제