EnumDisplayMonitors() is the way I see to get an HMONITOR, which is needed for GetMonitorInfo. Is there another way?
At Sat, 26 May 2012 15:03:50 -0600, Kieron Hardy wrote: > 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. > > Cheers, > > Kieron. > > On Sat, May 26, 2012 at 8:18 AM, Matthew Flatt <mfl...@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 > > ____________________ Racket Users list: http://lists.racket-lang.org/users