Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
2faf2cf9
Commit
2faf2cf9
authored
Dec 10, 1999
by
Ulrich Weigand
Committed by
Alexandre Julliard
Dec 10, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Perform 16/32A/32W message mapping for posted messages.
parent
7b7e2d43
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
275 additions
and
201 deletions
+275
-201
menu.c
controls/menu.c
+1
-1
message.h
include/message.h
+3
-3
queue.h
include/queue.h
+8
-2
dialog.c
windows/dialog.c
+1
-1
message.c
windows/message.c
+254
-188
nonclient.c
windows/nonclient.c
+5
-5
queue.c
windows/queue.c
+3
-1
No files found.
controls/menu.c
View file @
2faf2cf9
...
...
@@ -2609,7 +2609,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
/* we have to keep the message in the queue until it's
* clear that menu loop is not over yet. */
if
(
!
MSG_InternalGetMessage
(
&
msg
,
msg
.
hwnd
,
mt
.
hOwnerWnd
,
if
(
!
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
msg
.
hwnd
,
mt
.
hOwnerWnd
,
MSGF_MENU
,
PM_NOREMOVE
,
!
enterIdleSent
,
&
enterIdleSent
))
break
;
TranslateMessage
(
&
msg
);
...
...
include/message.h
View file @
2faf2cf9
...
...
@@ -13,9 +13,9 @@
extern
DWORD
MSG_WineStartTicks
;
/* Ticks at Wine startup */
/* message.c */
extern
BOOL
MSG_InternalGetMessage
(
MSG
*
msg
,
HWND
hwnd
,
HWND
hwndOwner
,
WPARAM
code
,
WORD
flags
,
BOOL
sendIdle
,
BOOL
*
idleSent
);
extern
BOOL
MSG_InternalGetMessage
(
int
type
,
MSG
*
msg
,
HWND
hwnd
,
HWND
hwndOwner
,
WPARAM
code
,
WORD
flags
,
BOOL
sendIdle
,
BOOL
*
idleSent
);
/* timer.c */
extern
BOOL
TIMER_Init
(
void
);
...
...
include/queue.h
View file @
2faf2cf9
...
...
@@ -15,13 +15,19 @@
/* Message as stored in the queue (contains the extraInfo field) */
typedef
struct
tagQMSG
{
int
type
;
MSG
msg
;
DWORD
extraInfo
;
/* Only in 3.1 */
DWORD
extraInfo
;
/* Only in 3.1 */
struct
tagQMSG
*
nextMsg
;
struct
tagQMSG
*
prevMsg
;
}
QMSG
;
#define QMSG_WIN16 0
#define QMSG_WIN32A 1
#define QMSG_WIN32W 2
#define QMSG_HARDWARE 3
typedef
struct
tagSMSG
{
...
...
@@ -160,7 +166,7 @@ extern void QUEUE_DecTimerCount( HQUEUE16 hQueue );
extern
BOOL
QUEUE_CreateSysMsgQueue
(
int
size
);
extern
BOOL
QUEUE_DeleteMsgQueue
(
HQUEUE16
hQueue
);
extern
HTASK16
QUEUE_GetQueueTask
(
HQUEUE16
hQueue
);
extern
BOOL
QUEUE_AddMsg
(
HQUEUE16
hQueue
,
MSG
*
msg
,
DWORD
extraInfo
);
extern
BOOL
QUEUE_AddMsg
(
HQUEUE16
hQueue
,
int
type
,
MSG
*
msg
,
DWORD
extraInfo
);
extern
QMSG
*
QUEUE_FindMsg
(
MESSAGEQUEUE
*
msgQueue
,
HWND
hwnd
,
int
first
,
int
last
);
extern
void
QUEUE_RemoveMsg
(
MESSAGEQUEUE
*
msgQueue
,
QMSG
*
qmsg
);
...
...
windows/dialog.c
View file @
2faf2cf9
...
...
@@ -945,7 +945,7 @@ INT DIALOG_DoDialogBox( HWND hwnd, HWND owner )
{
EnableWindow
(
owner
,
FALSE
);
ShowWindow
(
hwnd
,
SW_SHOW
);
while
(
MSG_InternalGetMessage
(
&
msg
,
hwnd
,
owner
,
MSGF_DIALOGBOX
,
while
(
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
hwnd
,
owner
,
MSGF_DIALOGBOX
,
PM_REMOVE
,
!
(
wndPtr
->
dwStyle
&
DS_NOIDLEMSG
),
NULL
))
{
if
(
!
IsDialogMessageA
(
hwnd
,
&
msg
))
...
...
windows/message.c
View file @
2faf2cf9
...
...
@@ -986,10 +986,115 @@ ReplyMessageEnd:
}
/***********************************************************************
* MSG_ConvertMsg
*/
static
BOOL
MSG_ConvertMsg
(
MSG
*
msg
,
int
srcType
,
int
dstType
)
{
UINT16
msg16
;
MSGPARAM16
mp16
;
switch
(
MAKELONG
(
srcType
,
dstType
)
)
{
case
MAKELONG
(
QMSG_WIN16
,
QMSG_WIN16
):
case
MAKELONG
(
QMSG_WIN32A
,
QMSG_WIN32A
):
case
MAKELONG
(
QMSG_WIN32W
,
QMSG_WIN32W
):
return
TRUE
;
case
MAKELONG
(
QMSG_WIN16
,
QMSG_WIN32A
):
switch
(
WINPROC_MapMsg16To32A
(
msg
->
message
,
msg
->
wParam
,
&
msg
->
message
,
&
msg
->
wParam
,
&
msg
->
lParam
)
)
{
case
0
:
return
TRUE
;
case
1
:
/* Pointer messages were mapped --> need to free allocated memory and fail */
WINPROC_UnmapMsg16To32A
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
msg
->
lParam
,
0
);
default:
return
FALSE
;
}
case
MAKELONG
(
QMSG_WIN16
,
QMSG_WIN32W
):
switch
(
WINPROC_MapMsg16To32W
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
&
msg
->
message
,
&
msg
->
wParam
,
&
msg
->
lParam
)
)
{
case
0
:
return
TRUE
;
case
1
:
/* Pointer messages were mapped --> need to free allocated memory and fail */
WINPROC_UnmapMsg16To32W
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
msg
->
lParam
,
0
);
default:
return
FALSE
;
}
case
MAKELONG
(
QMSG_WIN32A
,
QMSG_WIN16
):
mp16
.
lParam
=
msg
->
lParam
;
switch
(
WINPROC_MapMsg32ATo16
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
&
msg16
,
&
mp16
.
wParam
,
&
mp16
.
lParam
)
)
{
case
0
:
msg
->
message
=
msg16
;
msg
->
wParam
=
mp16
.
wParam
;
msg
->
lParam
=
mp16
.
lParam
;
return
TRUE
;
case
1
:
/* Pointer messages were mapped --> need to free allocated memory and fail */
WINPROC_UnmapMsg32ATo16
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
msg
->
lParam
,
&
mp16
);
default:
return
FALSE
;
}
case
MAKELONG
(
QMSG_WIN32W
,
QMSG_WIN16
):
mp16
.
lParam
=
msg
->
lParam
;
switch
(
WINPROC_MapMsg32WTo16
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
&
msg16
,
&
mp16
.
wParam
,
&
mp16
.
lParam
)
)
{
case
0
:
msg
->
message
=
msg16
;
msg
->
wParam
=
mp16
.
wParam
;
msg
->
lParam
=
mp16
.
lParam
;
return
TRUE
;
case
1
:
/* Pointer messages were mapped --> need to free allocated memory and fail */
WINPROC_UnmapMsg32WTo16
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
msg
->
lParam
,
&
mp16
);
default:
return
FALSE
;
}
case
MAKELONG
(
QMSG_WIN32A
,
QMSG_WIN32W
):
switch
(
WINPROC_MapMsg32ATo32W
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
&
msg
->
lParam
)
)
{
case
0
:
return
TRUE
;
case
1
:
/* Pointer messages were mapped --> need to free allocated memory and fail */
WINPROC_UnmapMsg32ATo32W
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
msg
->
lParam
);
default:
return
FALSE
;
}
case
MAKELONG
(
QMSG_WIN32W
,
QMSG_WIN32A
):
switch
(
WINPROC_MapMsg32WTo32A
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
&
msg
->
lParam
)
)
{
case
0
:
return
TRUE
;
case
1
:
/* Pointer messages were mapped --> need to free allocated memory and fail */
WINPROC_UnmapMsg32WTo32A
(
msg
->
hwnd
,
msg
->
message
,
msg
->
wParam
,
msg
->
lParam
);
default:
return
FALSE
;
}
default:
FIXME
(
"Invalid message type(s): %d / %d
\n
"
,
srcType
,
dstType
);
return
FALSE
;
}
}
/***********************************************************************
* MSG_PeekMessage
*/
static
BOOL
MSG_PeekMessage
(
LPMSG
msg
,
HWND
hwnd
,
DWORD
first
,
DWORD
last
,
WORD
flags
,
BOOL
peek
)
static
BOOL
MSG_PeekMessage
(
int
type
,
LPMSG
msg
,
HWND
hwnd
,
DWORD
first
,
DWORD
last
,
WORD
flags
,
BOOL
peek
)
{
int
mask
;
MESSAGEQUEUE
*
msgQueue
;
...
...
@@ -1050,11 +1155,20 @@ static BOOL MSG_PeekMessage( LPMSG msg, HWND hwnd, DWORD first, DWORD last,
/* Now find a normal message */
retry:
if
(((
msgQueue
->
wakeBits
&
mask
)
&
QS_POSTMESSAGE
)
&&
((
qmsg
=
QUEUE_FindMsg
(
msgQueue
,
hwnd
,
first
,
last
))
!=
0
))
{
*
msg
=
qmsg
->
msg
;
/* Try to convert message to requested type */
MSG
tmpMsg
=
qmsg
->
msg
;
if
(
!
MSG_ConvertMsg
(
&
tmpMsg
,
qmsg
->
type
,
type
)
)
{
ERR
(
"Message of wrong type contains pointer parameters. Skipped!
\n
"
);
QUEUE_RemoveMsg
(
msgQueue
,
qmsg
);
goto
retry
;
}
*
msg
=
tmpMsg
;
msgQueue
->
GetMessageTimeVal
=
msg
->
time
;
CONV_POINT32TO16
(
&
msg
->
pt
,
&
pt16
);
msgQueue
->
GetMessagePosVal
=
*
(
DWORD
*
)
&
pt16
;
...
...
@@ -1181,14 +1295,14 @@ static BOOL MSG_PeekMessage( LPMSG msg, HWND hwnd, DWORD first, DWORD last,
* 'hwnd' must be the handle of the dialog or menu window.
* 'code' is the message filter value (MSGF_??? codes).
*/
BOOL
MSG_InternalGetMessage
(
MSG
*
msg
,
HWND
hwnd
,
HWND
hwndOwner
,
WPARAM
code
,
WORD
flags
,
BOOL
sendIdle
,
BOOL
*
idleSent
)
BOOL
MSG_InternalGetMessage
(
int
type
,
MSG
*
msg
,
HWND
hwnd
,
HWND
hwndOwner
,
WPARAM
code
,
WORD
flags
,
BOOL
sendIdle
,
BOOL
*
idleSent
)
{
for
(;;)
{
if
(
sendIdle
)
{
if
(
!
MSG_PeekMessage
(
msg
,
0
,
0
,
0
,
flags
,
TRUE
))
if
(
!
MSG_PeekMessage
(
type
,
msg
,
0
,
0
,
0
,
flags
,
TRUE
))
{
/* No message present -> send ENTERIDLE and wait */
if
(
IsWindow
(
hwndOwner
))
...
...
@@ -1199,11 +1313,11 @@ BOOL MSG_InternalGetMessage( MSG *msg, HWND hwnd, HWND hwndOwner,
if
(
idleSent
!=
NULL
)
*
idleSent
=
TRUE
;
}
MSG_PeekMessage
(
msg
,
0
,
0
,
0
,
flags
,
FALSE
);
MSG_PeekMessage
(
type
,
msg
,
0
,
0
,
0
,
flags
,
FALSE
);
}
}
else
/* Always wait for a message */
MSG_PeekMessage
(
msg
,
0
,
0
,
0
,
flags
,
FALSE
);
MSG_PeekMessage
(
type
,
msg
,
0
,
0
,
0
,
flags
,
FALSE
);
/* Call message filters */
...
...
@@ -1225,7 +1339,7 @@ BOOL MSG_InternalGetMessage( MSG *msg, HWND hwnd, HWND hwndOwner,
/* Message filtered -> remove it from the queue */
/* if it's still there. */
if
(
!
(
flags
&
PM_REMOVE
))
MSG_PeekMessage
(
msg
,
0
,
0
,
0
,
PM_REMOVE
,
TRUE
);
MSG_PeekMessage
(
type
,
msg
,
0
,
0
,
0
,
PM_REMOVE
,
TRUE
);
continue
;
}
}
...
...
@@ -1237,56 +1351,47 @@ BOOL MSG_InternalGetMessage( MSG *msg, HWND hwnd, HWND hwndOwner,
/***********************************************************************
*
PeekMessage16 (USER.10
9)
*
PeekMessage32_16 (USER.81
9)
*/
BOOL16
WINAPI
PeekMessage16
(
LPMSG16
lpmsg
,
HWND16
hwnd
,
UINT16
first
,
UINT16
last
,
UINT16
flags
)
BOOL16
WINAPI
PeekMessage32_16
(
LPMSG16_32
lpmsg16_32
,
HWND16
hwnd
,
UINT16
first
,
UINT16
last
,
UINT16
flags
,
BOOL16
wHaveParamHigh
)
{
MSG
msg32
;
BOOL16
ret
;
ret
=
PeekMessageA
(
&
msg32
,
hwnd
,
first
,
last
,
flags
);
STRUCT32_MSG32to16
(
&
msg32
,
lpmsg
);
BOOL
ret
;
MSG
msg
;
ret
=
MSG_PeekMessage
(
QMSG_WIN16
,
&
msg
,
hwnd
,
first
,
last
,
flags
,
TRUE
);
lpmsg16_32
->
msg
.
hwnd
=
msg
.
hwnd
;
lpmsg16_32
->
msg
.
message
=
msg
.
message
;
lpmsg16_32
->
msg
.
wParam
=
LOWORD
(
msg
.
wParam
);
lpmsg16_32
->
msg
.
lParam
=
msg
.
lParam
;
lpmsg16_32
->
msg
.
time
=
msg
.
time
;
lpmsg16_32
->
msg
.
pt
.
x
=
(
INT16
)
msg
.
pt
.
x
;
lpmsg16_32
->
msg
.
pt
.
y
=
(
INT16
)
msg
.
pt
.
y
;
if
(
wHaveParamHigh
)
lpmsg16_32
->
wParamHigh
=
HIWORD
(
msg
.
wParam
);
return
ret
;
}
/***********************************************************************
*
WIN16_PeekMessage32 (USER.81
9)
*
PeekMessage16 (USER.10
9)
*/
BOOL16
WINAPI
PeekMessage
32_16
(
LPMSG16_32
lpmsg16_32
,
HWND16
hwnd
,
UINT16
first
,
UINT16
last
,
UINT16
flags
,
BOOL16
wHaveParamHigh
)
BOOL16
WINAPI
PeekMessage
16
(
LPMSG16
lpmsg
,
HWND16
hwnd
,
UINT16
first
,
UINT16
last
,
UINT16
flags
)
{
if
(
wHaveParamHigh
==
FALSE
)
{
lpmsg16_32
->
wParamHigh
=
0
;
return
PeekMessage16
(
&
(
lpmsg16_32
->
msg
),
hwnd
,
first
,
last
,
flags
);
}
else
{
MSG
msg32
;
BOOL16
ret
;
ret
=
(
BOOL16
)
PeekMessageA
(
&
msg32
,
(
HWND
)
hwnd
,
(
UINT
)
first
,
(
UINT
)
last
,
(
UINT
)
flags
);
lpmsg16_32
->
msg
.
hwnd
=
msg32
.
hwnd
;
lpmsg16_32
->
msg
.
message
=
msg32
.
message
;
lpmsg16_32
->
msg
.
wParam
=
LOWORD
(
msg32
.
wParam
);
lpmsg16_32
->
msg
.
lParam
=
msg32
.
lParam
;
lpmsg16_32
->
msg
.
time
=
msg32
.
time
;
lpmsg16_32
->
msg
.
pt
.
x
=
(
INT16
)
msg32
.
pt
.
x
;
lpmsg16_32
->
msg
.
pt
.
y
=
(
INT16
)
msg32
.
pt
.
y
;
lpmsg16_32
->
wParamHigh
=
HIWORD
(
msg32
.
wParam
);
return
ret
;
}
return
PeekMessage32_16
(
(
LPMSG16_32
)
lpmsg
,
hwnd
,
first
,
last
,
flags
,
FALSE
);
}
/***********************************************************************
* PeekMessageA
*/
BOOL
WINAPI
PeekMessageA
(
LPMSG
lpmsg
,
HWND
hwnd
,
UINT
min
,
UINT
max
,
UINT
wRemoveMsg
)
UINT
min
,
UINT
max
,
UINT
wRemoveMsg
)
{
return
MSG_PeekMessage
(
lpmsg
,
hwnd
,
min
,
max
,
wRemoveMsg
,
TRUE
);
return
MSG_PeekMessage
(
QMSG_WIN32A
,
lpmsg
,
hwnd
,
min
,
max
,
wRemoveMsg
,
TRUE
);
}
/***********************************************************************
...
...
@@ -1324,77 +1429,59 @@ BOOL WINAPI PeekMessageW(
UINT
wRemoveMsg
/* removal flags */
)
{
BOOL
bRet
=
PeekMessageA
(
lpmsg
,
hwnd
,
min
,
max
,
wRemoveMsg
);
if
(
bRet
)
FIXME_
(
sendmsg
)(
"(%s) unicode<->ascii
\n
"
,
SPY_GetMsgName
(
lpmsg
->
message
));
return
bRet
;
return
MSG_PeekMessage
(
QMSG_WIN32W
,
lpmsg
,
hwnd
,
min
,
max
,
wRemoveMsg
,
TRUE
);
}
/***********************************************************************
*
GetMessage16 (USER.108
)
*
GetMessage32_16 (USER.820
)
*/
BOOL16
WINAPI
GetMessage16
(
SEGPTR
msg
,
HWND16
hwnd
,
UINT16
first
,
UINT16
last
)
BOOL16
WINAPI
GetMessage32_16
(
SEGPTR
msg16_32
,
HWND16
hWnd
,
UINT16
first
,
UINT16
last
,
BOOL16
wHaveParamHigh
)
{
BOOL
ret
;
MSG16
*
lpmsg
=
(
MSG16
*
)
PTR_SEG_TO_LIN
(
msg
);
MSG
msg32
;
ret
=
GetMessageA
(
&
msg32
,
hwnd
,
first
,
last
);
MSG32_16
*
lpmsg16_32
=
(
MSG32_16
*
)
PTR_SEG_TO_LIN
(
msg16_32
);
MSG
msg
;
STRUCT32_MSG32to16
(
&
msg32
,
lpmsg
);
MSG_PeekMessage
(
QMSG_WIN16
,
&
msg
,
hWnd
,
first
,
last
,
PM_REMOVE
,
FALSE
);
TRACE
(
"message %04x, hwnd %04x, filter(%04x - %04x)
\n
"
,
lpmsg
->
message
,
hwnd
,
first
,
last
);
lpmsg16_32
->
msg
.
hwnd
=
msg
.
hwnd
;
lpmsg16_32
->
msg
.
message
=
msg
.
message
;
lpmsg16_32
->
msg
.
wParam
=
LOWORD
(
msg
.
wParam
);
lpmsg16_32
->
msg
.
lParam
=
msg
.
lParam
;
lpmsg16_32
->
msg
.
time
=
msg
.
time
;
lpmsg16_32
->
msg
.
pt
.
x
=
(
INT16
)
msg
.
pt
.
x
;
lpmsg16_32
->
msg
.
pt
.
y
=
(
INT16
)
msg
.
pt
.
y
;
return
ret
;
if
(
wHaveParamHigh
)
lpmsg16_32
->
wParamHigh
=
HIWORD
(
msg
.
wParam
);
TRACE
(
"message %04x, hwnd %04x, filter(%04x - %04x)
\n
"
,
lpmsg16_32
->
msg
.
message
,
hWnd
,
first
,
last
);
HOOK_CallHooks16
(
WH_GETMESSAGE
,
HC_ACTION
,
0
,
(
LPARAM
)
msg16_32
);
return
lpmsg16_32
->
msg
.
message
!=
WM_QUIT
;
}
/***********************************************************************
*
WIN16_GetMessage32 (USER.820
)
*
GetMessage16 (USER.108
)
*/
BOOL16
WINAPI
GetMessage32_16
(
SEGPTR
msg16_32
,
HWND16
hWnd
,
UINT16
first
,
UINT16
last
,
BOOL16
wHaveParamHigh
)
BOOL16
WINAPI
GetMessage16
(
SEGPTR
msg
,
HWND16
hwnd
,
UINT16
first
,
UINT16
last
)
{
MSG32_16
*
lpmsg16_32
=
(
MSG32_16
*
)
PTR_SEG_TO_LIN
(
msg16_32
);
if
(
wHaveParamHigh
==
FALSE
)
/* normal GetMessage16 call */
{
lpmsg16_32
->
wParamHigh
=
0
;
/* you never know... */
/* WARNING: msg16_32->msg has to be the first variable in the struct */
return
GetMessage16
(
msg16_32
,
hWnd
,
first
,
last
);
}
else
{
MSG
msg32
;
BOOL16
ret
;
ret
=
(
BOOL16
)
GetMessageA
(
&
msg32
,
hWnd
,
first
,
last
);
lpmsg16_32
->
msg
.
hwnd
=
msg32
.
hwnd
;
lpmsg16_32
->
msg
.
message
=
msg32
.
message
;
lpmsg16_32
->
msg
.
wParam
=
LOWORD
(
msg32
.
wParam
);
lpmsg16_32
->
msg
.
lParam
=
msg32
.
lParam
;
lpmsg16_32
->
msg
.
time
=
msg32
.
time
;
lpmsg16_32
->
msg
.
pt
.
x
=
(
INT16
)
msg32
.
pt
.
x
;
lpmsg16_32
->
msg
.
pt
.
y
=
(
INT16
)
msg32
.
pt
.
y
;
lpmsg16_32
->
wParamHigh
=
HIWORD
(
msg32
.
wParam
);
return
ret
;
}
return
GetMessage32_16
(
msg
,
hwnd
,
first
,
last
,
FALSE
);
}
/***********************************************************************
* GetMessage
32
A (USER32.270)
* GetMessageA (USER32.270)
*/
BOOL
WINAPI
GetMessageA
(
MSG
*
lpmsg
,
HWND
hwnd
,
UINT
min
,
UINT
max
)
BOOL
WINAPI
GetMessageA
(
MSG
*
lpmsg
,
HWND
hwnd
,
UINT
min
,
UINT
max
)
{
MSG_PeekMessage
(
lpmsg
,
hwnd
,
min
,
max
,
PM_REMOVE
,
FALSE
);
MSG_PeekMessage
(
QMSG_WIN32A
,
lpmsg
,
hwnd
,
min
,
max
,
PM_REMOVE
,
FALSE
);
TRACE
(
"message %04x, hwnd %04x, filter(%04x - %04x)
\n
"
,
lpmsg
->
message
,
hwnd
,
min
,
max
);
TRACE
(
"message %04x, hwnd %04x, filter(%04x - %04x)
\n
"
,
lpmsg
->
message
,
hwnd
,
min
,
max
);
HOOK_CallHooksA
(
WH_GETMESSAGE
,
HC_ACTION
,
0
,
(
LPARAM
)
lpmsg
);
return
(
lpmsg
->
message
!=
WM_QUIT
);
return
lpmsg
->
message
!=
WM_QUIT
;
}
/***********************************************************************
...
...
@@ -1431,34 +1518,24 @@ BOOL WINAPI GetMessageW(
UINT
max
/* maximum message to receive */
)
{
BOOL
bRet
=
GetMessageA
(
lpmsg
,
hwnd
,
min
,
max
);
if
(
bRet
)
FIXME_
(
sendmsg
)(
"(%s) unicode<->ascii
\n
"
,
SPY_GetMsgName
(
lpmsg
->
message
));
return
bRet
;
MSG_PeekMessage
(
QMSG_WIN32W
,
lpmsg
,
hwnd
,
min
,
max
,
PM_REMOVE
,
FALSE
);
TRACE
(
"message %04x, hwnd %04x, filter(%04x - %04x)
\n
"
,
lpmsg
->
message
,
hwnd
,
min
,
max
);
HOOK_CallHooksW
(
WH_GETMESSAGE
,
HC_ACTION
,
0
,
(
LPARAM
)
lpmsg
);
return
lpmsg
->
message
!=
WM_QUIT
;
}
/***********************************************************************
*
PostMessage16 (USER.110)
*
MSG_PostToQueue
*/
BOOL16
WINAPI
PostMessage16
(
HWND16
hwnd
,
UINT16
message
,
WPARAM16
wParam
,
LPARAM
lParam
)
static
BOOL
MSG_PostToQueue
(
HQUEUE16
hQueue
,
int
type
,
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
return
(
BOOL16
)
PostMessageA
(
hwnd
,
message
,
wParam
,
lParam
);
}
MSG
msg
;
/***********************************************************************
* PostMessage32A (USER32.419)
*/
BOOL
WINAPI
PostMessageA
(
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
MSG
msg
;
WND
*
wndPtr
;
BOOL
retvalue
;
if
(
!
hQueue
)
return
FALSE
;
msg
.
hwnd
=
hwnd
;
msg
.
message
=
message
;
...
...
@@ -1468,6 +1545,18 @@ BOOL WINAPI PostMessageA( HWND hwnd, UINT message, WPARAM wParam,
msg
.
pt
.
x
=
0
;
msg
.
pt
.
y
=
0
;
return
QUEUE_AddMsg
(
hQueue
,
type
,
&
msg
,
0
);
}
/***********************************************************************
* MSG_PostMessage
*/
static
BOOL
MSG_PostMessage
(
int
type
,
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
HQUEUE16
hQueue
;
WND
*
wndPtr
;
if
(
hwnd
==
HWND_BROADCAST
)
{
WND
*
pDesktop
=
WIN_GetDesktop
();
...
...
@@ -1479,7 +1568,8 @@ BOOL WINAPI PostMessageA( HWND hwnd, UINT message, WPARAM wParam,
{
TRACE
(
"BROADCAST Message to hWnd=%04x m=%04X w=%04X l=%08lX !
\n
"
,
wndPtr
->
hwndSelf
,
message
,
wParam
,
lParam
);
PostMessageA
(
wndPtr
->
hwndSelf
,
message
,
wParam
,
lParam
);
MSG_PostToQueue
(
wndPtr
->
hmemTaskQ
,
type
,
wndPtr
->
hwndSelf
,
message
,
wParam
,
lParam
);
}
}
WIN_ReleaseDesktop
();
...
...
@@ -1488,50 +1578,70 @@ BOOL WINAPI PostMessageA( HWND hwnd, UINT message, WPARAM wParam,
}
wndPtr
=
WIN_FindWndPtr
(
hwnd
);
if
(
!
wndPtr
||
!
wndPtr
->
hmemTaskQ
)
{
retvalue
=
FALSE
;
goto
END
;
}
retvalue
=
QUEUE_AddMsg
(
wndPtr
->
hmemTaskQ
,
&
msg
,
0
);
END:
hQueue
=
wndPtr
?
wndPtr
->
hmemTaskQ
:
0
;
WIN_ReleaseWndPtr
(
wndPtr
);
return
retvalue
;
return
MSG_PostToQueue
(
hQueue
,
type
,
hwnd
,
message
,
wParam
,
lParam
);
}
/***********************************************************************
* PostMessage16 (USER.110)
*/
BOOL16
WINAPI
PostMessage16
(
HWND16
hwnd
,
UINT16
message
,
WPARAM16
wParam
,
LPARAM
lParam
)
{
return
(
BOOL16
)
MSG_PostMessage
(
QMSG_WIN16
,
hwnd
,
message
,
wParam
,
lParam
);
}
/***********************************************************************
* PostMessage
32W (USER32.420
)
* PostMessage
A (USER32.419
)
*/
BOOL
WINAPI
PostMessage
W
(
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
BOOL
WINAPI
PostMessage
A
(
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
FIXME_
(
sendmsg
)(
"(%s) unicode<->ascii
\n
"
,
SPY_GetMsgName
(
message
));
return
PostMessageA
(
hwnd
,
message
,
wParam
,
lParam
);
return
MSG_PostMessage
(
QMSG_WIN32A
,
hwnd
,
message
,
wParam
,
lParam
);
}
/***********************************************************************
* PostMessageW (USER32.420)
*/
BOOL
WINAPI
PostMessageW
(
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
return
MSG_PostMessage
(
QMSG_WIN32W
,
hwnd
,
message
,
wParam
,
lParam
);
}
/***********************************************************************
* PostAppMessage16 (USER.116)
*/
BOOL16
WINAPI
PostAppMessage16
(
HTASK16
hTask
,
UINT16
message
,
WPARAM16
wParam
,
LPARAM
lParam
)
BOOL16
WINAPI
PostAppMessage16
(
HTASK16
hTask
,
UINT16
message
,
WPARAM16
wParam
,
LPARAM
lParam
)
{
MSG
msg
;
return
MSG_PostToQueue
(
GetTaskQueue16
(
hTask
),
QMSG_WIN16
,
0
,
message
,
wParam
,
lParam
);
}
if
(
GetTaskQueue16
(
hTask
)
==
0
)
return
FALSE
;
msg
.
hwnd
=
0
;
msg
.
message
=
message
;
msg
.
wParam
=
wParam
;
msg
.
lParam
=
lParam
;
msg
.
time
=
GetTickCount
();
msg
.
pt
.
x
=
0
;
msg
.
pt
.
y
=
0
;
/**********************************************************************
* PostThreadMessageA (USER32.422)
*/
BOOL
WINAPI
PostThreadMessageA
(
DWORD
idThread
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
return
MSG_PostToQueue
(
GetThreadQueue16
(
idThread
),
QMSG_WIN32A
,
0
,
message
,
wParam
,
lParam
);
}
return
QUEUE_AddMsg
(
GetTaskQueue16
(
hTask
),
&
msg
,
0
);
/**********************************************************************
* PostThreadMessageW (USER32.423)
*/
BOOL
WINAPI
PostThreadMessageW
(
DWORD
idThread
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
return
MSG_PostToQueue
(
GetThreadQueue16
(
idThread
),
QMSG_WIN32W
,
0
,
message
,
wParam
,
lParam
);
}
/************************************************************************
* MSG_CallWndProcHook32
*/
...
...
@@ -1682,50 +1792,6 @@ LRESULT WINAPI SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam,
}
/**********************************************************************
* PostThreadMessage32A (USER32.422)
*
* BUGS
*
* Thread-local message queues are not supported.
*
*/
BOOL
WINAPI
PostThreadMessageA
(
DWORD
idThread
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
MSG
msg
;
HQUEUE16
hQueue
;
if
((
hQueue
=
GetThreadQueue16
(
idThread
))
==
0
)
return
FALSE
;
msg
.
hwnd
=
0
;
msg
.
message
=
message
;
msg
.
wParam
=
wParam
;
msg
.
lParam
=
lParam
;
msg
.
time
=
GetTickCount
();
msg
.
pt
.
x
=
0
;
msg
.
pt
.
y
=
0
;
return
QUEUE_AddMsg
(
hQueue
,
&
msg
,
0
);
}
/**********************************************************************
* PostThreadMessage32W (USER32.423)
*
* BUGS
*
* Thread-local message queues are not supported.
*
*/
BOOL
WINAPI
PostThreadMessageW
(
DWORD
idThread
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
FIXME_
(
sendmsg
)(
"(%s) unicode<->ascii
\n
"
,
SPY_GetMsgName
(
message
));
return
PostThreadMessageA
(
idThread
,
message
,
wParam
,
lParam
);
}
/***********************************************************************
* SendMessage32A (USER32.454)
*/
...
...
windows/nonclient.c
View file @
2faf2cf9
...
...
@@ -2045,7 +2045,7 @@ static LONG NC_StartSizeMove( WND* wndPtr, WPARAM16 wParam,
{
while
(
!
hittest
)
{
MSG_InternalGetMessage
(
&
msg
,
0
,
0
,
MSGF_SIZE
,
PM_REMOVE
,
FALSE
,
NULL
);
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
0
,
0
,
MSGF_SIZE
,
PM_REMOVE
,
FALSE
,
NULL
);
switch
(
msg
.
message
)
{
case
WM_MOUSEMOVE
:
...
...
@@ -2206,7 +2206,7 @@ static void NC_DoSizeMove( HWND hwnd, WORD wParam )
{
int
dx
=
0
,
dy
=
0
;
MSG_InternalGetMessage
(
&
msg
,
0
,
0
,
MSGF_SIZE
,
PM_REMOVE
,
FALSE
,
NULL
);
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
0
,
0
,
MSGF_SIZE
,
PM_REMOVE
,
FALSE
,
NULL
);
/* Exit on button-up, Return, or Esc */
if
((
msg
.
message
==
WM_LBUTTONUP
)
||
...
...
@@ -2395,7 +2395,7 @@ static void NC_TrackMinMaxBox95( HWND hwnd, WORD wParam )
do
{
BOOL
oldstate
=
pressed
;
MSG_InternalGetMessage
(
&
msg
,
0
,
0
,
0
,
PM_REMOVE
,
FALSE
,
NULL
);
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
0
,
0
,
0
,
PM_REMOVE
,
FALSE
,
NULL
);
CONV_POINT32TO16
(
&
msg
.
pt
,
&
pt16
);
pressed
=
(
NC_HandleNCHitTest
(
hwnd
,
pt16
)
==
wParam
);
...
...
@@ -2445,7 +2445,7 @@ static void NC_TrackMinMaxBox( HWND hwnd, WORD wParam )
do
{
BOOL
oldstate
=
pressed
;
MSG_InternalGetMessage
(
&
msg
,
0
,
0
,
0
,
PM_REMOVE
,
FALSE
,
NULL
);
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
0
,
0
,
0
,
PM_REMOVE
,
FALSE
,
NULL
);
CONV_POINT32TO16
(
&
msg
.
pt
,
&
pt16
);
pressed
=
(
NC_HandleNCHitTest
(
hwnd
,
pt16
)
==
wParam
);
...
...
@@ -2501,7 +2501,7 @@ NC_TrackCloseButton95 (HWND hwnd, WORD wParam)
do
{
BOOL
oldstate
=
pressed
;
MSG_InternalGetMessage
(
&
msg
,
0
,
0
,
0
,
PM_REMOVE
,
FALSE
,
NULL
);
MSG_InternalGetMessage
(
QMSG_WIN32A
,
&
msg
,
0
,
0
,
0
,
PM_REMOVE
,
FALSE
,
NULL
);
CONV_POINT32TO16
(
&
msg
.
pt
,
&
pt16
);
pressed
=
(
NC_HandleNCHitTest
(
hwnd
,
pt16
)
==
wParam
);
...
...
windows/queue.c
View file @
2faf2cf9
...
...
@@ -973,7 +973,7 @@ void QUEUE_ReceiveMessage( MESSAGEQUEUE *queue )
*
* Add a message to the queue. Return FALSE if queue is full.
*/
BOOL
QUEUE_AddMsg
(
HQUEUE16
hQueue
,
MSG
*
msg
,
DWORD
extraInfo
)
BOOL
QUEUE_AddMsg
(
HQUEUE16
hQueue
,
int
type
,
MSG
*
msg
,
DWORD
extraInfo
)
{
MESSAGEQUEUE
*
msgQueue
;
QMSG
*
qmsg
;
...
...
@@ -991,6 +991,7 @@ BOOL QUEUE_AddMsg( HQUEUE16 hQueue, MSG *msg, DWORD extraInfo )
EnterCriticalSection
(
&
msgQueue
->
cSection
);
/* Store message */
qmsg
->
type
=
type
;
qmsg
->
msg
=
*
msg
;
qmsg
->
extraInfo
=
extraInfo
;
...
...
@@ -1228,6 +1229,7 @@ void hardware_event( UINT message, WPARAM wParam, LPARAM lParam,
msg
->
pt
.
x
=
xPos
;
msg
->
pt
.
y
=
yPos
;
qmsg
->
extraInfo
=
extraInfo
;
qmsg
->
type
=
QMSG_HARDWARE
;
LeaveCriticalSection
(
&
sysMsgQueue
->
cSection
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment