| 1028 |
} |
} |
| 1029 |
} |
} |
| 1030 |
|
|
| 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 |
|
|
| 1134 |
int FAR PASCAL CommReadRawByte(PComVar cv, LPBYTE b) |
int FAR PASCAL CommReadRawByte(PComVar cv, LPBYTE b) |
| 1135 |
{ |
{ |
| 1136 |
if ( ! cv->Ready ) { |
if ( ! cv->Ready ) { |