예전에 메신저를 만들다가
쪽지를 수신하는 부분에서
다른 곳에서 작업을 하고 있을 때
쪽지가 도착하면
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(); } }