|
|
1.1 root 1: Sample: Migrating PM Menus to Win32
2:
3: Summary:
4:
5: MENUS is a migration sample which demonstrates taking a PM
6: application code demonstrating menu functionality, and
7: converting it to Win32 code. The sample is not intended to
8: demonstrate the best Win32 code possible to show menu
9: functionality, but instead tries to emulate the original PM
10: applications as closely as possible using as close to the
11: same API functions as possible.
12:
13: Two tools were used in converting this application:
14: RESCONV.EXE, a tool which converts PM resource files to
15: Win32 format; and IMAGCONV.EXE, a tool which converts PM
16: image files to Win32 format.
17:
18: More Information:
19:
20: The Sample:
21:
22: The original PM sample shows several functions available.
23: MENUS.C emulates that functionality as closely as possible.
24: Under the Cascade Sample menu, there is an item which will
25: allow you to switch to another menu, an item called Cascade
26: which demonstrates cascading menus, and another item called
27: Disable Cascade which will enable/disable the Cascade item
28: and will draw a check mark beside itself while the cascaded
29: item is disabled.
30:
31: The second item on the Action Bar, "BITMAPS", is itself a
32: bitmap. When selected it opens to six other bitmaps. The
33: third item is a message which tells you that if you press
34: and release the second mouse button in the client space, a
35: Popup will appear at the location of the cursor.
36:
37: If you choose to switch menus by choosing Switch Menus from
38: the Cascade Sample menu (or pressing the accelerator key F2)
39: you will get a completely new menu with the option "Menu
40: Item". This option opens up to allow you to switch back, or
41: to add an item to the Action Bar. When choosing "Add Item"
42: a new functioning menu item is added to the Action Bar with
43: the text "1000", and it has an active sub option "6000".
44: Select "Add Item" again and another item will appear on the
45: Action Bar "1001", with an option "6001". This pattern
46: continues, wrapping the Action Bar around to the window as
47: appropriate.
48:
49: Using the Tools:
50:
51: Using IMAGCONV.EXE is fairly straight forward. However,
52: there are some things to know about Windows resource files
53: and the RESCONV.EXE utility before using it. In PM you can
54: define bitmaps as menu items in the .RC file. In Windows
55: this is unsupported. As a result, the string MIS_BITMAP
56: will be flagged. You will have to remove any reference to
57: bitmaps from your menu in the .RC file. The code in MENUS.C
58: demonstrates how to construct such a menu item instead.
59: Also, as a result of being able to define bitmaps in a PM
60: menu, often times the bitmap might be declared using a
61: number to identify it i.e. "BITMAP 9 My.BMP". The
62: RESCONV.EXE utility will change this line to "9 BITMAP
63: My.BMP". You may choose to use a string value in the place
64: of the number value i.e. "nine BITMAP My.BMP".
65:
66: Another characteristic of RESCONV.EXE is it will take the
67: menu declaration of the PM code "MENU ID_RESOURCE" and
68: change it to put the symbolic constant in front i.e.
69: "ID_RESOURCE MENU". Windows often uses a string value in
70: this place. You can opt to change the symbolic constant to
71: a string i.e. "ID_Resource", or you can type cast the value
72: in the Window Class structure i.e. "wc.lpszMenuName =
73: (LPTSTR)ID_RESOURCE" (see MENUS.C in defining the wc
74: variable for the RegisterClass call).
75:
76: In PM MIS_HELP tells PM that a special WM_HELP message will
77: be sent if the Help menu item is selected. In Windows this
78: is not supported, therefore you will have to modify your
79: code to handle the Help under the WM_COMMAND message. You
80: will also have to modify your .RC file as the RESCONV.EXE
81: will flag MIS_HELP and will not write the line its on to the
82: target resource file.
83:
84: For Accelerator tables, RESCONV.EXE will also change a line
85: "ACCELTABLE ID_RESOURCE" to be "ID_RESOURCE ACCELERATORS".
86: Again you have the option to change the symbolic constant to
87: a string, or to cast it as a LPTSTR in your source code.
88: Another thing to know about Accelerators is how they are
89: handled in Windows: although in PM their use is almost
90: transparent in your source code, in Windows they must be
91: loaded and translated around the message loop. To see an
92: example of how this is done, look at the message loop in
93: MENUS.C, or search the text for LoadAccelerators and
94: TranslateAccelerators.
95:
96: Although RESCONV.EXE made other changes to the resource
97: file, for the most part they should be transparent to your
98: code.
99:
100:
101:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.