In my SDI project I have a vast menu and I create a button named Close, so that the user can close all items static edit images etc. that appear after a menu item was pressed . SO I have this in WM_COMMAND:
case IDBCLOSE: {
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);
}
Well there is an option that the user wanna press directly another menu item and he ignores Close Button .. So for every submenu item I have to send a WM_CLOSE to close the current opened.
My question is how to avoid all these messages and How can I transform the
case IDBCLOSE in to a macro .. so that I only write a single line not this insanity ?
What I have tried:
I have no idea, but I need to get rid of this mess. is quite annoying to write a bunch of lines just to clear all the controls that have been crated.