Mercurial > vba-clojure
comparison src/win32/Commands.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 #include "stdafx.h" | |
2 #include <afxres.h> | |
3 #include "resource.h" | |
4 #include "AcceleratorManager.h" | |
5 | |
6 #ifndef CMapStringToWord | |
7 typedef CMap< CString, LPCSTR, WORD, WORD & > CMapStringToWord; | |
8 #endif | |
9 | |
10 static CMapStringToWord winAccelStrings; | |
11 static bool initialized = false; | |
12 | |
13 struct | |
14 { | |
15 const char *command; | |
16 WORD id; | |
17 } winAccelCommands[] = { | |
18 { "Minimize", ID_SYSTEM_MINIMIZE }, | |
19 { "Maximize", ID_SYSTEM_MAXIMIZE }, | |
20 }; | |
21 | |
22 void winAccelAddCommandsFromTable(CAcceleratorManager &mgr) | |
23 { | |
24 int count = sizeof(winAccelCommands)/sizeof(winAccelCommands[0]); | |
25 | |
26 for (int i = 0; i < count; i++) | |
27 { | |
28 if (!mgr.AddCommandAccel(winAccelCommands[i].id, winAccelCommands[i].command, false)) | |
29 mgr.CreateEntry(winAccelCommands[i].id, winAccelCommands[i].command); | |
30 } | |
31 } | |
32 | |
33 // recursive calls | |
34 void winAccelAddCommandsFromMenu(CAcceleratorManager &mgr, CMenu *pMenu, const CString &parentStr) | |
35 { | |
36 UINT nIndexMax = pMenu->GetMenuItemCount(); | |
37 for (UINT nIndex = 0; nIndex < nIndexMax; ++nIndex) | |
38 { | |
39 UINT nID = pMenu->GetMenuItemID(nIndex); | |
40 if (nID == 0) | |
41 continue; // menu separator or invalid cmd - ignore it | |
42 | |
43 if (nID == (UINT)-1) | |
44 { | |
45 // possibly a submenu | |
46 CMenu *pSubMenu = pMenu->GetSubMenu(nIndex); | |
47 if (pSubMenu != NULL) | |
48 { | |
49 CString tempStr; | |
50 pMenu->GetMenuString(nIndex, tempStr, MF_BYPOSITION); | |
51 tempStr.Remove('&'); | |
52 winAccelAddCommandsFromMenu(mgr, pSubMenu, parentStr + '\\' + tempStr); | |
53 } | |
54 } | |
55 else | |
56 { | |
57 // normal menu item | |
58 // generate the strings | |
59 CString command; | |
60 pMenu->GetMenuString(nIndex, command, MF_BYPOSITION); | |
61 int nPos = command.ReverseFind('\t'); | |
62 if (nPos != -1) | |
63 { | |
64 command.Delete(nPos, command.GetLength() - nPos); | |
65 } | |
66 command.Remove('&'); | |
67 command = parentStr + '\\' + command; | |
68 if (!mgr.AddCommandAccel(nID, command, false)) | |
69 { | |
70 mgr.CreateEntry(nID, command); | |
71 } | |
72 } | |
73 } | |
74 } | |
75 |