[racket] Second display monitor issue

From: Kieron Hardy (kieron.hardy at gmail.com)
Date: Sat May 26 17:03:50 EDT 2012

Thanks Matthew for the fix - it seems to work fine - and wow done so
quickly too!

Is there a reason you have Windows enumerate the display monitors (with
EnumDisplayMonitors) and then ask Windows for details for each of those
monitors (with GetMonitorInfoW)? I am thinking that a more direct approach
would be to have some sort of in-range step through the monitors in turn
directly and collecting and processing the data that way. I am probably
missing something but the enumerate-first approach seems to be doing more
work than strictly necessary. Admittedly it's a terribly minor quibble,
it's only a tiny bit more work, what with the small number of monitors and
the small number of times this needs to be done, am just looking for
greater understanding.



On Sat, May 26, 2012 at 8:18 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:

> Thanks! I've pushed a change that should solve the problem; let me know
> if it still doesn't work.
> At Sat, 26 May 2012 05:45:52 -0600, Kieron Hardy wrote:
> > So it seems that for some reason (Older Dell laptop, ATI video, Windows 7
> > using generic drivers) the Windows system call to return the list of
> > monitors is returning them to Racket in a different order (primary
> display
> > monitor last) than expected (primary display monitor first).
> >
> > The code for get-all-screen-rects (in
> > collects/mred/private/wx/win32/frame.rkt) assumes monitor 0 is the
> primary
> > display monitor and is the first item in the list returned by
> > EnumDisplayDevices. My tests show that at least sometimes the primary
> > display monitor is not the first item in the list (also noted on SO at
> >
> http://stackoverflow.com/questions/2600255/how-can-i-retrieve-monitor-information
> > ).
> >
> > An alternative solution to getting monitor information would be to use
> > GetMonitorInfo passing a MONITORINFO or MONITORINFOEX structure for each
> of
> > the values in the range 0 .. GetSystemMetrics (SM_CMONITORS) and used in
> > Racket perhaps sorted by the monitor name returned in the szDevice field
> of
> > the MONITORINFOEX structure.
> >
> > If Racket needs to designate monitor 0 as the primary monitor then
> > get-all-screen-rects must enumerate the display monitors and then perform
> > some processing to sort them so that the primary monitor is returned as
> the
> > first item in the list.
> >
> > Cheers,
> >
> > Kieron.
> > ____________________
> >   Racket Users list:
> >   http://lists.racket-lang.org/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120526/01cd6a27/attachment.html>

Posted on the users mailing list.