블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

최근 메신저를 만들다가..

쪽지를 수신하는 부분에서... 다른 곳에서 작업을 하고 있을 때..

쪽지가 도착하면 포커스가 빼앗기는 상황이 발생하더군요.

포커스를 빼앗기면 안되는데 말이죠..

 

이를테면 쪽지를 쓰고 있는데.. 쪽지가 도착하면 새로운 폼이 등장하게 되면서..

포커스를 빼앗기는 것 입니다.

 

이 부분을 해결하는데 생각보다 꾀 많은 시간이 투자되었네요.

 

일단 발견한 방법은 2가지 입니다.

 

1. Win32API를 사용한다.

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

 

그럼 차례대로 소개하도록 하겠습니다. 그리 어렵지 않습니다.

 

 

1. Win32 API - ShowWindow함수 사용

 

//아래 처럼 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. 닷넷 - 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();
   }
}

 

<-------------------------------------------------------------------->

 

Test test = new Test();

test.Show(false);

 

 

어렵지 않네요. 다만 자료가 많이 않아서 시간이 조금 걸렸을 뿐...

반응형
Posted by blueasa
, |