I tried queue-callback this evening. Just what I needed! Thank you. On Monday, November 19, 2018 at 6:31:04 PM UTC-6, Alex Harsanyi wrote: > > The `send-message-to-window` has a corresponding `on-message` method which > needs to be implemented in the target control for it to do something useful > so it is not a general replacement for `PostMessage`, but it can be used > for cases where PostMessage is called with WM_USER, messages. > > The Windows `PostMessage` function is used for posting any message, and > windows GUI uses messages for everything. For example, to set the icon for > a toplevel window, one can send the WM_SETICON message as in: > > PostMessage(aWindow, WM_SETICON, ICON_SMALL, anIcon) > > The way to do hat in Racket is to call `set-icon`: > > (send a-frame set-icon an-icon #f 'small) > > However, the above call will have unexpected results if called from a > thread that is not the event handling thread: the correct way to make the > call from another thread is to use `queue-callback` like so: > > (queue-callback (lambda () (send a-frame set-icon an-icon #f 'small)) > > I am not sure which methods on GUI classes are safe to be called from a > non-event handling thread, but most of them are not, so I use > `queue-callback` for all such cases. The PostMessage call works from any > thread, not just the event handling thread, so this problem does exist in > the Win32 API. > > Alex. > > On Tuesday, November 20, 2018 at 6:32:14 AM UTC+8, Philip McGrath wrote: >> >> There is a send-message-to-window function ( >> http://docs.racket-lang.org/gui/Windowing_Functions.html#%28def._%28%28lib._mred%2Fmain..rkt%29._send-message-to-window%29%29), >> >> though I've never used it, and it sounds like it is different from what you >> describe. >> >> -Philip >> >> >> On Mon, Nov 19, 2018 at 5:22 PM Alex Harsanyi <[email protected]> >> wrote: >> >>> >>> >>> I think `queue-callback` is the closest "general" equivalent: it allows >>> invoking methods on GUI objects from outside the event handler thread. It >>> can also be used to schedule some work to be done outside a GUI widget's >>> callback invocation. >>> >>> If you actually want to post specific messages to a window, you will >>> have to map "PostMessage" via FFI and you can find the target window handle >>> using `get-client-handle`. This will only work on the windows platform. >>> >>> >>> https://docs.racket-lang.org/gui/Windowing_Functions.html?q=ququq-callback#%28def._%28%28lib._mred%2Fmain..rkt%29._queue-callback%29%29 >>> >>> Alex. >>> >>> On Monday, November 19, 2018 at 7:42:12 PM UTC+8, Jason Stewart wrote: >>>> >>>> In Windows, we have a SendMessage() function for dispatching a window >>>> event synchronously, and PostMessage() for asynchronously queuing an event >>>> to a specified window from any thread. >>>> >>>> Is there a way to do PostMessage() from Racket's GUI library? >>>> >>>> Eventspaces feels warm, but couldn't find what I was looking for in it: >>>> >>>> >>>> https://docs.racket-lang.org/gui/windowing-overview.html?q=sleep#%28part._eventspaceinfo%29 >>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Racket Users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >>
-- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

