TrackMouseEvent ±¸ÇöÇϱâ


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 -