• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision5222 (tree)
Time2013-05-02 00:55:25
Author(del#24082)

Log Message

Tera Termのウィンドウ群を「並べて表示」する関数を追加した。
関数自体はまだどこからも呼んでいないので、実際にはまだ動かない。

Change Summary

Incremental Difference

--- trunk/teraterm/ttpcmn/ttcmn.c (revision 5221)
+++ trunk/teraterm/ttpcmn/ttcmn.c (revision 5222)
@@ -1028,6 +1028,109 @@
10281028 }
10291029 }
10301030
1031+// マルチモニターを考慮して、タスクバーを除いたディスプレイサイズを取得する。
1032+static void get_desktop_size_by_multi_monitor(HWND hwnd, RECT *rect)
1033+{
1034+ HMONITOR hMon;
1035+ MONITORINFO mi;
1036+
1037+ // FIXME: Windows95では未定義の模様。
1038+ hMon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
1039+
1040+ ZeroMemory( &mi, sizeof( mi ));
1041+ mi.cbSize = sizeof( mi );
1042+ GetMonitorInfo(hMon, &mi);
1043+ *rect = mi.rcWork; // タスクバーを除いたディスプレイサイズ
1044+}
1045+
1046+// ウィンドウを左右に並べて表示する(Show Windows Side by Side)
1047+void FAR PASCAL ShowAllWinSidebySide(HWND myhwnd)
1048+{
1049+ int i, n, width;
1050+ HWND hwnd[MAXNWIN];
1051+ RECT rc;
1052+
1053+ get_desktop_size_by_multi_monitor(myhwnd, &rc);
1054+
1055+ n = 0;
1056+ for (i = 0 ; i < pm->NWin ; i++) {
1057+ if (IsIconic(pm->WinList[i]) || !IsWindowVisible(pm->WinList[i]))
1058+ continue;
1059+
1060+ if (pm->WinList[i] == myhwnd) {
1061+ hwnd[n] = hwnd[0];
1062+ hwnd[0] = myhwnd;
1063+ } else {
1064+ hwnd[n] = pm->WinList[i];
1065+ }
1066+ n++;
1067+ }
1068+ if (n <= 1) // 有効なウィンドウが2つ以上の場合に限る
1069+ goto error;
1070+
1071+ width = (rc.right - rc.left) / n;
1072+ for (i = 0 ; i < n ; i++) {
1073+ ShowWindow(hwnd[i], SW_RESTORE);
1074+ SetWindowPos(hwnd[i], 0,
1075+ width*i + rc.left,
1076+ rc.top,
1077+ width,
1078+ rc.bottom - rc.top,
1079+ SWP_NOOWNERZORDER | SWP_NOZORDER);
1080+ }
1081+ SetFocus(hwnd[0]);
1082+
1083+error:
1084+ return;
1085+}
1086+
1087+// ウィンドウを上下に並べて表示する(Show Windows Stacked)
1088+void FAR PASCAL ShowAllWinStacked(HWND myhwnd)
1089+{
1090+ int i, n, height;
1091+ HWND hwnd[MAXNWIN];
1092+ RECT rc;
1093+
1094+ get_desktop_size_by_multi_monitor(myhwnd, &rc);
1095+
1096+ n = 0;
1097+ for (i = 0 ; i < pm->NWin ; i++) {
1098+ if (IsIconic(pm->WinList[i]) || !IsWindowVisible(pm->WinList[i]))
1099+ continue;
1100+
1101+ if (pm->WinList[i] == myhwnd) {
1102+ hwnd[n] = hwnd[0];
1103+ hwnd[0] = myhwnd;
1104+ } else {
1105+ hwnd[n] = pm->WinList[i];
1106+ }
1107+ n++;
1108+ }
1109+ if (n <= 1) // 有効なウィンドウが2つ以上の場合に限る
1110+ goto error;
1111+
1112+ height = (rc.bottom - rc.top) / n;
1113+ for (i = 0 ; i < n ; i++) {
1114+ ShowWindow(hwnd[i], SW_RESTORE);
1115+ SetWindowPos(hwnd[i], 0,
1116+ rc.left,
1117+ rc.top + height*i,
1118+ rc.right - rc.left,
1119+ height,
1120+ SWP_NOOWNERZORDER | SWP_NOZORDER);
1121+ }
1122+ SetFocus(hwnd[0]);
1123+
1124+error:
1125+ return;
1126+}
1127+
1128+// ウィンドウを重ねて表示する(Cascade)
1129+void FAR PASCAL ShowAllWinCascade(HWND myhwnd)
1130+{
1131+ // TODO:
1132+}
1133+
10311134 int FAR PASCAL CommReadRawByte(PComVar cv, LPBYTE b)
10321135 {
10331136 if ( ! cv->Ready ) {
--- trunk/teraterm/common/ttcommon.h (revision 5221)
+++ trunk/teraterm/common/ttcommon.h (revision 5222)
@@ -35,6 +35,9 @@
3535 void FAR PASCAL SelectNextWin(HWND HWin, int Next, BOOL SkipIconic);
3636 HWND FAR PASCAL GetNthWin(int n);
3737 void FAR PASCAL ShowAllWin(int stat);
38+void FAR PASCAL ShowAllWinSidebySide(HWND);
39+void FAR PASCAL ShowAllWinStacked(HWND);
40+void FAR PASCAL ShowAllWinCascade(HWND);
3841
3942 int FAR PASCAL CommReadRawByte(PComVar cv, LPBYTE b);
4043 int FAR PASCAL CommRead1Byte(PComVar cv, LPBYTE b);
Show on old repository browser