[C#] 포커스(Focus) 빼앗지 않는 폼(Form) 구현하기

예전에 메신저를 만들다가

쪽지를 수신하는 부분에서

다른 곳에서 작업을 하고 있을 때

쪽지가 도착하면

Focus를 빼앗기는 상황이 발생하더군요

그러면 안되는데 말이죠..

이를테면 쪽지를 쓰고 있는데..

쪽지가 도착하면 새로운 폼이 등장하게 되면서…

Focus를 빼앗기는 것 입니다.

 

그때 발견한 방법은 2가지 입니다.

1. Win32API를 사용한다.

2. ShowWithoutActivation 프로퍼티를 상속받아서 Child Form Class를 구현한다.

어렵진 않습니다…

 

1. Win32 API – ShowWindow함수 사용

■ 네임스페이스

using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Diagnostics;

■ 예제

//아래 처럼 user32.dll을 dll import합니다.
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
 
//그리고 아래처럼 사용하시면 되겠습니다.
RecvMemoWnd memo = new RecvMemoWnd (strTitle, strContent, strTime, strSender);
ShowWindow(memo .Handle, WM_SHOWNOACTIVATE); //WM_SHOWNOACTIVATE = 4

 

2. .NET – ShowWithoutActivation를 오버라이드하는 Child Form Class

public class Test : Form
{
   bool showWithoutActivation = false;
   protected override bool ShowWithoutActivation
   {
      get
      {
         return showWithoutActivation;
      }
   }
 
   public void Show(bool activate)
   {
      showWithoutActivation = !activate;
      Show();
   }
}

 

Post Author: 김 키티

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다