문제

초점이 포함되어 있어도 창을 비활성 상태로 유지하는 방법이 있습니까? 두 가지 형태 (A와 B)가 있습니다. 사용자가 A와 상호 작용 한 후, 초점을 B로 다시 전송합니다 (초점 전송 결과 (사용자는 A를 클릭 한 다음 B로 다시 전송되는 사용자)는 활성에서 비활성으로 깜박임이 형성되는 것입니다. 이것은 추악 해 보입니다 (특히 순간적으로 더 큰 그림자가있는 Vista에서). 이 깜박임이 일어나지 않도록 어떻게 머무르기 위해서도 체류를 유지할 수 있습니까?

도움이 되었습니까?

해결책

마침내 나는 대답을 찾았다!

경고: 이 답변의 기술을 남용하지 마십시오. 그렇게하면 사용자가 혼동되며 일반적으로 컴퓨팅 경험에 해로울 것입니다. 아래에 설명 된 기술은 특정 상황에서 매우 유용 할 수 있지만 (예 : Intellisense와 같은 행동을 구현 함) 제발 당신의 사용에 대해 신중하십시오.

그만큼 wm_ncactivate 메시지는 비 클리어 영역 (예 : 테두리 및 타이틀 바)의 상태를 비활성 또는 활성으로 변경하기 위해 창으로 전송됩니다. 메시지의 WPARAM은 상태가 비활성인지 또는 활성인지 여부를 나타냅니다. WPARAM이 true (1) 인 경우 창이 활성화됩니다. WPARAM이 False (0) 인 경우 창이 비활성으로 보입니다. 창이 비활성이거나 활성화되도록 강제로 WPARAM을 해당 값 (0 또는 1)으로 설정하여 재정의하면 모두 설정됩니다!

private const int WM_NCACTIVATE = 0x0086;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCACTIVATE)
    {
        // Use this to make it always look inactive:
        m.WParam = (IntPtr)0;

        // Alternately, use this to make it always look active:
        m.WParam = (IntPtr)1;
    }

    base.WndProc(ref m);
}

다른 팁

GUI 모델의 기본 동작 변경에 대해 이야기하고 있습니다. 나는 그렇게하는 것을 권고하지 않을 것입니다. 사용자가 A에서 무언가를하고 있다면 B로 돌아가서 A가 사라지지 않아야합니까? 왜 '깜박임'입니까? 초점 변경이 발생하면 단일 스위치 여야합니다.

당신이 설명하는 바에 따르면 다음과 같은 초점 전환입니다.

a-> b
b-> a-> 사용자 클릭-> b
b-> a

?

이것이 도움이되는지 확실하지 않지만 Winforms는 소유 양식의 개념을 지원합니다. 예를 들어, 플로팅 툴바는 최상위 창 밖에서 살더라도 최상위 창이 활성화되어 있어도 활성으로 유지됩니다 (그 반대). 마찬가지로, 사용자가 양식 B를 비활성화하지 않고 양식 A와 상호 작용할 수 있기를 원합니다.

이를 달성하려면 전화해야 할 것 같습니다. b.AddOwnedForm(a) 당신이 보여주기 직전에 a.

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