Мне нужна помощь с меню SDI..
В моем проекте SDI у меня есть обширное меню, и я создаю кнопку с именем Close, чтобы пользователь мог закрыть все элементы статического редактирования изображений и т. д., которые появляются после нажатия элемента меню. Так что у меня есть это в WM_COMMAND:
case IDBCLOSE: // Close Sub menu Items { SendMessage((HWND)hShaD1, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD2, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD3, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD4, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD5, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD6, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD7, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD8, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD9, WM_CLOSE, 0, 0); SendMessage((HWND)hShaD10, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt1, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt2, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt3, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt4, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt5, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt6, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt7, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt8, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt9, WM_CLOSE, 0, 0); SendMessage((HWND)hMArt10, WM_CLOSE, 0, 0); SendMessage((HWND)hJav1, WM_CLOSE, 0, 0); SendMessage((HWND)hJav2, WM_CLOSE, 0, 0); SendMessage((HWND)hJav3, WM_CLOSE, 0, 0); SendMessage((HWND)hJav4, WM_CLOSE, 0, 0); SendMessage((HWND)hJav5, WM_CLOSE, 0, 0); SendMessage((HWND)hJav6, WM_CLOSE, 0, 0); SendMessage((HWND)hJav7, WM_CLOSE, 0, 0); SendMessage((HWND)hJav8, WM_CLOSE, 0, 0); SendMessage((HWND)hJav9, WM_CLOSE, 0, 0); SendMessage((HWND)hJav10, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM1, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM2, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM3, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM4, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM5, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM6, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM7, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM8, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM9, WM_CLOSE, 0, 0); SendMessage((HWND)hPassM10, WM_CLOSE, 0, 0); SendMessage((HWND)hBow1, WM_CLOSE, 0, 0); SendMessage((HWND)hBow2, WM_CLOSE, 0, 0); SendMessage((HWND)hBow3, WM_CLOSE, 0, 0); SendMessage((HWND)hBow4, WM_CLOSE, 0, 0); SendMessage((HWND)hBow5, WM_CLOSE, 0, 0); SendMessage((HWND)hBow6, WM_CLOSE, 0, 0); SendMessage((HWND)hBow7, WM_CLOSE, 0, 0); SendMessage((HWND)hBow8, WM_CLOSE, 0, 0); SendMessage((HWND)hBow9, WM_CLOSE, 0, 0); SendMessage((HWND)hBow10, WM_CLOSE, 0, 0); SendMessageW((HWND)hButElemSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButSShiftSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButSummDSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButColdSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButLightSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButFireSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButDefSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButOffSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButCombPSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButWarSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButMastSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButCombBSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButSummNSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButPoisSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButCursSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButArtsSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButDisSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButTrapSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButJavSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButPassSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hButBowSkill, WM_CLOSE, 0, 0); SendMessageW((HWND)hSkillStatic, WM_CLOSE, 0, 0); SendMessageW((HWND)hSkillEdit, WM_CLOSE, 0, 0); SendMessage((HWND)hAmazonB, WM_CLOSE, 0, 0); SendMessage((HWND)hAssassinB, WM_CLOSE, 0, 0); SendMessage((HWND)hNecromancerB, WM_CLOSE, 0, 0); SendMessage((HWND)hBarbarianB, WM_CLOSE, 0, 0); SendMessage((HWND)hPaladinB, WM_CLOSE, 0, 0); SendMessage((HWND)hSorceressB, WM_CLOSE, 0, 0); SendMessage((HWND)hDruidB, WM_CLOSE, 0, 0); SendMessage((HWND)hAmazonS, WM_CLOSE, 0, 0); SendMessage((HWND)hAssassinS, WM_CLOSE, 0, 0); SendMessage((HWND)hNecromancerS, WM_CLOSE, 0, 0); SendMessage((HWND)hBarbarianS, WM_CLOSE, 0, 0); SendMessage((HWND)hPaladinS, WM_CLOSE, 0, 0); SendMessage((HWND)hSorceressS, WM_CLOSE, 0, 0); SendMessage((HWND)hDruidS, WM_CLOSE, 0, 0); SendMessage((HWND)hReadOnly, WM_CLOSE, 0, 0); SendMessage((HWND)hStatic, WM_CLOSE, 0, 0); SendMessage((HWND)hCBdesc, WM_CLOSE, 0, 0); SendMessage((HWND)hCSdesc, WM_CLOSE, 0, 0); SendMessage((HWND)hCloseAll, WM_CLOSE, 0, 0); SendDlgItemMessage(hMainWindow, IDC_STATUS, SB_SETTEXT, 1, (LPARAM)"ver. 1.00"); PlaySound(MAKEINTRESOURCE(IDW_SUBMENU), NULL, SND_RESOURCE | SND_ASYNC); return DefWindowProcW(hWnd, msg, wp, lp); }
Ну, есть вариант, что пользователь хочет нажать непосредственно другой пункт меню, и он игнорирует кнопку закрытия .. Поэтому для каждого элемента подменю я должен отправить WM_CLOSE, чтобы закрыть текущий открытый.
Мой вопрос заключается в том, как избежать всех этих сообщений и как я могу трансформировать
дело IDBCLOSE в макро .. так что я пишу только одну строку, а не этот маразм ?
Что я уже пробовал:
Я понятия не имею, но мне нужно избавиться от этого беспорядка. довольно раздражает писать кучу строк только для того, чтобы очистить все элементы управления, которые были упакованы.
Richard MacCutchan
Это все независимые окна или дочерние окна вашего главного окна?
Greg Utas
Я ничего не знаю о фреймворке, который вы используете, но похоже, что каждая из этих вещей, приведенных в качестве HWND, может быть добавлена к вектору при создании, чтобы вы могли запустить вектор и закрыть его позже.