I need help with Menu SDI..

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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);
            }

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 ?
Last edited on
Why don't you put all the window handles in a vector?
You could just loop through them.
Perfect... Thank you Thomas once again.. with this vector I saved almost 10.000 lines..
that's much for me..
Topic archived. No new replies allowed.