| 1147 |
} |
} |
| 1148 |
|
|
| 1149 |
|
|
|
// マルチモニターを考慮して、タスクバーを除いたディスプレイサイズを取得する。 |
|
|
static void get_desktop_size_by_multi_monitor(HWND hwnd, RECT *rect) |
|
|
{ |
|
|
HMONITOR hMon; |
|
|
MONITORINFO mi; |
|
|
HMODULE mod; |
|
|
|
|
|
// Windows95では未定義。 |
|
|
if (((mod = GetModuleHandle("user32.dll")) != NULL) && |
|
|
(GetProcAddress(mod,"MonitorFromWindow") != NULL)) { |
|
|
hMon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); |
|
|
|
|
|
ZeroMemory( &mi, sizeof( mi )); |
|
|
mi.cbSize = sizeof( mi ); |
|
|
GetMonitorInfo(hMon, &mi); |
|
|
*rect = mi.rcWork; // タスクバーを除いたディスプレイサイズ |
|
|
|
|
|
} else { |
|
|
// マルチモニタがサポートされていない場合 |
|
|
SystemParametersInfo(SPI_GETWORKAREA, 0, rect, 0); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
| 1150 |
// 有効なウィンドウを探し、現在位置を記憶させておく。 |
// 有効なウィンドウを探し、現在位置を記憶させておく。 |
| 1151 |
static void get_valid_window_and_memorize_rect(HWND myhwnd, HWND hwnd[], int *num, int style) |
static void get_valid_window_and_memorize_rect(HWND myhwnd, HWND hwnd[], int *num, int style) |
| 1152 |
{ |
{ |
| 1190 |
{ |
{ |
| 1191 |
int n; |
int n; |
| 1192 |
HWND hwnd[MAXNWIN]; |
HWND hwnd[MAXNWIN]; |
|
RECT rc; |
|
|
int width, i; |
|
| 1193 |
|
|
| 1194 |
get_valid_window_and_memorize_rect(myhwnd, hwnd, &n, WIN_SIDEBYSIDE); |
get_valid_window_and_memorize_rect(myhwnd, hwnd, &n, WIN_SIDEBYSIDE); |
|
#if 0 |
|
| 1195 |
TileWindows(NULL, MDITILE_VERTICAL, NULL, n, hwnd); |
TileWindows(NULL, MDITILE_VERTICAL, NULL, n, hwnd); |
|
#else |
|
|
get_desktop_size_by_multi_monitor(myhwnd, &rc); |
|
|
|
|
|
if (n <= 0) |
|
|
return; |
|
|
|
|
|
width = (rc.right - rc.left) / n; |
|
|
for (i = 0 ; i < n ; i++) { |
|
|
ShowWindow(hwnd[i], SW_RESTORE); |
|
|
SetWindowPos(hwnd[i], 0, |
|
|
width*i + rc.left, |
|
|
rc.top, |
|
|
width, |
|
|
rc.bottom - rc.top, |
|
|
SWP_NOOWNERZORDER | SWP_NOZORDER); |
|
|
} |
|
|
SetFocus(hwnd[0]); |
|
|
#endif |
|
| 1196 |
} |
} |
| 1197 |
|
|
| 1198 |
// ウィンドウを上下に並べて表示する(Show Windows Stacked) |
// ウィンドウを上下に並べて表示する(Show Windows Stacked) |
| 1200 |
{ |
{ |
| 1201 |
int n; |
int n; |
| 1202 |
HWND hwnd[MAXNWIN]; |
HWND hwnd[MAXNWIN]; |
|
RECT rc; |
|
|
int height, i; |
|
| 1203 |
|
|
| 1204 |
get_valid_window_and_memorize_rect(myhwnd, hwnd, &n, WIN_STACKED); |
get_valid_window_and_memorize_rect(myhwnd, hwnd, &n, WIN_STACKED); |
|
#if 0 |
|
| 1205 |
TileWindows(NULL, MDITILE_HORIZONTAL, NULL, n, hwnd); |
TileWindows(NULL, MDITILE_HORIZONTAL, NULL, n, hwnd); |
|
#else |
|
|
get_desktop_size_by_multi_monitor(myhwnd, &rc); |
|
|
|
|
|
if (n <= 0) |
|
|
return; |
|
|
|
|
|
height = (rc.bottom - rc.top) / n; |
|
|
for (i = 0 ; i < n ; i++) { |
|
|
ShowWindow(hwnd[i], SW_RESTORE); |
|
|
SetWindowPos(hwnd[i], 0, |
|
|
rc.left, |
|
|
rc.top + height*i, |
|
|
rc.right - rc.left, |
|
|
height, |
|
|
SWP_NOOWNERZORDER | SWP_NOZORDER); |
|
|
} |
|
|
SetFocus(hwnd[0]); |
|
|
#endif |
|
| 1206 |
} |
} |
| 1207 |
|
|
| 1208 |
// ウィンドウを重ねて表示する(Cascade) |
// ウィンドウを重ねて表示する(Cascade) |