[Ttssh2-commit] [5301] ウィンドウの「左右に並べて」、「上下に並べて」表示処理をAPIを使わずに、

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2013年 6月 2日 (日) 23:35:36 JST


Revision: 5301
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5301
Author:   yutakapon
Date:     2013-06-02 23:35:35 +0900 (Sun, 02 Jun 2013)
Log Message:
-----------
ウィンドウの「左右に並べて」、「上下に並べて」表示処理をAPIを使わずに、
自前で行うようにした。
これにより、Top Mostなウィンドウも並び替え対象となる。

「重ねて」表示の方は未。

Modified Paths:
--------------
    trunk/teraterm/ttpcmn/ttcmn.c

-------------- next part --------------
Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c	2013-06-02 12:19:43 UTC (rev 5300)
+++ trunk/teraterm/ttpcmn/ttcmn.c	2013-06-02 14:35:35 UTC (rev 5301)
@@ -1119,6 +1119,31 @@
 }
 
 
+// \x83}\x83\x8B\x83`\x83\x82\x83j\x83^\x81[\x82\xF0\x8Dl\x97\xB6\x82\xB5\x82āA\x83^\x83X\x83N\x83o\x81[\x82\xF0\x8F\x9C\x82\xA2\x82\xBD\x83f\x83B\x83X\x83v\x83\x8C\x83C\x83T\x83C\x83Y\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B
+static void get_desktop_size_by_multi_monitor(HWND hwnd, RECT *rect)
+{
+	HMONITOR hMon;
+	MONITORINFO mi;
+	HMODULE mod;
+
+	// Windows95\x82ł͖\xA2\x92\xE8\x8B`\x81B
+	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;  // \x83^\x83X\x83N\x83o\x81[\x82\xF0\x8F\x9C\x82\xA2\x82\xBD\x83f\x83B\x83X\x83v\x83\x8C\x83C\x83T\x83C\x83Y
+
+	} else {
+		// \x83}\x83\x8B\x83`\x83\x82\x83j\x83^\x82\xAA\x83T\x83|\x81[\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ
+		SystemParametersInfo(SPI_GETWORKAREA, 0, rect, 0);
+
+	}
+
+}
+
 // \x97L\x8C\xF8\x82ȃE\x83B\x83\x93\x83h\x83E\x82\xF0\x92T\x82\xB5\x81A\x8C\xBB\x8D݈ʒu\x82\xF0\x8BL\x89\xAF\x82\xB3\x82\xB9\x82Ă\xA8\x82\xAD\x81B
 static void get_valid_window_and_memorize_rect(HWND myhwnd, HWND hwnd[], int *num, int style)
 {
@@ -1162,9 +1187,30 @@
 {
 	int n;
 	HWND hwnd[MAXNWIN];
+	RECT rc;
+	int width, i;
 
 	get_valid_window_and_memorize_rect(myhwnd, hwnd, &n, WIN_SIDEBYSIDE);
+#if 0
 	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
 }
 
 // \x83E\x83B\x83\x93\x83h\x83E\x82\xF0\x8F㉺\x82ɕ\xC0\x82ׂĕ\\x8E\xA6\x82\xB7\x82\xE9(Show Windows Stacked)
@@ -1172,9 +1218,30 @@
 {
 	int n;
 	HWND hwnd[MAXNWIN];
+	RECT rc;
+	int height, i;
 
 	get_valid_window_and_memorize_rect(myhwnd, hwnd, &n, WIN_STACKED);
+#if 0
 	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
 }
 
 // \x83E\x83B\x83\x93\x83h\x83E\x82\xF0\x8Fd\x82˂ĕ\\x8E\xA6\x82\xB7\x82\xE9(Cascade)



Ttssh2-commit メーリングリストの案内
Back to archive index