최근 메신저를 만들다가..
쪽지를 수신하는 부분에서... 다른 곳에서 작업을 하고 있을 때..
쪽지가 도착하면 포커스가 빼앗기는 상황이 발생하더군요.
포커스를 빼앗기면 안되는데 말이죠..
이를테면 쪽지를 쓰고 있는데.. 쪽지가 도착하면 새로운 폼이 등장하게 되면서..
포커스를 빼앗기는 것 입니다.
이 부분을 해결하는데 생각보다 꾀 많은 시간이 투자되었네요.
일단 발견한 방법은 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);
어렵지 않네요. 다만 자료가 많이 않아서 시간이 조금 걸렸을 뿐...
'Program > C#' 카테고리의 다른 글
MessageBox의 버튼 텍스트 변경하기 (0) | 2010.03.19 |
---|---|
C# 웹페이지 로그인 및 자바스크립트 실행시키기 (0) | 2010.03.19 |
C#에서 Win32 API 사용하기 (0) | 2010.03.19 |
C#기준, 닷넷에서 ini파일 입/출력 (0) | 2010.03.19 |
C# 에서 Direct X 사용하기.. (0) | 2010.03.19 |