/*static*/ VOID UpdateVdmMenuDisks(VOID) { UINT_PTR ItemID; USHORT i; WCHAR szNoMedia[100]; WCHAR szMenuString1[256], szMenuString2[256]; /* Update the disks menu items */ LoadStringW(GetModuleHandle(NULL), IDS_NO_MEDIA, szNoMedia, ARRAYSIZE(szNoMedia)); LoadStringW(GetModuleHandle(NULL), IDS_VDM_MOUNT_FLOPPY, szMenuString1, ARRAYSIZE(szMenuString1)); for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i) { ItemID = ID_VDM_DRIVES + (2 * i); if (GlobalSettings.FloppyDisks[i].Length != 0 && GlobalSettings.FloppyDisks[i].Buffer && *GlobalSettings.FloppyDisks[i].Buffer != L'\0') { /* Update item text */ _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, GlobalSettings.FloppyDisks[i].Buffer); szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL; ModifyMenuW(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2); /* Enable the eject item */ EnableMenuItem(hConsoleMenu, ItemID + 1, MF_BYCOMMAND | MF_ENABLED); } else { /* Update item text */ _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, szNoMedia); szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL; ModifyMenuW(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2); /* Disable the eject item */ EnableMenuItem(hConsoleMenu, ItemID + 1, MF_BYCOMMAND | MF_GRAYED); } } }
static WINUSERAPI BOOL WINAPI ModifyMenuUW(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCSTR lpNewItem) { if ((uFlags & (MF_BITMAP | MF_OWNERDRAW)) || !lpNewItem) { // String not specified. Don't bother converting anything. return ModifyMenuW(hMenu, uPosition, uFlags, uIDNewItem, (LPCWSTR)lpNewItem); } // Convert lpNewItem from UTF-8 to UTF-16. wchar_t *lpwNewItem = NULL; if (lpNewItem) lpwNewItem = w32u_UTF8toUTF16(lpNewItem); BOOL bRet = ModifyMenuW(hMenu, uPosition, uFlags, uIDNewItem, lpwNewItem); free(lpwNewItem); return bRet; }
void CAcceleratorManager::UpdateMenu(HMENU menu) { int count = GetMenuItemCount(menu); MENUITEMINFO info; wchar_t ss[128]; ZeroMemory(&info, sizeof(info)); info.cbSize = sizeof(info); info.fMask = MIIM_ID | MIIM_SUBMENU; for(int i = 0; i < count; i++) { GetMenuItemInfo(menu, i, TRUE, &info); if(info.hSubMenu != NULL) { UpdateMenu(info.hSubMenu); } else { if(info.wID != -1) { MENUITEMINFOW info2; ZeroMemory(&info2, sizeof(info2)); info2.cbSize = sizeof(info2); info2.fMask = MIIM_STRING; info2.dwTypeData = ss; info2.cch = 128; GetMenuItemInfoW(menu, i, MF_BYPOSITION, &info2); CStdStringW str = ss; int index = str.Find('\t'); if(index != -1) str = str.Left(index); CMapWordToCCmdAccelOb::iterator it = m_mapAccelTable.find(info.wID); if(it != m_mapAccelTable.end()) { CCmdAccelOb *o = it->second; if(o->m_Accels.begin() != o->m_Accels.end()) { std::list<CAccelsOb*>::iterator j = o->m_Accels.begin(); CAccelsOb *accel = *j; CStdString s; accel->GetString(s); str += "\t"; str += s; } } if(str != ss) ModifyMenuW(menu, i, MF_BYPOSITION | MF_STRING, info.wID, str); } } } }
static VOID UpdateVdmMenuMouse(VOID) { WCHAR szMenuString[256]; /* Update "Capture/Release mouse" menu item */ if (LoadStringW(GetModuleHandle(NULL), (CaptureMouse ? IDS_RELEASE_MOUSE : IDS_CAPTURE_MOUSE), szMenuString, ARRAYSIZE(szMenuString)) > 0) { ModifyMenuW(hConsoleMenu, ID_CAPTURE_MOUSE, MF_BYCOMMAND, ID_CAPTURE_MOUSE, szMenuString); } }
static void hugsprim_ModifyMenuW_29(HugsStackPtr hugs_root) { HsPtr arg1; HsWord32 arg2; HsWord32 arg3; HsWord32 arg4; HsPtr arg5; HsBool res1; arg1 = hugs->getPtr(); arg2 = hugs->getWord32(); arg3 = hugs->getWord32(); arg4 = hugs->getWord32(); arg5 = hugs->getPtr(); res1 = ModifyMenuW(arg1, arg2, arg3, arg4, arg5); hugs->putBool(res1); hugs->returnIO(hugs_root,1); }
void CAcceleratorManager::UpdateMenu(HMENU menu) { int count = GetMenuItemCount(menu); OSVERSIONINFO info = {0}; info.dwOSVersionInfoSize = sizeof(info); GetVersionEx(&info); if (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { MENUITEMINFO info = {0}; info.cbSize = sizeof(info) - sizeof(HBITMAP); info.fMask = MIIM_ID | MIIM_SUBMENU; for (int i = 0; i < count; i++) { GetMenuItemInfo(menu, i, TRUE, &info); if (info.hSubMenu != NULL) { UpdateMenu(info.hSubMenu); } else { if (info.wID != (UINT)-1) { char ss[128]; MENUITEMINFO info2 = {0}; info2.cbSize = sizeof(info2) - sizeof(HBITMAP); // FIXME: why? info2.fMask = MIIM_STRING; info2.dwTypeData = ss; info2.cch = 128; GetMenuItemInfo(menu, i, MF_BYPOSITION, &info2); CString str(ss); int index = str.Find('\t'); if (index != -1) str = str.Left(index); WORD command = info.wID; CCmdAccelOb *o; if (m_mapAccelTable.Lookup(command, o)) { if (o->m_Accels.GetCount()) { POSITION pos = o->m_Accels.GetHeadPosition(); CAccelsOb *accel = o->m_Accels.GetNext(pos); CString s; accel->GetString(s); str += "\t"; str += s; } } if (str != ss) ModifyMenu(menu, i, MF_BYPOSITION | MF_STRING, info.wID, str); } } } } else { MENUITEMINFO info = {0}; info.cbSize = sizeof(info); info.fMask = MIIM_ID | MIIM_SUBMENU; for (int i = 0; i < count; i++) { GetMenuItemInfo(menu, i, TRUE, &info); if (info.hSubMenu != NULL) { UpdateMenu(info.hSubMenu); } else { if (info.wID != (WORD)-1) { wchar_t ss[128]; wchar_t str[512]; MENUITEMINFOW info2 = {0}; info2.cbSize = sizeof(info2); info2.fMask = MIIM_STRING; info2.dwTypeData = ss; info2.cch = 128; GetMenuItemInfoW(menu, i, MF_BYPOSITION, &info2); wcscpy(str, ss); wchar_t *p = wcschr(str, '\t'); if (p) *p = 0; CCmdAccelOb *o; WORD command = info.wID; if (m_mapAccelTable.Lookup(command, o)) { if (o->m_Accels.GetCount()) { POSITION pos = o->m_Accels.GetHeadPosition(); CAccelsOb *accel = o->m_Accels.GetNext(pos); CString s; accel->GetString(s); wchar_t temp[128]; temp[0] = '\t'; temp[1] = 0; wcscat(str, temp); p = temp; for (const char *sp = s; *sp; sp++) *p++ = *sp; *p = 0; wcscat(str, temp); } } if (wcscmp(str, ss)) ModifyMenuW(menu, i, MF_BYPOSITION | MF_STRING, info.wID, str); } } } } }
BOOL ModifyMenuCP(HMENU hMnu, UINT uPosition, UINT uFlags, UINT uIDNewItem, LPCSTR lpNewItem) { if (NewLangCP != CP_THREAD_ACP) return ModifyMenuW(hMnu, uPosition, uFlags, uIDNewItem, ConvertCodepage(lpNewItem, NewLangCP)); else return ModifyMenuA(hMnu, uPosition, uFlags, uIDNewItem, lpNewItem); }
BOOL OnCreate(HWND hWnd) { HMENU hMenu; HMENU hEditMenu; HMENU hViewMenu; HMENU hShutMenu; HMENU hUpdateSpeedMenu; HMENU hCPUHistoryMenu; int nActivePage; int nParts[3]; RECT rc; WCHAR szTemp[256]; WCHAR szLogOffItem[MAX_PATH]; LPWSTR lpUserName; TCITEM item; DWORD len = 0; SendMessageW(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER))); /* Initialize the Windows Common Controls DLL */ InitCommonControls(); /* Get the minimum window sizes */ GetWindowRect(hWnd, &rc); nMinimumWidth = (rc.right - rc.left); nMinimumHeight = (rc.bottom - rc.top); /* Create the status bar */ hStatusWnd = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS, L"", hWnd, STATUS_WINDOW); if(!hStatusWnd) return FALSE; /* Create the status bar panes */ nParts[0] = STATUS_SIZE1; nParts[1] = STATUS_SIZE2; nParts[2] = STATUS_SIZE3; SendMessageW(hStatusWnd, SB_SETPARTS, 3, (LPARAM) (LPINT) nParts); /* Create tab pages */ hTabWnd = GetDlgItem(hWnd, IDC_TAB); #if 1 hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hWnd, ApplicationPageWndProc); EnableDialogTheme(hApplicationPage); hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hWnd, ProcessPageWndProc); EnableDialogTheme(hProcessPage); hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hWnd, PerformancePageWndProc); EnableDialogTheme(hPerformancePage); #else hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hTabWnd, ApplicationPageWndProc); EnableDialogTheme(hApplicationPage); hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hTabWnd, ProcessPageWndProc); EnableDialogTheme(hProcessPage); hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hTabWnd, PerformancePageWndProc); EnableDialogTheme(hPerformancePage); #endif /* Insert tabs */ LoadStringW(hInst, IDS_TAB_APPS, szTemp, 256); memset(&item, 0, sizeof(TCITEM)); item.mask = TCIF_TEXT; item.pszText = szTemp; (void)TabCtrl_InsertItem(hTabWnd, 0, &item); LoadStringW(hInst, IDS_TAB_PROCESSES, szTemp, 256); memset(&item, 0, sizeof(TCITEM)); item.mask = TCIF_TEXT; item.pszText = szTemp; (void)TabCtrl_InsertItem(hTabWnd, 1, &item); LoadStringW(hInst, IDS_TAB_PERFORMANCE, szTemp, 256); memset(&item, 0, sizeof(TCITEM)); item.mask = TCIF_TEXT; item.pszText = szTemp; (void)TabCtrl_InsertItem(hTabWnd, 2, &item); /* Size everything correctly */ GetClientRect(hWnd, &rc); nOldWidth = rc.right; nOldHeight = rc.bottom; /* nOldStartX = rc.left; */ /*nOldStartY = rc.top; */ #define PAGE_OFFSET_LEFT 17 #define PAGE_OFFSET_TOP 72 #define PAGE_OFFSET_WIDTH (PAGE_OFFSET_LEFT*2) #define PAGE_OFFSET_HEIGHT (PAGE_OFFSET_TOP+32) if ((TaskManagerSettings.Left != 0) || (TaskManagerSettings.Top != 0) || (TaskManagerSettings.Right != 0) || (TaskManagerSettings.Bottom != 0)) { MoveWindow(hWnd, TaskManagerSettings.Left, TaskManagerSettings.Top, TaskManagerSettings.Right - TaskManagerSettings.Left, TaskManagerSettings.Bottom - TaskManagerSettings.Top, TRUE); #ifdef __GNUC__TEST__ MoveWindow(hApplicationPage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); MoveWindow(hProcessPage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); MoveWindow(hPerformancePage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); #endif } if (TaskManagerSettings.Maximized) ShowWindow(hWnd, SW_MAXIMIZE); /* Set the always on top style */ hMenu = GetMenu(hWnd); hEditMenu = GetSubMenu(hMenu, 1); hViewMenu = GetSubMenu(hMenu, 2); hShutMenu = GetSubMenu(hMenu, 4); hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1); hCPUHistoryMenu = GetSubMenu(hViewMenu, 7); /* Check or uncheck the always on top menu item */ if (TaskManagerSettings.AlwaysOnTop) { CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_CHECKED); SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } else { CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_UNCHECKED); SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } /* Check or uncheck the minimize on use menu item */ if (TaskManagerSettings.MinimizeOnUse) CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_UNCHECKED); /* Check or uncheck the hide when minimized menu item */ if (TaskManagerSettings.HideWhenMinimized) CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_UNCHECKED); /* Check or uncheck the show 16-bit tasks menu item */ if (TaskManagerSettings.Show16BitTasks) CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_UNCHECKED); /* Set the view mode */ CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, TaskManagerSettings.ViewMode, MF_BYCOMMAND); if (TaskManagerSettings.ShowKernelTimes) CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED); CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, TaskManagerSettings.UpdateSpeed, MF_BYCOMMAND); if (TaskManagerSettings.CPUHistory_OneGraphPerCPU) CheckMenuRadioItem(hCPUHistoryMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND); else CheckMenuRadioItem(hCPUHistoryMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND); nActivePage = TaskManagerSettings.ActiveTabPage; TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 0); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 1); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 2); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, nActivePage); /* Set the username in the "Log Off %s" item of the Shutdown menu */ /* 1- Get the menu item text and store it temporarily */ GetMenuStringW(hShutMenu, ID_SHUTDOWN_LOGOFF, szTemp, 256, MF_BYCOMMAND); /* 2- Retrieve the username length first, then allocate a buffer for it and call it again */ if (!GetUserNameW(NULL, &len) && GetLastError() == ERROR_INSUFFICIENT_BUFFER) { lpUserName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR)); if (lpUserName && GetUserNameW(lpUserName, &len)) { _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, lpUserName); szLogOffItem[sizeof(szLogOffItem)/sizeof(szLogOffItem[0]) - 1] = UNICODE_NULL; } else { _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a"); } if (lpUserName) HeapFree(GetProcessHeap(), 0, lpUserName); } else { _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a"); } /* 3- Set the menu item text to its formatted counterpart */ ModifyMenuW(hShutMenu, ID_SHUTDOWN_LOGOFF, MF_BYCOMMAND | MF_STRING, ID_SHUTDOWN_LOGOFF, szLogOffItem); /* Setup update speed */ SetUpdateSpeed(hWnd); /* * Refresh the performance data * Sample it twice so we can establish * the delta values & cpu usage */ PerfDataRefresh(); PerfDataRefresh(); RefreshApplicationPage(); RefreshProcessPage(); RefreshPerformancePage(); TrayIcon_ShellAddTrayIcon(); return TRUE; }