|
1.¿ä¾à Windows 98/NT/2000 ¿¡´Â ¸¶¿ì½ºÀÇ Ä¿¼°¡ À©µµ¿ì¸¦ ¹þ¾î³µ´ÂÁö ±×·¸Áö ¾ÊÀºÁö¸¦ ÆÇ´ÜÇÒ ¼ö ÀÖ´Â TrackMouseEvent() ¶ó´Â ÇÔ¼ö¸¦ Á¦°øÇÕ´Ï´Ù. ÇÏÁö¸¸ Windows 95 ¿¡¼´Â ÀÌ ±â´ÉÀ» Á¦°øÇÏÁö ¾Ê±â ¶§¹®¿¡ TrackMouseEvent()¿Í °°Àº ±â´ÉÀ» ÇÏ´Â ·çƾÀ» µû·Î ¸¸µé¾î¾ßÇÕ´Ï´Ù. 2.º»¹® ¾Æ·¡ÀÇ ¿¹Á¦ ÄÚµå´Â Windows NT 3.51°ú Windows95¿¡¼ TrackMouseEvent()ÀÇ ÇÔ¼ö¸¦ ±¸ÇöÇÑ °ÍÀÔ´Ï´Ù. °£´ÜÇϱ⠶§¹®¿¡ º¸½Ã¸é¼ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù. 3.¿¹Á¦
#if(_WIN32_WINNT < 0x0400)
#define WM_MOUSELEAVE WM_USER+2
#define TME_LEAVE 1
typedef struct tagTRACKMOUSEEVENT {
DWORD cbSize;
DWORD dwFlags;
HWND hwndTrack;
} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
VOID CALLBACK
TrackMouseTimerProc(HWND hWnd,UINT uMsg,UINT idEvent,DWORD dwTime) {
RECT rect;
POINT pt;
GetClientRect(hWnd,&rect);
MapWindowPoints(hWnd,NULL,(LPPOINT)&rect,2);
GetCursorPos(&pt);
if (!PtInRect(&rect,pt) || (WindowFromPoint(pt) != hWnd)) {
if (!KillTimer(hWnd,idEvent)) {
// Error killing the timer!
}
PostMessage(hWnd,WM_MOUSELEAVE,0,0);
}
}
BOOL
TrackMouseEvent(LPTRACKMOUSEEVENT ptme) {
OutputDebugString(TEXT("TrackMouseEvent\n"));
if (!ptme || ptme->cbSize < sizeof(TRACKMOUSEEVENT)) {
OutputDebugString(TEXT("TrackMouseEvent: invalid "
"TRACKMOUSEEVENT structure\n"));
return FALSE;
}
if (!IsWindow(ptme->hwndTrack)) {
OutputDebugString(
TEXT("TrackMouseEvent: invalid hwndTrack\n"));
return FALSE;
}
if (!(ptme->dwFlags & TME_LEAVE)) {
OutputDebugString(TEXT("TrackMouseEvent: invalid dwFlags\n"));
return FALSE;
}
return SetTimer(ptme->hwndTrack, ptme->dwFlags,
100,(TIMERPROC)TrackMouseTimerProc);
}
#endif
LRESULT CALLBACK
MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
TRACKMOUSEEVENT tme;
static BOOL fInWindow;
static BOOL fInMenu;
switch (uMsg) {
case WM_CREATE:
fInWindow = FALSE;
fInMenu = FALSE;
return 0;
case WM_MOUSEMOVE:
if (!fInWindow) {
fInWindow = TRUE;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = hWnd;
if (!TrackMouseEvent(&tme)) {
MessageBox(hWnd,
TEXT("TrackMouseEvent Failed"),
TEXT("Mouse Leave"),MB_OK);
}
}
break;
case WM_MOUSELEAVE:
fInWindow = FALSE;
if (!fInMenu)
MessageBox(hWnd,TEXT("Elvis has left the building"),
TEXT("Mouse Leave"),MB_OK);
break;
case WM_ENTERMENULOOP:
fInMenu = TRUE;
break;
case WM_EXITMENULOOP:
fInMenu = FALSE;
break;
default:
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return FALSE;
}
4.Âü°í ´ÙÀ½ÀÇ »çÀÌÆ®¿¡ °¡½Ã¸é ³»¿ëÀÌ ÀÖ½À´Ï´Ù. http://support.microsoft.com/support/kb/articles/q183/1/07.asp - 2001.08.06 Smile Seo - |