Changeset 551 for trunk/dll/winlist.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/winlist.c
r331 r551 33 33 #pragma alloc_text(WINLIST,WindowList,WinListDlgProc) 34 34 35 MRESULT EXPENTRY WinListDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)35 MRESULT EXPENTRY WinListDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 36 36 { 37 SHORT sSelect; 38 39 static HWND Me = (HWND)0; 40 41 switch(msg) { 42 case WM_INITDLG: 43 if (Me || !mp2) { 44 if (Me) 45 PostMsg(Me,UM_FOCUSME,MPVOID,MPVOID); 46 WinDismissDlg(hwnd,0); 47 } 48 else { 49 50 HENUM henum; 51 HWND hwndChild; 52 USHORT id; 53 CHAR wtext[CCHMAXPATH + 1]; 54 55 Me = hwnd; 56 WinSetWindowULong(hwnd,QWL_USER,*(HWND *)mp2); 57 henum = WinBeginEnumWindows(*(HWND *)mp2); 58 while((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) { 59 id = WinQueryWindowUShort(hwndChild,QWS_ID); 60 if(!id) 61 continue; 62 *wtext = ' '; 63 WinQueryWindowText(hwndChild,CCHMAXPATH,wtext + 1); 64 wtext[CCHMAXPATH] = 0; 65 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,WLIST_LISTBOX,LM_INSERTITEM, 66 MPFROM2SHORT(LIT_SORTASCENDING,0), 67 MPFROMP(wtext)); 68 if(sSelect >= 0) 69 WinSendDlgItemMsg(hwnd,WLIST_LISTBOX,LM_SETITEMHANDLE, 70 MPFROM2SHORT(sSelect,0), 71 MPFROMLONG((ULONG)hwndChild)); 72 } 73 WinEndEnumWindows(henum); 74 75 { 76 PSWBLOCK pswb; 77 ULONG ulSize,ulcEntries; 78 register INT i,y; 79 80 /* Get the switch list information */ 81 ulcEntries = WinQuerySwitchList(0,NULL,0); 82 ulSize = sizeof(SWBLOCK) + sizeof(HSWITCH) + (ulcEntries + 4L) * 83 (LONG)sizeof(SWENTRY); 84 /* Allocate memory for list */ 85 pswb = xmalloc((unsigned)ulSize,pszSrcFile,__LINE__); 86 if (pswb) { 87 /* Put the info in the list */ 88 ulcEntries = WinQuerySwitchList(0,pswb, 89 ulSize - sizeof(SWENTRY)); 90 /* do the dirty deed */ 91 y = 0; 92 for(i = 0;i < pswb->cswentry;i++) { 93 if(pswb->aswentry[i].swctl.uchVisibility == SWL_VISIBLE && 94 pswb->aswentry[i].swctl.fbJump == SWL_JUMPABLE && 95 ((pswb->aswentry[i].swctl.idProcess == mypid && 96 (strnicmp(pswb->aswentry[i].swctl.szSwtitle, 97 "FM/2",4))) || 98 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"AV/2",4) || 99 !stricmp(pswb->aswentry[i].swctl.szSwtitle,"File Manager/2") || 100 !stricmp(pswb->aswentry[i].swctl.szSwtitle,"Collector") || 101 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"VTree",5) || 102 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"VDir",4) || 103 (!strnicmp(pswb->aswentry[i].swctl.szSwtitle,FM2Str,4) && 104 strnicmp(pswb->aswentry[i].swctl.szSwtitle, 105 "FM/2",4)))) { 106 *wtext = '*'; 107 wtext[1] = 0; 108 strcat(wtext,pswb->aswentry[i].swctl.szSwtitle); 109 wtext[CCHMAXPATH] = 0; 110 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 111 WLIST_LISTBOX, 112 LM_INSERTITEM, 113 MPFROM2SHORT(LIT_SORTASCENDING,0), 114 MPFROMP(wtext)); 115 if(sSelect >= 0) 116 WinSendDlgItemMsg(hwnd, 117 WLIST_LISTBOX, 118 LM_SETITEMHANDLE, 119 MPFROM2SHORT(sSelect,0), 120 MPFROMLONG(pswb->aswentry[i].swctl.hwnd)); 121 } 122 y++; 123 } 124 free(pswb); 125 DosPostEventSem(CompactSem); 126 } 127 } 128 129 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 130 WLIST_LISTBOX, 131 LM_QUERYITEMCOUNT, 132 MPVOID, 133 MPVOID); 134 if(sSelect <= 0) 135 WinDismissDlg(hwnd,0); 136 } 137 PostMsg(hwnd, 138 UM_FOCUSME, 139 MPVOID, 140 MPVOID); 141 break; 142 143 case UM_FOCUSME: 144 PostMsg(hwnd, 145 UM_SETUP, 146 MPVOID, 147 MPVOID); 148 return 0; 149 150 case UM_SETUP: 151 PostMsg(hwnd, 152 UM_SETUP2, 153 MPVOID, 154 MPVOID); 155 return 0; 156 157 case UM_SETUP2: 158 PostMsg(hwnd, 159 UM_SETUP3, 160 MPVOID, 161 MPVOID); 162 return 0; 163 164 case UM_SETUP3: 165 WinSetActiveWindow(HWND_DESKTOP,hwnd); 166 return 0; 167 168 case WM_CONTROL: 169 switch(SHORT1FROMMP(mp1)) { 170 case WLIST_LISTBOX: 171 switch(SHORT2FROMMP(mp1)) { 172 case LN_ENTER: 173 PostMsg(hwnd, 174 WM_COMMAND, 175 MPFROM2SHORT(DID_OK,0), 176 MPVOID); 177 break; 178 } 179 break; 180 } 181 return 0; 182 183 case WM_COMMAND: 184 switch(SHORT1FROMMP(mp1)) { 185 case WLIST_MINIMIZE: 186 case WLIST_CLOSE: 187 case DID_OK: 188 { 189 HWND hwndActive = (HWND)WinQueryWindowULong(hwnd,QWL_USER); 190 191 hwndActive = WinQueryActiveWindow(hwndActive); 192 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 193 WLIST_LISTBOX, 194 LM_QUERYSELECTION, 195 MPFROM2SHORT(LIT_FIRST,0), 196 MPVOID); 197 while(sSelect >= 0) { 198 199 HWND HwndC; 200 201 HwndC = (HWND)WinSendDlgItemMsg(hwnd, 202 WLIST_LISTBOX, 203 LM_QUERYITEMHANDLE, 204 MPFROM2SHORT(sSelect,0), 205 MPVOID); 206 if(HwndC) { 207 208 SWP swp; 209 210 WinQueryWindowPos(HwndC,&swp); 211 if(SHORT1FROMMP(mp1) == DID_OK) { 212 if(!(swp.fl & SWP_MINIMIZE) && 213 (swp.cx == 0 || swp.cy == 0)) { 214 GetNextWindowPos((HWND)WinQueryWindowULong(hwnd,QWL_USER),&swp, 215 NULL,NULL); 216 WinSetWindowPos(HwndC,HWND_TOP,swp.x,swp.y,swp.cx,swp.cy, 217 SWP_MOVE | SWP_SIZE | SWP_SHOW | 218 SWP_ZORDER | SWP_ACTIVATE | 219 SWP_FOCUSACTIVATE); 220 } 221 else 222 WinSetWindowPos(HwndC,HWND_TOP,0,0,0,0, 223 SWP_RESTORE | SWP_SHOW | SWP_ZORDER | 224 SWP_ACTIVATE | SWP_FOCUSACTIVATE); 225 } 226 else if(SHORT1FROMMP(mp1) == WLIST_MINIMIZE) { 227 WinSetWindowPos(HwndC,HWND_BOTTOM,0,0,0,0, 228 SWP_MINIMIZE | SWP_DEACTIVATE | 229 SWP_FOCUSDEACTIVATE | SWP_ZORDER); 230 if(hwndActive == HwndC) { 231 WinSetWindowPos(WinWindowFromID(WinQueryWindow(hwndActive, 232 QW_PARENT),TREE_FRAME),HWND_TOP,0,0,0,0, 233 SWP_SHOW | SWP_RESTORE | SWP_ACTIVATE | 234 SWP_FOCUSACTIVATE | SWP_ZORDER); 235 hwndActive = (HWND)0; 236 } 237 } 238 else if(WinQueryWindowUShort(HwndC,QWS_ID) != TREE_FRAME) 239 PostMsg(HwndC,WM_CLOSE,MPVOID,MPVOID); 240 } 241 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,WLIST_LISTBOX, 242 LM_QUERYSELECTION, 243 MPFROM2SHORT(sSelect,0), 244 MPVOID); 245 } 246 } 247 WinDismissDlg(hwnd,0); 248 break; 249 250 case IDM_HELP: 251 if(hwndHelp) 252 WinSendMsg(hwndHelp,HM_DISPLAY_HELP, 253 MPFROM2SHORT(HELP_WINLIST,0), 254 MPFROMSHORT(HM_RESOURCEID)); 255 break; 256 257 case DID_CANCEL: 258 WinDismissDlg(hwnd,0); 259 break; 260 } 261 return 0; 262 263 case WM_DESTROY: 264 if(Me == hwnd) 265 Me = (HWND)0; 266 else 267 WinSetWindowPos(Me,HWND_TOP,0,0,0,0, 268 SWP_SHOW | SWP_RESTORE | SWP_ZORDER | SWP_ACTIVATE); 269 break; 37 SHORT sSelect; 38 39 static HWND Me = (HWND) 0; 40 41 switch (msg) { 42 case WM_INITDLG: 43 if (Me || !mp2) { 44 if (Me) 45 PostMsg(Me, UM_FOCUSME, MPVOID, MPVOID); 46 WinDismissDlg(hwnd, 0); 47 } 48 else { 49 50 HENUM henum; 51 HWND hwndChild; 52 USHORT id; 53 CHAR wtext[CCHMAXPATH + 1]; 54 55 Me = hwnd; 56 WinSetWindowULong(hwnd, QWL_USER, *(HWND *) mp2); 57 henum = WinBeginEnumWindows(*(HWND *) mp2); 58 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) { 59 id = WinQueryWindowUShort(hwndChild, QWS_ID); 60 if (!id) 61 continue; 62 *wtext = ' '; 63 WinQueryWindowText(hwndChild, CCHMAXPATH, wtext + 1); 64 wtext[CCHMAXPATH] = 0; 65 sSelect = 66 (SHORT) WinSendDlgItemMsg(hwnd, WLIST_LISTBOX, LM_INSERTITEM, 67 MPFROM2SHORT(LIT_SORTASCENDING, 0), 68 MPFROMP(wtext)); 69 if (sSelect >= 0) 70 WinSendDlgItemMsg(hwnd, WLIST_LISTBOX, LM_SETITEMHANDLE, 71 MPFROM2SHORT(sSelect, 0), 72 MPFROMLONG((ULONG) hwndChild)); 73 } 74 WinEndEnumWindows(henum); 75 76 { 77 PSWBLOCK pswb; 78 ULONG ulSize, ulcEntries; 79 register INT i, y; 80 81 /* Get the switch list information */ 82 ulcEntries = WinQuerySwitchList(0, NULL, 0); 83 ulSize = sizeof(SWBLOCK) + sizeof(HSWITCH) + (ulcEntries + 4L) * 84 (LONG) sizeof(SWENTRY); 85 /* Allocate memory for list */ 86 pswb = xmalloc((unsigned)ulSize, pszSrcFile, __LINE__); 87 if (pswb) { 88 /* Put the info in the list */ 89 ulcEntries = WinQuerySwitchList(0, pswb, ulSize - sizeof(SWENTRY)); 90 /* do the dirty deed */ 91 y = 0; 92 for (i = 0; i < pswb->cswentry; i++) { 93 if (pswb->aswentry[i].swctl.uchVisibility == SWL_VISIBLE && 94 pswb->aswentry[i].swctl.fbJump == SWL_JUMPABLE && 95 ((pswb->aswentry[i].swctl.idProcess == mypid && 96 (strnicmp(pswb->aswentry[i].swctl.szSwtitle, 97 "FM/2", 4))) || 98 !strnicmp(pswb->aswentry[i].swctl.szSwtitle, "AV/2", 4) || 99 !stricmp(pswb->aswentry[i].swctl.szSwtitle, "File Manager/2") 100 || !stricmp(pswb->aswentry[i].swctl.szSwtitle, "Collector") 101 || !strnicmp(pswb->aswentry[i].swctl.szSwtitle, "VTree", 5) 102 || !strnicmp(pswb->aswentry[i].swctl.szSwtitle, "VDir", 4) 103 || (!strnicmp(pswb->aswentry[i].swctl.szSwtitle, FM2Str, 4) 104 && strnicmp(pswb->aswentry[i].swctl.szSwtitle, "FM/2", 105 4)))) { 106 *wtext = '*'; 107 wtext[1] = 0; 108 strcat(wtext, pswb->aswentry[i].swctl.szSwtitle); 109 wtext[CCHMAXPATH] = 0; 110 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 111 WLIST_LISTBOX, 112 LM_INSERTITEM, 113 MPFROM2SHORT 114 (LIT_SORTASCENDING, 0), 115 MPFROMP(wtext)); 116 if (sSelect >= 0) 117 WinSendDlgItemMsg(hwnd, 118 WLIST_LISTBOX, 119 LM_SETITEMHANDLE, 120 MPFROM2SHORT(sSelect, 0), 121 MPFROMLONG(pswb->aswentry[i].swctl.hwnd)); 122 } 123 y++; 124 } 125 free(pswb); 126 DosPostEventSem(CompactSem); 127 } 128 } 129 130 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 131 WLIST_LISTBOX, 132 LM_QUERYITEMCOUNT, MPVOID, MPVOID); 133 if (sSelect <= 0) 134 WinDismissDlg(hwnd, 0); 135 } 136 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID); 137 break; 138 139 case UM_FOCUSME: 140 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); 141 return 0; 142 143 case UM_SETUP: 144 PostMsg(hwnd, UM_SETUP2, MPVOID, MPVOID); 145 return 0; 146 147 case UM_SETUP2: 148 PostMsg(hwnd, UM_SETUP3, MPVOID, MPVOID); 149 return 0; 150 151 case UM_SETUP3: 152 WinSetActiveWindow(HWND_DESKTOP, hwnd); 153 return 0; 154 155 case WM_CONTROL: 156 switch (SHORT1FROMMP(mp1)) { 157 case WLIST_LISTBOX: 158 switch (SHORT2FROMMP(mp1)) { 159 case LN_ENTER: 160 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID); 161 break; 162 } 163 break; 164 } 165 return 0; 166 167 case WM_COMMAND: 168 switch (SHORT1FROMMP(mp1)) { 169 case WLIST_MINIMIZE: 170 case WLIST_CLOSE: 171 case DID_OK: 172 { 173 HWND hwndActive = (HWND) WinQueryWindowULong(hwnd, QWL_USER); 174 175 hwndActive = WinQueryActiveWindow(hwndActive); 176 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 177 WLIST_LISTBOX, 178 LM_QUERYSELECTION, 179 MPFROM2SHORT(LIT_FIRST, 0), 180 MPVOID); 181 while (sSelect >= 0) { 182 183 HWND HwndC; 184 185 HwndC = (HWND) WinSendDlgItemMsg(hwnd, 186 WLIST_LISTBOX, 187 LM_QUERYITEMHANDLE, 188 MPFROM2SHORT(sSelect, 0), MPVOID); 189 if (HwndC) { 190 191 SWP swp; 192 193 WinQueryWindowPos(HwndC, &swp); 194 if (SHORT1FROMMP(mp1) == DID_OK) { 195 if (!(swp.fl & SWP_MINIMIZE) && (swp.cx == 0 || swp.cy == 0)) { 196 GetNextWindowPos((HWND) WinQueryWindowULong(hwnd, QWL_USER), 197 &swp, NULL, NULL); 198 WinSetWindowPos(HwndC, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy, 199 SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_ZORDER | 200 SWP_ACTIVATE | SWP_FOCUSACTIVATE); 201 } 202 else 203 WinSetWindowPos(HwndC, HWND_TOP, 0, 0, 0, 0, 204 SWP_RESTORE | SWP_SHOW | SWP_ZORDER | 205 SWP_ACTIVATE | SWP_FOCUSACTIVATE); 206 } 207 else if (SHORT1FROMMP(mp1) == WLIST_MINIMIZE) { 208 WinSetWindowPos(HwndC, HWND_BOTTOM, 0, 0, 0, 0, 209 SWP_MINIMIZE | SWP_DEACTIVATE | 210 SWP_FOCUSDEACTIVATE | SWP_ZORDER); 211 if (hwndActive == HwndC) { 212 WinSetWindowPos(WinWindowFromID(WinQueryWindow(hwndActive, 213 QW_PARENT), 214 TREE_FRAME), HWND_TOP, 0, 0, 215 0, 0, 216 SWP_SHOW | SWP_RESTORE | SWP_ACTIVATE | 217 SWP_FOCUSACTIVATE | SWP_ZORDER); 218 hwndActive = (HWND) 0; 219 } 220 } 221 else if (WinQueryWindowUShort(HwndC, QWS_ID) != TREE_FRAME) 222 PostMsg(HwndC, WM_CLOSE, MPVOID, MPVOID); 223 } 224 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, WLIST_LISTBOX, 225 LM_QUERYSELECTION, 226 MPFROM2SHORT(sSelect, 0), 227 MPVOID); 228 } 229 } 230 WinDismissDlg(hwnd, 0); 231 break; 232 233 case IDM_HELP: 234 if (hwndHelp) 235 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 236 MPFROM2SHORT(HELP_WINLIST, 0), MPFROMSHORT(HM_RESOURCEID)); 237 break; 238 239 case DID_CANCEL: 240 WinDismissDlg(hwnd, 0); 241 break; 242 } 243 return 0; 244 245 case WM_DESTROY: 246 if (Me == hwnd) 247 Me = (HWND) 0; 248 else 249 WinSetWindowPos(Me, HWND_TOP, 0, 0, 0, 0, 250 SWP_SHOW | SWP_RESTORE | SWP_ZORDER | SWP_ACTIVATE); 251 break; 270 252 } 271 return WinDefDlgProc(hwnd, msg,mp1,mp2);253 return WinDefDlgProc(hwnd, msg, mp1, mp2); 272 254 } 273 255 274 275 VOID WindowList (HWND hwnd) 256 VOID WindowList(HWND hwnd) 276 257 { 277 WinDlgBox(HWND_DESKTOP, HWND_DESKTOP,WinListDlgProc,FM3ModHandle,WLIST_FRAME,278 258 WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, WinListDlgProc, FM3ModHandle, 259 WLIST_FRAME, MPFROMP(&hwnd)); 279 260 } 280
Note:
See TracChangeset
for help on using the changeset viewer.