안녕하세요? 맨날맑음 입니다.
네이트온을 사용하다 보면 친구가 로그인 했더나 대화 요청이 들어올때 트레이 아이콘 주위에 알림창이 뜨는것을 볼 수 있습니다.
rsInfo를 사용하면 간단하게 구현 할 수 있습니다.
.NET에서 Win32API를 사용하기위해 우선 using System.Runtime.InteropServices; 이 필요합니다.
또한 SystemParametersInfo에 대한 아래와 같은 선언도 필요합니다.
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int SystemParametersInfo(int uAction, int uParam, out RECT lpvParam, int fuWinIni);
SystemParametersInfo 함수를 호출하여 작업표시줄의 영역을 뺀 화면의 크기를 얻어 오기 위하여 RECT 구조체가 필요 하기 때문에 아래와 같이 임의로 RECT 구조체를 정의해 줍니다.
[StructLayout(LayoutKind.Sequential)]사실 SystemParametersInfo는 매우 다양한 기능을 수행하는 API입니다. 여러가지 시스템 정보를 설정하거나 가져 올 수 있습니다. 예를들어 바탕화면 이미지를 변경한다던지, 작업영역의 크기를 알아낼 수 도 있고, 화면보호기의 동작 유무를 제어 할 수도 있습니다. 인자에 따른 기능이 너무 많아서 좀더 자세한 기능을 알고 싶다면 아래의 링크에서 MSDN 도움말을 확인 하시면 됩니다.
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx
위에 그림에서 보듯이 작업표시줄의 트레이 아이콘 위에 윈도우를 띄우려면(무언가 보여주고 싶다면...) 작업표시줄의 영역을 제외한 윈도우의 실질적인 작업영역의 크기를 얻어오면 됩니다.
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]SetFormLocationToTray 함수는 인자로 들어온 Form 객체의 위치를 Tray 주위로 옮겨 주는 역할을 합니다.
public static extern int SystemParametersInfo(int uAction, int uParam, out RECT lpvParam, int fuWinIni);
private void SetFormLocationToTray(Form form)
{
int SPI_GETWORKAREA = 0x0030; //작업영역을 알아오는 Flag
RECT r = new RECT();
SystemParametersInfo(SPI_GETWORKAREA, 0, out r, 0);
Size s = form.Size;
Point p = new Point(r.right - s.Width, r.bottom - s.Height);
form.Location = p;
}
SystemParametersInfo의 첫번째 인자중 0x0030(SPI_GETWORKAREA)을 넣으면 작업표시중을 뺀 작업영역의 크기를 3번째 인자의 RECT 구조체에 얻어오게 됩니다.
알아온 작업영역의 크기로 위의 소스에서 보는것 처럼 현재 폼의 크기에 따라 계산을 하여 폼의 location을 변경하여 네이트온처럼 트레이 주위에 윈도우가 뜨게 할 수 있습니다.
원문 : http://crynut84.tistory.com/47
'Development' 카테고리의 다른 글
[VC++] SystemParametesInfo(각종시스템정보조사) (0) | 2010.07.06 |
---|---|
[VC++] SystemParametersInfo로 SPI_GETNONCLIENTMETRICS 오류시 방법(VS2008 이상) (1) | 2010.07.06 |
[VC++] DLL 생성과 익스포트 섹션 (1) | 2010.06.29 |
[c++ compile] Visual C++ 링커 옵션 VERBOSE(진행 메시지 표시) (0) | 2010.05.20 |
[C++ compile] 기존에 LIB 를 직업 추가해서 에러가 발생해서요 (0) | 2010.05.18 |