mirror of
https://github.com/fltk/fltk.git
synced 2026-05-30 21:25:30 +08:00
Partial fix: Unable to control position of first window on Windows with multiple screens (#1432)
Screen configurations mixing screens with distinct scale factors may need additional support.
This commit is contained in:
+4
-2
@@ -2229,8 +2229,10 @@ void Fl_WinAPI_Window_Driver::makeWindow() {
|
|||||||
int nscreen = 0;
|
int nscreen = 0;
|
||||||
if (w->parent()) {
|
if (w->parent()) {
|
||||||
nscreen = Fl_Window_Driver::driver(w->top_window())->screen_num();
|
nscreen = Fl_Window_Driver::driver(w->top_window())->screen_num();
|
||||||
} else if (Fl_Window_Driver::driver(w)->force_position() && Fl_WinAPI_Window_Driver::driver(w)->screen_num_ >= 0) {
|
} else if (Fl_Window_Driver::driver(w)->force_position()) {
|
||||||
nscreen = Fl_Window_Driver::driver(w)->screen_num();
|
if (Fl_WinAPI_Window_Driver::driver(w)->screen_num_ >= 0)
|
||||||
|
nscreen = Fl_WinAPI_Window_Driver::driver(w)->screen_num_;
|
||||||
|
else nscreen = Fl::screen_num(w->x(), w->y());
|
||||||
} else {
|
} else {
|
||||||
Fl_Window *hint = Fl::first_window();
|
Fl_Window *hint = Fl::first_window();
|
||||||
if (hint) {
|
if (hint) {
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ void Fl_WinAPI_Screen_Driver::init()
|
|||||||
// we do a run-time check for the required functions...
|
// we do a run-time check for the required functions...
|
||||||
HMODULE hMod = GetModuleHandle("USER32.DLL");
|
HMODULE hMod = GetModuleHandle("USER32.DLL");
|
||||||
|
|
||||||
if (hMod) {
|
if (hMod && num_screens < 0) {
|
||||||
// check that EnumDisplayMonitors is available
|
// check that EnumDisplayMonitors is available
|
||||||
fl_edm_func fl_edm = (fl_edm_func)GetProcAddress(hMod, "EnumDisplayMonitors");
|
fl_edm_func fl_edm = (fl_edm_func)GetProcAddress(hMod, "EnumDisplayMonitors");
|
||||||
|
|
||||||
@@ -125,6 +125,9 @@ void Fl_WinAPI_Screen_Driver::init()
|
|||||||
// NOTE: num_screens is incremented in screen_cb so we must first reset it here...
|
// NOTE: num_screens is incremented in screen_cb so we must first reset it here...
|
||||||
num_screens = 0;
|
num_screens = 0;
|
||||||
fl_edm(0, 0, screen_cb, (LPARAM)this);
|
fl_edm(0, 0, screen_cb, (LPARAM)this);
|
||||||
|
/*fprintf(stderr,"Screen coordinates as seen by Windows: num_screens=%d\n",num_screens);
|
||||||
|
for(int i=0; i<num_screens;i++)
|
||||||
|
fprintf(stderr,"screen_cb: n=%d left=%d right=%d top=%d bottom=%d\n",i,screens[i].left, screens[i].right,screens[i].top, screens[i].bottom);*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user