void ApplicationPage_OnWindowsTileVertically(void) { LPAPPLICATION_PAGE_LIST_ITEM pAPLI = NULL; LV_ITEMW item; int i, count; HWND* hWndArray; int nWndCount; count = SendMessageW(hApplicationPageListCtrl, LVM_GETITEMCOUNT, 0, 0); hWndArray = HeapAlloc(GetProcessHeap(), 0, sizeof(HWND) * count); nWndCount = 0; for (i=0; i<count; i++) { memset(&item, 0, sizeof(LV_ITEMW)); item.mask = LVIF_STATE|LVIF_PARAM; item.iItem = i; item.stateMask = (UINT)-1; SendMessageW(hApplicationPageListCtrl, LVM_GETITEMW, 0, (LPARAM) &item); if (item.state & LVIS_SELECTED) { pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)item.lParam; if (pAPLI) { hWndArray[nWndCount] = pAPLI->hWnd; nWndCount++; } } } TileWindows(NULL, MDITILE_VERTICAL, NULL, nWndCount, hWndArray); HeapFree(GetProcessHeap(), 0, hWndArray); }
/// tile a group of windows. // @param parent @{Window} (can use the desktop) // @param horiz tile vertically by default // @param kids a table of window objects // @param bounds a bounds table (left,top,right,bottom) - can be nil // @function tile_windows def tile_windows(Window parent, Boolean horiz, Value kids, Value bounds) { RECT rt; HWND *kids_arr; int i,n_kids; LPRECT lpRect = NULL; if (! lua_isnoneornil(L,bounds)) { lua_pushvalue(L,bounds); Int_get(rt.left,"left"); Int_get(rt.top,"top"); Int_get(rt.right,"right"); Int_get(rt.bottom,"bottom"); lua_pop(L,1); lpRect = &rt; } n_kids = lua_objlen(L,kids); kids_arr = (HWND *)malloc(sizeof(HWND)*n_kids); for (i = 0; i < n_kids; ++i) { Window *w; lua_rawgeti(L,kids,i+1); w = Window_arg(L,-1); kids_arr[i] = w->hwnd; } TileWindows(parent->hwnd,horiz ? MDITILE_HORIZONTAL : MDITILE_VERTICAL, lpRect, n_kids, kids_arr); free(kids_arr); return 0; }
void ApplicationPage_OnWindowsTile(DWORD dwMode) { LPAPPLICATION_PAGE_LIST_ITEM pAPLI = NULL; LV_ITEM item; int i; HWND* hWndArray; int nWndCount; hWndArray = (HWND*)HeapAlloc(GetProcessHeap(), 0, sizeof(HWND) * ListView_GetItemCount(hApplicationPageListCtrl)); nWndCount = 0; for (i=0; i<ListView_GetItemCount(hApplicationPageListCtrl); i++) { memset(&item, 0, sizeof(LV_ITEM)); item.mask = LVIF_STATE|LVIF_PARAM; item.iItem = i; item.stateMask = (UINT)-1; (void)ListView_GetItem(hApplicationPageListCtrl, &item); if (item.state & LVIS_SELECTED) { pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)item.lParam; if (pAPLI) { hWndArray[nWndCount] = pAPLI->hWnd; nWndCount++; } } } TileWindows(NULL, dwMode, NULL, nWndCount, hWndArray); HeapFree(GetProcessHeap(), 0, hWndArray); }
static void in_ArrangeWindows(int n, void** windows, int action, int preserve, int outer) { int j; if (action == MINIMIZE || action == RESTORE) { for (j=0; j<n; j++) ShowWindow((HWND)windows[j], action == MINIMIZE ? SW_MINIMIZE : SW_RESTORE); } else { RECT rect = {0,0,0,0}; RECT *prect = ▭ HWND parent; if (preserve) { WINDOWPLACEMENT wp; wp.length = sizeof(wp); for (j=0; j<n; j++) { if (GetWindowPlacement((HWND)windows[j], &wp)) { UnionRect(prect, prect, &wp.rcNormalPosition); if (wp.showCmd == SW_SHOWMINIMIZED || wp.showCmd == SW_SHOWMAXIMIZED) { wp.showCmd = SW_RESTORE; SetWindowPlacement((HWND)windows[j], &wp); } } } } if (rect.left == rect.right || rect.top == rect.bottom) prect = NULL; if (!outer && ismdi()) parent = GetParent(getHandle(RConsole)); else parent = NULL; switch (action) { case CASCADE: CascadeWindows(parent, 0, prect, n, (HWND FAR *)windows); break; case TILEHORIZ: TileWindows(parent, MDITILE_HORIZONTAL, prect, n, (HWND FAR *)windows); break; case TILEVERT: TileWindows(parent, MDITILE_VERTICAL, prect, n, (HWND FAR *)windows); break; } } }
void CTablePositioner::PositionMyWindow() { // Build list of poker tables (child windows) // Use the shared memory (auto-connector) for that. HWND *HWNDs_of_child_windows = p_sharedmem->GetDenseListOfConnectedPokerWindows(); int number_of_child_windows = p_sharedmem->SizeOfDenseListOfAttachedPokerWindows(); if (number_of_child_windows <= 0) { // Do nothing if there are 0 tables connected. // Actually an empty list of tables consists of only NULLs, // but if MicroSofts table-arranging functions see a NULL // they will arrange all windows at the desktop. // That's not what we want. return; } if (prefs.table_positioner_options() == k_position_tables_tiled) { write_log(prefs.debug_table_positioner(), "[CTablePositioner] Going to tile %d windows...\n", number_of_child_windows); // Tiling windows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633554(v=vs.85).aspx TileWindows( NULL, // Parent; NULL = whole desktop MDITILE_HORIZONTAL, // How; either MDITILE_HORIZONTAL or MDITILE_VERTICAL NULL, // Target area; NULL = parent window, here desktop number_of_child_windows, HWNDs_of_child_windows); } else if (prefs.table_positioner_options() == k_position_tables_cascaded) { write_log(prefs.debug_table_positioner(), "[CTablePositioner] Going to cascade %d windows...\n", number_of_child_windows); // Cascading windows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms632674(v=vs.85).aspx CascadeWindows( NULL, // Parent; NULL = whole desktop NULL, // How; NULL means: order specified in the lpKids array NULL, // Target area; NULL = parent window, here desktop number_of_child_windows, HWNDs_of_child_windows); } else { // prefs.table_positioner_options() == k_position_tables_never write_log(prefs.debug_table_positioner(), "[CTablePositioner] Not doing anything because of preferences.\n"); } }