|
|
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.