Implemented _TrackMouseEvent for the TME_LEAVE flag.
This commit is contained in:
parent
c21de847ab
commit
271f522fa9
|
@ -92,7 +92,7 @@ init COMCTL32_LibMain
|
||||||
84 stdcall PropertySheetA(ptr) PropertySheetA
|
84 stdcall PropertySheetA(ptr) PropertySheetA
|
||||||
85 stdcall PropertySheetW(ptr) PropertySheetW
|
85 stdcall PropertySheetW(ptr) PropertySheetW
|
||||||
86 stdcall UninitializeFlatSB(long) UninitializeFlatSB
|
86 stdcall UninitializeFlatSB(long) UninitializeFlatSB
|
||||||
87 stub _TrackMouseEvent
|
87 stdcall _TrackMouseEvent(ptr) _TrackMouseEvent
|
||||||
|
|
||||||
151 stdcall CreateMRUListA(ptr) CreateMRUListA
|
151 stdcall CreateMRUListA(ptr) CreateMRUListA
|
||||||
152 stdcall FreeMRUList(ptr) FreeMRUListA
|
152 stdcall FreeMRUList(ptr) FreeMRUListA
|
||||||
|
|
|
@ -849,3 +849,105 @@ COMCTL32_DllGetVersion (DLLVERSIONINFO *pdvi)
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int iTrackMax = 0;
|
||||||
|
static HWND TrackingList[10];
|
||||||
|
static UINT_PTR timer;
|
||||||
|
|
||||||
|
static void CALLBACK TrackMouseEventProc(HWND hwndUnused, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
|
||||||
|
int i = 0;
|
||||||
|
POINT pos;
|
||||||
|
HWND hwnd;
|
||||||
|
BOOL keepTracking = FALSE;
|
||||||
|
GetCursorPos(&pos);
|
||||||
|
hwnd = WindowFromPoint(pos);
|
||||||
|
/* Loop through the list of windows waiting on mouse exit */
|
||||||
|
while (i < iTrackMax) {
|
||||||
|
if (TrackingList[i] != hwnd)
|
||||||
|
PostMessageA(TrackingList[i], WM_MOUSELEAVE, 0, 0);
|
||||||
|
else
|
||||||
|
keepTracking = TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keepTracking) {
|
||||||
|
iTrackMax = 1;
|
||||||
|
TrackingList[0] = hwnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KillTimer(0, timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* _TrackMouseEvent [COMCTL32.25]
|
||||||
|
*
|
||||||
|
* Requests notification of mouse events
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* ptme [I,O] pointer to TRACKMOUSEEVENT information structure.
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: non-zero
|
||||||
|
* Failure: zero
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL WINAPI
|
||||||
|
_TrackMouseEvent (TRACKMOUSEEVENT *ptme)
|
||||||
|
{
|
||||||
|
DWORD flags = 0;
|
||||||
|
int i;
|
||||||
|
BOOL cancel = 0, hover = 0, leave = 0, query = 0;
|
||||||
|
if (ptme->cbSize != sizeof(TRACKMOUSEEVENT)) {
|
||||||
|
WARN("wrong TRACKMOUSEEVENT size from app");
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("%lx, %lx, %x, %lx\n", ptme->cbSize, ptme->dwFlags, ptme->hwndTrack, ptme->dwHoverTime);
|
||||||
|
|
||||||
|
flags = ptme->dwFlags;
|
||||||
|
if ( flags & TME_CANCEL ) {
|
||||||
|
cancel = 1;
|
||||||
|
flags &= ~ TME_CANCEL;
|
||||||
|
}
|
||||||
|
if ( flags & TME_HOVER ) {
|
||||||
|
hover = 1;
|
||||||
|
flags &= ~ TME_HOVER;
|
||||||
|
FIXME("TME_HOVER unimplemented\n" );
|
||||||
|
}
|
||||||
|
if ( flags & TME_LEAVE ) {
|
||||||
|
leave = 1;
|
||||||
|
flags &= ~ TME_LEAVE;
|
||||||
|
}
|
||||||
|
if ( flags & TME_QUERY ) {
|
||||||
|
query = 1;
|
||||||
|
flags &= ~ TME_QUERY;
|
||||||
|
FIXME("TME_QUERY unimplemented\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( flags )
|
||||||
|
FIXME("Unknown flag(s) %ld\n", flags & ~(TME_CANCEL | TME_HOVER | TME_LEAVE | TME_QUERY) );
|
||||||
|
|
||||||
|
if (leave) {
|
||||||
|
if (cancel) {
|
||||||
|
for (i = 0; i < iTrackMax; i++)
|
||||||
|
if (TrackingList[i] == ptme->hwndTrack)
|
||||||
|
TrackingList[i] = TrackingList[--iTrackMax];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (iTrackMax == sizeof (TrackingList) / sizeof *TrackingList)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Add hwndTrack to the track list */
|
||||||
|
TrackingList[iTrackMax++] = ptme->hwndTrack;
|
||||||
|
if (!timer)
|
||||||
|
timer = SetTimer(0, 0, 50, TrackMouseEventProc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -477,6 +477,35 @@ BOOL WINAPI ImageList_Write(HIMAGELIST, LPSTREAM);
|
||||||
#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
|
#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WM_MOUSEHOVER
|
||||||
|
#define WM_MOUSEHOVER 0x02A1
|
||||||
|
#define WM_MOUSELEAVE 0x02A3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TME_HOVER
|
||||||
|
|
||||||
|
#define TME_HOVER 0x00000001
|
||||||
|
#define TME_LEAVE 0x00000002
|
||||||
|
#define TME_QUERY 0x40000000
|
||||||
|
#define TME_CANCEL 0x80000000
|
||||||
|
|
||||||
|
|
||||||
|
#define HOVER_DEFAULT 0xFFFFFFFF
|
||||||
|
|
||||||
|
typedef struct tagTRACKMOUSEEVENT {
|
||||||
|
DWORD cbSize;
|
||||||
|
DWORD dwFlags;
|
||||||
|
HWND hwndTrack;
|
||||||
|
DWORD dwHoverTime;
|
||||||
|
} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
_TrackMouseEvent(
|
||||||
|
LPTRACKMOUSEEVENT lpEventTrack);
|
||||||
|
|
||||||
/* Flat Scrollbar control */
|
/* Flat Scrollbar control */
|
||||||
|
|
||||||
#define FLATSB_CLASS16 "flatsb_class"
|
#define FLATSB_CLASS16 "flatsb_class"
|
||||||
|
|
Loading…
Reference in New Issue