Use an extra bit in the button status byte to flag whether the
DefButtonWndProc should process the WM_LBUTTONUP message.
This commit is contained in:
parent
3d06d20bab
commit
61b15de4ba
|
@ -150,14 +150,18 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
|
||||||
SetCapture( hWnd );
|
SetCapture( hWnd );
|
||||||
SetFocus( hWnd );
|
SetFocus( hWnd );
|
||||||
SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 );
|
SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 );
|
||||||
|
infoPtr->state |= BUTTON_BTNPRESSED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
/* FIXME: real windows uses extra flags in the status for this */
|
if (!(infoPtr->state & BUTTON_BTNPRESSED)) break;
|
||||||
if (GetCapture() != hWnd) break;
|
infoPtr->state &= BUTTON_NSTATES;
|
||||||
|
if (!(infoPtr->state & BUTTON_HIGHLIGHTED)) {
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
if (!(infoPtr->state & BUTTON_HIGHLIGHTED)) break;
|
break;
|
||||||
|
}
|
||||||
SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 );
|
SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 );
|
||||||
|
ReleaseCapture();
|
||||||
GetClientRect( hWnd, &rect );
|
GetClientRect( hWnd, &rect );
|
||||||
if (PtInRect( &rect, pt ))
|
if (PtInRect( &rect, pt ))
|
||||||
{
|
{
|
||||||
|
@ -181,6 +185,14 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_CAPTURECHANGED:
|
||||||
|
if (infoPtr->state & BUTTON_BTNPRESSED) {
|
||||||
|
infoPtr->state &= BUTTON_NSTATES;
|
||||||
|
if (infoPtr->state & BUTTON_HIGHLIGHTED)
|
||||||
|
SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
if (GetCapture() == hWnd)
|
if (GetCapture() == hWnd)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,11 @@ typedef struct
|
||||||
#define BUTTON_3STATE 0x02
|
#define BUTTON_3STATE 0x02
|
||||||
#define BUTTON_HIGHLIGHTED 0x04
|
#define BUTTON_HIGHLIGHTED 0x04
|
||||||
#define BUTTON_HASFOCUS 0x08
|
#define BUTTON_HASFOCUS 0x08
|
||||||
|
#define BUTTON_NSTATES 0x0F
|
||||||
|
/* undocumented flags */
|
||||||
|
#define BUTTON_BTNPRESSED 0x40
|
||||||
|
#define BUTTON_UNKNOWN2 0x20
|
||||||
|
#define BUTTON_UNKNOWN3 0x10
|
||||||
|
|
||||||
#define BUTTON_STATE(hwnd) ((WIN_FindWndPtr(hwnd))->wExtra[0])
|
#define BUTTON_STATE(hwnd) ((WIN_FindWndPtr(hwnd))->wExtra[0])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue