home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / book / open32.inf (.txt) < prev    next >
OS/2 Help File  |  1999-05-12  |  473KB  |  3,604 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Introduction ΓòÉΓòÉΓòÉ
  3.  
  4. Open32 provides functions that let programmers maintain application source code 
  5. that is common between the OS/2 and Windows 32-bit programming platforms. 
  6. Open32 functions are entry points to OS/2 functions that correspond to Windows 
  7. 32-bit functions. The Windows and Open32 Differences section documents the 
  8. Windows 32-bit and Open32 behavioral differences. Where appropriate, see the 
  9. Windows 32-bit programming reference of your choice for the specific syntax and 
  10. usage of these programming interfaces. 
  11.  
  12.  
  13. ΓòÉΓòÉΓòÉ 1.1. Developing Common Source Code ΓòÉΓòÉΓòÉ
  14.  
  15. IBM analyzed more than nine million lines of Windows 32-bit code and 
  16. implemented the most commonly used Windows 32-bit functions and messages in 
  17. Open32: approximately 750 Windows 32-bit functions and almost all of the 
  18. Windows 32-bit messages. 
  19.  
  20. The Windows 32-bit programs that you will convert to OS/2 Warp programs fall 
  21. into one of the two following categories: 
  22.  
  23. Open32 applications are small sample programs that you can convert to OS/2 Warp 
  24. programs by using only the Open32 functions. IBM evaluated and converted many 
  25. such programs without any problems. These applications are called Open32 
  26. applications because they use only Open32.  You can compile the unchanged 
  27. source with the appropriate header files. 
  28.  
  29. Mixed-mode Windows 32-bit applications are programs that contain both Open32 
  30. and other non-OS/2 functions and require separation of common code and 
  31. platform-specific code into individual source files. Due to the complex nature 
  32. of applications and because Open32 is a subset of the Windows 32-bit functions, 
  33. most of Windows 32-bit applications fall into this category. 
  34.  
  35.  
  36. ΓòÉΓòÉΓòÉ 1.2. Summary ΓòÉΓòÉΓòÉ
  37.  
  38. To use Open32 for Open32 applications or mixed-mode applications, follow these 
  39. steps: 
  40.  
  41.    1. For mixed-mode applications, see Migrating Mixed-Mode Applications. 
  42.  
  43.    2. Get set up to use the Open32 by installing the prerequisites. See Getting 
  44.       Started. 
  45.  
  46.    3. If you wish to analyze and migrate existing Windows 32-bit code, use 
  47.       SMART to analyze Windows code and resource files. Then use SMART to 
  48.       migrate the code and resource files to OS/2 code and resource files. Use 
  49.       either SMART or Hyperwise Lite to migrate help files to OS/2 help files. 
  50.       See the following: 
  51.  
  52.           Analyzing Windows Code 
  53.           Analyzing Windows Resource Files 
  54.           Migrating Windows Code 
  55.           Migrating Windows Resource Files 
  56.           Migrating Windows Help Files 
  57.  
  58.    4. To migrate existing Windows icons and bitmaps, use SMART. The Open32 
  59.       Programming Guide and Reference does not cover this topic; see the SMART 
  60.       documentation. 
  61.  
  62.    5. If you want to write new code or ensure that your existing migrated code 
  63.       runs correctly, note the: 
  64.  
  65.           Differences between Windows NT and OS/2: See Windows and Open32 
  66.            Differences 
  67.           Changes to the OS/2 Resource Compiler: See OS/2 Warp Tools Reference 
  68.           Open32 functions: See Open32 Functions 
  69.  
  70.    6. Compile and test the code: See Testing. 
  71.  
  72.  
  73. ΓòÉΓòÉΓòÉ 2. Migrating Mixed-Mode Applications ΓòÉΓòÉΓòÉ
  74.  
  75. This section describes how to migrate mixed-mode applications using Open32 and 
  76. SMART.  SMART provides a porting mechanism, and Open32 makes the porting 
  77. process easier.  It is essential to have a reasonable amount of understanding 
  78. of both the Windows 32-bit and OS/2 Warp operating systems to port applications 
  79. from one platform to another or create applications that can run on multiple 
  80. platforms.  By using Open32 and SMART, you might not need to learn about 
  81. certain OS/2 topics, such as the Presentation Manager (PM), but you still need 
  82. to be familiar with the unique characteristics of each operating system. 
  83.  
  84. To port a mixed-mode Windows 32-bit application to OS/2 Warp, you must first 
  85. analyze the existing Windows 32-bit application so that you can separate the 
  86. common code from the platform-specific code within the Windows 32-bit 
  87. application.  Use SMART and the Open32 dictionary to analyze the Windows 32-bit 
  88. application.  The analysis identifies areas of code that can and cannot be 
  89. converted using Open32.  At this point, examine the code for possible ways of 
  90. converting the platform-specific functions to Open32.  Many times there are 
  91. multiple Windows 32-bit functions implementing a single function.  Open32 
  92. implements only the most commonly used Windows 32-bit functions.  Often, the 
  93. percentage of common source can be increased by modifying the original Windows 
  94. 32-bit source to use the Open32 functions.  However, there are some functions 
  95. that Open32 does not support (for example, OLE) that must remain platform 
  96. specific. 
  97.  
  98. Use the SMART analysis to help you separate the Windows 32-bit common and 
  99. platform-specific code. 
  100.  
  101. When the code is separated, add a header change to the common code section so 
  102. that you can successfully compile this code.  This common code can call 
  103. platform-specific functions as needed except for those functions mentioned in 
  104. Common Code Support Caveats. 
  105.  
  106.  
  107. ΓòÉΓòÉΓòÉ 2.1. Common Code Support Caveats ΓòÉΓòÉΓòÉ
  108.  
  109. Interoperability does come with certain caveats: 
  110.  
  111.      Do not mix and match operations such as Open32 and OS/2 handles. In other 
  112.       words, do not pass handles that are obtained from Open32 to OS/2 
  113.       functions and vice versa. 
  114.  
  115.      Try not to mix Open32 and OS/2 functions.  For example, do not mix Open32 
  116.       and OS/2 graphics (GPI) calls.  An exception to this rule is that you can 
  117.       create an OS/2 child window from a Open32 window or vice versa. 
  118.  
  119.      Open32 does not provide complete Windows 32-bit function compatibility 
  120.       due to underlying differences in the operating system platforms.  For 
  121.       example, the maximum coordinates allowed in Windows 32-bit are not the 
  122.       same as those allowed in OS/2.  Open32 supports the maximums imposed by 
  123.       OS/2. 
  124.  
  125.      For Registry functions, note that data storage and retrieval from the 
  126.       Registry requires minor modifications to your code so that it can work on 
  127.       multiple platforms. 
  128.  
  129.      Resource functions are not compatible with Windows.  Except for the 
  130.       LoadResource function, which returns a pointer to an OS/2 resource 
  131.       structure, each resource function takes a pointer to a resource structure 
  132.       as a parameter.  These functions take and return pointers to OS/2 
  133.       resource structures, not Windows resource structures.  Other functions 
  134.       that fall into this Resource function category include: 
  135.  
  136.         -  CreateBitmapIndirect 
  137.         -  CreateIconIndirect 
  138.         -  CreateDialogIndirect 
  139.         -  CreateDialogIndirectParam 
  140.         -  DialogBoxIndirect 
  141.         -  DialogBoxIndirectParam 
  142.         -  LoadMenuIndirect 
  143.         -  LoadResource 
  144.  
  145.  After these changes have been made and the code has been separated, you are 
  146.  ready to use SMART to convert the platform-specific code. This process is 
  147.  described in the SMART documentation and in this guide. 
  148.  
  149.  
  150. ΓòÉΓòÉΓòÉ 2.2. Migrating Mixed-Mode Resource and Help Files ΓòÉΓòÉΓòÉ
  151.  
  152. The Open32 Resource and Help functions recognize only OS/2 Resource files and 
  153. OS/2 Help files.  To be able to use your Windows Resource (RC extension) and 
  154. Help files you need to convert them to OS/2 format using any of the existing 
  155. converter tools.  After conversion to OS/2, you should check the converted 
  156. Resource and Help files for functionality and look and feel. 
  157.  
  158. SMART converts both Windows Resource and Help files to OS/2 format. While SMART 
  159. does a good conversion job, you will need to use a viewer to look at the 
  160. converted files.  You can also use the Borland RC converter (available with 
  161. their OS/2 C++ compiler) or Universal Resource Editor (URE) that is available 
  162. on the OS/2 Developer's Connection. Hyperwise Lite is another tool that helps 
  163. you convert Windows help files to OS/2 format.  It also includes a viewer. 
  164. Hyperwise Lite provides many other Rich Text Format (RTF) to OS/2 Help file 
  165. conversion functions that are not included in Hyperwise today.  Because OS/2 
  166. Resource and Help functions are different from their Windows counterparts, you 
  167. might need to further modify your Help and Resource files to obtain similar 
  168. functionality on both platforms.  If your source code is dependent on the 
  169. structure of these Resource files, you might need to modify your source code 
  170. for OS/2.  Identify this modified code as platform-specific code, because this 
  171. modification is always necessary. 
  172.  
  173. Also, the converted Resource files need to use OS/2 header files, not Open32 
  174. header files.  Because Open32 common code expects Open32 header files and 
  175. Resource files expect OS/2 header files, an include that is shared by the 
  176. Open32 code and Resource files must avoid using either Open32 or OS/2 header 
  177. files.  In summary, pay close attention to header files that are used by both 
  178. Open32 common source code and Resource files. 
  179.  
  180. The Windows 32-bit Help and OS/2 Help functionality are dramatically different. 
  181. Due to the difference in Help behavior, you must understand the limitations of 
  182. the conversion tools.  Information on these limitations is provided in the 
  183. documentation for the Help conversion tools.  You need to understand what needs 
  184. to be modified in the converted Help files to obtain similar functionality. 
  185. The macro calls made in RTF files need to be closely monitored because the 
  186. conversion tools might not support all the RTF macros.  Help can be one of the 
  187. areas that requires fine tuning to get similar functionality across Windows 
  188. 32-bit and OS/2 environments. 
  189.  
  190.  
  191. ΓòÉΓòÉΓòÉ 3. Getting Started ΓòÉΓòÉΓòÉ
  192.  
  193. Install the following to use Open32 to analyze and migrate Windows code to OS/2 
  194. code: 
  195.  
  196.      The OS/2 Warp Version 3.0 Toolkit, which includes Open32 headers and 
  197.       libraries. See the README that accompanies the Toolkit. 
  198.  
  199.      SMART Version 2.1B. See the README that accompanies SMART. 
  200.  
  201.      Hyperwise Lite. See the README that accompanies Hyperwise Lite. 
  202.  
  203.      IBM VisualAge C++ for OS/2 Version 3.0: Call IBM Direct at 1-800-342-6672 
  204.       to order. Follow the instructions that accompany the compiler to install 
  205.       it. 
  206.  
  207.  When you have installed everything, you must shut down and restart your 
  208.  system. Then, for analyzing and migrating Windows 32-bit code, you need to 
  209.  create the Open32 UDMD, see Creating the Open32 UDMD. 
  210.  
  211.  
  212. ΓòÉΓòÉΓòÉ 4. Creating the Open32 UDMD ΓòÉΓòÉΓòÉ
  213.  
  214. To analyze and migrate Windows 32-bit code, you need to create the Open32 UDMD 
  215. as follows: 
  216.  
  217.    1. Double-click on the SMART2 Toolset object to start SMART. 
  218.  
  219.    2. SMART displays the SMART2 Toolset - Icon View window. Double-click on the 
  220.       SMART2 Source Migration object. 
  221.  
  222.    3. SMART displays the SMART2 Source Migration window. Select the Tables 
  223.       pull-down. Select Create User UDMD from the pull-down. 
  224.  
  225.    4. SMART displays the Create User Defined Migration Data Base dialog. Click 
  226.       on the Select1 push button to choose the directory name in which to store 
  227.       the Open32 UDMD. 
  228.  
  229.    5. SMART displays the Select User UDMD Directory dialog. In the New Path: 
  230.       entry field, type the subdirectory: 
  231.  
  232.             SMART\SMARTAUX\DAPIE32
  233.  
  234.       Click on the Ok push button. 
  235.  
  236.    6. SMART returns to the Create User Defined Migration Data Base dialog. 
  237.       Click on the Select2 push button. 
  238.  
  239.    7. SMART displays the Select Input Dictionary Filename dialog. In the File: 
  240.       entry field, type the dictionary filename: 
  241.  
  242.             DAPIE32.DCT
  243.  
  244.       Click on the Ok push button. 
  245.  
  246.    8. SMART displays the Create User Defined Migration Data Base dialog. Click 
  247.       on the Process push button. 
  248.  
  249.    9. On the SMART2 Source Migration window. To load the correct table and 
  250.       Open32 UDMD, select the Tables pull-down. Select the Select Tables 
  251.       pull-down. 
  252.  
  253.   10. SMART displays the Migrations Tables dialog.  Click on the Select1 push 
  254.       button to select a table. 
  255.  
  256.   11. SMART displays the Select SMART Migration Table Filename dialog. 
  257.  
  258.         a. Go to the SMART\TABLES\WIN32OS2 subdirectory. 
  259.         b. Choose WIN32OS2.TBL. 
  260.         c. Click on the Ok push button. 
  261.  
  262.   12. SMART displays the Migration Tables dialog. 
  263.  
  264.       Click the User UDMD with SMART Table radio button. 
  265.  
  266.       Click on the Select2 push button to select a UDMD. 
  267.  
  268.   13. SMART displays the Select User UDMD Table Directory dialog. 
  269.  
  270.       Choose the SMART\SMARTAUX\DAPIE32 subdirectory. 
  271.  
  272.       Click on the Ok push button. 
  273.  
  274.   14. SMART displays the Migration Tables dialog. 
  275.  
  276.       Click on the Set push button to load the table and UDMD. When the Please 
  277.       Standby...Loading Migration Table message disappears, SMART displays the 
  278.       SMART2 Source Migration window. 
  279.  
  280.  
  281. ΓòÉΓòÉΓòÉ 5. Analyzing Windows Code and Resource Files ΓòÉΓòÉΓòÉ
  282.  
  283. You can use SMART to analyze your Windows code and resource files to determine 
  284. how much effort is involved to migrate to OS/2 code and resource files. See: 
  285.  
  286.      Telling SMART Where the Source Files Are 
  287.      Analyzing Windows Code 
  288.      Analyzing Windows Resource Files 
  289.  
  290.  
  291. ΓòÉΓòÉΓòÉ 5.1. Starting SMART ΓòÉΓòÉΓòÉ
  292.  
  293.    1. Double-click on the SMART2 Toolset icon. SMART displays the SMART2 - Icon 
  294.       View window, shown in step Creating the Open32 UDMD. 
  295.  
  296.    2. Double-click on the SMART2 Source Migration icon, shown in step Creating 
  297.       the Open32 UDMD. 
  298.  
  299.  
  300. ΓòÉΓòÉΓòÉ 5.2. Telling SMART Where the Source Files Are ΓòÉΓòÉΓòÉ
  301.  
  302. SMART requires that you build files with an extension of LST to indicate the 
  303. names of your source code and header files. 
  304.  
  305. Note:  If you already have compiler listings, they will probably have LST 
  306. extensions. Make sure you do not name the LST file you use for SMART with the 
  307. same name you have used as a compiler listing: When you recompile, the SMART 
  308. LST file will be overwritten. 
  309.  
  310. The following instructions tell you how to create a LST file for the first time 
  311. or indicate to SMART which LST file to use for analysis: 
  312.  
  313.    1. On the SMART2 Source Migration window, go to the File pull-down. Select 
  314.       Maintain a List-of-Files. 
  315.  
  316.    2. SMART displays the Select File for List-of-Files dialog. 
  317.  
  318.         a. If you already have a LST file you want to use, simply select it and 
  319.            click on the Ok push button. Then go to Analyzing Windows Code. 
  320.  
  321.         b. If you have not created a LST file, create one from this dialog: 
  322.  
  323.              1. In the File entry field, type the name of the LST file you wish 
  324.                 to create. 
  325.              2. Click on the Ok push button. 
  326.  
  327.    3. SMART displays the following message box. Click on the OK push button. 
  328.  
  329.    4. SMART displays the Files List dialog. Click on the Add push button. 
  330.  
  331.    5. SMART displays the Add Files To List dialog. 
  332.  
  333.         a. Select the files you want to analyze from the Filenames list box. 
  334.         b. Click on the Add push button. 
  335.         c. When you have finished adding files to the LST file, click on the 
  336.            Close push button. 
  337.  
  338.    6. SMART displays the Files List dialog. 
  339.  
  340.       Click on the Save push button to save the LST file you created. 
  341.  
  342.  
  343. ΓòÉΓòÉΓòÉ 5.3. Analyzing Windows Code ΓòÉΓòÉΓòÉ
  344.  
  345. Before analyzing source code, ensure the correct tables are loaded: 
  346.  
  347.    1. Select the Tables pull-down from SMART2 Source Migration window. Select 
  348.       the Current Table Info... pull-down. 
  349.  
  350.    2. SMART displays the Current Table Information informational dialog. 
  351.  
  352.       The SMART Filename in the SMART Table Filename group box should be 
  353.       WIN32OS2.TBL. The User UDMD Directory in the User UDMD Migration Data 
  354.       Base Directory group box should be SMART\SMARTAUX\DAPIE32. 
  355.  
  356.         a. If both are correct, click on the Ok push button and continue. 
  357.         b. If you need to change these fields, follow step Creating the Open32 
  358.            UDMD. 
  359.  
  360.    3. SMART displays the SMART2 Source Migration window. 
  361.  
  362.         a. Go to the Analysis pull-down. 
  363.         b. Select Analyze Source Code. 
  364.  
  365.    4. SMART displays the Analysis Process Options using Override Table Only 
  366.       dialog. In this dialog, SMART automatically chooses the list of files you 
  367.       created previously. (See Telling SMART Where the Source Files Are.) 
  368.       Either: 
  369.  
  370.           Leave the defaults in this window 
  371.           Select a different LST file by either: 
  372.              a. Typing a different LST file in the List-of-Files entry field 
  373.                 using the full path name 
  374.              b. Click on the Select push button next to the List-of-Files entry 
  375.                 field to see a dialog for selecting a new LST file. 
  376.  
  377.       Click on the Process push button. 
  378.  
  379.    5. SMART displays a progress informational dialog to show the progress of 
  380.       the analysis. 
  381.  
  382.    6. SMART displays an initial analysis report in the SMART2 Source Migration 
  383.       window. 
  384.  
  385.    7. To see other analysis reports, go to the File pull-down and choose 
  386.       Open/View File(s) 
  387.  
  388.    8. The file with the extension RPT is the code analysis report. Select this 
  389.       report. Click on the Open push button to view the report. 
  390.  
  391.    9. SMART displays the report in the SLink - The Smart Editor window. Use the 
  392.       Help pull-down on this window to get information about reports. 
  393.  
  394.  
  395. ΓòÉΓòÉΓòÉ 5.4. Analyzing Windows Resource Files ΓòÉΓòÉΓòÉ
  396.  
  397.    1. On the SMART2 Source Migration window, go to the Analysis pull-down. 
  398.       Select Analyze Resource Code. 
  399.  
  400.    2. SMART displays the Select File for a List-of-Resource-Files dialog. In 
  401.       this dialog, SMART2 automatically chooses the list of files you created 
  402.       previously. (See Telling SMART Where the Source Files Are.) 
  403.  
  404.         a. Select the list (LST) of files that contains the RC files to 
  405.            analyze. 
  406.         b. Click on the Ok push button. 
  407.  
  408.    3. SMART displays the Resource Translation Analysis dialog. Click on the 
  409.       Process push button. 
  410.  
  411.    4. SMART displays a progress informational dialog to show the progress of 
  412.       the analysis. 
  413.  
  414.    5. SMART returns you to the SMART2 Source Migration window. To see the 
  415.       resource analysis report: 
  416.  
  417.         a. Go to the File pull-down. 
  418.  
  419.         b. Choose Open/View File(s) 
  420.  
  421.         c. The file with the extension SUM is the resource analysis report. 
  422.            Select SUM report. 
  423.  
  424.         d. Click on the Open push button to view the report. 
  425.  
  426.         e. SMART displays the report in the SLink - The Smart Editor window. 
  427.            Use the Help pull-down on this window to get information about this 
  428.            report. 
  429.  
  430.  
  431. ΓòÉΓòÉΓòÉ 6. Migrating Windows Code, Resource Files, and Help Files ΓòÉΓòÉΓòÉ
  432.  
  433. You can use SMART to migrate your Windows code, resource and help files to 
  434. code, resource and help files that will compile in both Windows and OS/2. You 
  435. can also use Hyperwise Lite to migrate Windows 32-bit help files to OS/2 help 
  436. files. See the documentation that accompanies the Hyperwise Lite tool. 
  437.  
  438. To use SMART, see: 
  439.  
  440.      Migrating Windows Code 
  441.      Migrating Windows Resource Files 
  442.      Migrating Windows Help Files 
  443.  
  444.  
  445. ΓòÉΓòÉΓòÉ 6.1. Starting SMART ΓòÉΓòÉΓòÉ
  446.  
  447.    1. Double-click on the SMART2 Toolset icon. SMART displays the SMART2 - Icon 
  448.       View window, shown in step Creating the Open32 UDMD. 
  449.  
  450.    2. Double-click on the SMART2 Source Migration icon, shown in step Creating 
  451.       the Open32 UDMD. 
  452.  
  453.  
  454. ΓòÉΓòÉΓòÉ 6.2. Migrating Windows Code ΓòÉΓòÉΓòÉ
  455.  
  456. Note:  These steps tell you how to migrate Windows 32-bit code only. 
  457.  
  458. Before migrating source code, ensure the correct tables are loaded: 
  459.  
  460.    1. Select the Tables pull-down from SMART2 Source Migration window. Select 
  461.       the Current Table Info... pull-down. 
  462.  
  463.    2. SMART displays the Current Table Information informational dialog. 
  464.  
  465.       The SMART Filename in the SMART Table Filename group box should be 
  466.       WIN32OS2.TBL. The User UDMD Directory in the User UDMD Migration Data 
  467.       Base Directory group box should be SMART\SMARTAUX\DAPIE32. 
  468.  
  469.         a. If both are correct, click on the Ok push button and continue. 
  470.         b. If you need to change these fields, follow step Creating the Open32 
  471.            UDMD. 
  472.  
  473.    3. On the SMART2 Source Migration window, go to the Migration pull-down. 
  474.       Select Migrate Source Code. 
  475.  
  476.    4. SMART displays the Migration Process Options using UDMD Table Only 
  477.       dialog. SMART automatically enters the name of the LST file you initially 
  478.       created in the List-of-Files entry field. You can use this file name or 
  479.       type in another file name. Click on the Process push button. 
  480.  
  481.    5. SMART displays the SMART2 Source Migration window. 
  482.  
  483.         a. Go to the File pull-down. 
  484.         b. Select Open/View File(s). 
  485.  
  486.    6. SMART displays the Open/View File dialog. If you chose the overwrite 
  487.       original option from the Migrate Source Code option, SMART places the 
  488.       converted C code in the file with the C extension and places the 
  489.       converted header file in the file with the H extension. Otherwise, the 
  490.       file with the extension C_X is the converted C code and the file with the 
  491.       extension H_X is the converted header file. 
  492.  
  493.       Select the converted files. 
  494.  
  495.       Click on the Open push button to view the code. 
  496.  
  497.    7. SMART displays the code in the SLink - The Smart Editor window. The 
  498.       comments in the code indicate what SMART2 did to convert your code. Use 
  499.       the Help pull-down on this window to get information about the migrated 
  500.       code. 
  501.  
  502.  
  503. ΓòÉΓòÉΓòÉ 6.3. Migrating Windows Resource Files ΓòÉΓòÉΓòÉ
  504.  
  505.    1. On the SMART2 Source Migration window, go to the Resources pull-down. 
  506.       Select Translate Resources. 
  507.  
  508.    2. SMART displays the Resource Translation dialog. Click on the Select push 
  509.       button next to the Resource Filename: entry field. 
  510.  
  511.    3. SMART displays the Select Resource Filename dialog. Select a resource 
  512.       file. Check the Send error file to editor check box so that SMART logs 
  513.       status information. Click on the Ok push button. 
  514.  
  515.    4. SMART displays the Resource Translation dialog. Click on the Process push 
  516.       button. 
  517.  
  518.    5. SMART displays the SMART2 Source Migration window. Go to the File 
  519.       pull-down. Select Open/View File(s). 
  520.  
  521.    6. SMART displays the Open/View File dialog. Select the converted resource 
  522.       file. Click on the Open push button to view the resource file. 
  523.  
  524.    7. SMART displays the resource file in the SLink - The Smart Editor window. 
  525.       The comments in the resource file indicate what SMART did to convert your 
  526.       resource file. Use the Help pull-down on this window to get information 
  527.       about the migrated resource file. 
  528.  
  529.  Note:  The Resource Translator in SMART allows the choice of converting 
  530.  resources in one of the following formats: 
  531.  
  532.    1. String id: Check the Supports String ID check box when using the Open32 
  533.       functions for resources. The .hhh file is not required. The Resource 
  534.       Compiler accepts the resources with ids specified as quoted strings. 
  535.  
  536.    2. Integer id: Make sure the Supports String ID check box is not checked in 
  537.       order to generate the required .hhh file. This file defines the resource 
  538.       ids for use with the OS/2 Warp native functions. 
  539.  
  540.  
  541. ΓòÉΓòÉΓòÉ 6.4. Migrating Windows Help Files ΓòÉΓòÉΓòÉ
  542.  
  543. You can use either SMART or Hyperwise Lite to migrate Windows 32-bit help files 
  544. to OS/2 help files. See the Hyperwise Lite documentation for information on 
  545. using Hyperwise Lite to migrate help files. 
  546.  
  547. Follow these steps use SMART to convert a Windows rich text format (RTF) file 
  548. to an OS/2 help (IPF) file: 
  549.  
  550.    1. On the SMART2 Source Migration window, go to the Resources pull-down. 
  551.       Select Translate Win Help. 
  552.  
  553.    2. SMART displays the Select Help Input Filename dialog. Create an HPJ file 
  554.       that contains the name of the RTF file to be converted along with any 
  555.       bitmap names that are needed. 
  556.  
  557.       A sample HPJ file is: 
  558.  
  559.             ..SMARTAUX\SAMPLE.HPJ
  560.  
  561.    3. SMART displays the Win Help Translator dialog. Enter the name, including 
  562.       the path, of the HPJ file in the Input Filename entry field. 
  563.  
  564.       Choose the rest of the options as they apply. Generally, you will need to 
  565.       use most of the options. These are some of the options you might choose: 
  566.  
  567.           Check the Send error file to editor check box so that SMART logs the 
  568.            status information. 
  569.  
  570.           If the output will be used by an application, choose Output .HLP 
  571.            file. 
  572.  
  573.           If the output will be independent, like a users' reference, choose 
  574.            Output .INF file. 
  575.  
  576.           To view the output, create an INF file. Use the OS/2 VIEW command to 
  577.            view the INF file. 
  578.  
  579.           Unless you choose the Convert to IPF Only option, SMART will produce 
  580.            the IPF file and automatically send it to the IPF compiler. In that 
  581.            case, SMART will produce an INF or HLP file (depending on which 
  582.            option you choose). If you choose the Convert to IPF Only option, 
  583.            SMART produces the IPF file, but does not compile it. 
  584.  
  585.       When you choose all the options you need, click on the Ok push button. 
  586.  
  587.    4. SMART does not display a status on the conversion process for a HELP 
  588.       document. If you choose the Send Error File to Editor option, then the 
  589.       process will be complete when SMART displays the error file. Otherwise, 
  590.       watch the OS/2 window in the background to ensure that the Help 
  591.       conversion process is complete. 
  592.  
  593.    5. Output from the Help conversion will depend on which options you choose. 
  594.       If you did not enter anything in the Output Filename entry field, SMART 
  595.       writes the file will to the same directory as the input file. 
  596.  
  597.       Note:  The online help explains the error messages. To view the error 
  598.       message explanations, choose HELP from the Win Help Translator dialog 
  599.       panel. Then choose Win Help Translator Topics. After that, choose Win 
  600.       Help Translator Messages. 
  601.  
  602.       Please note that you must have the IPF compiler (IPFC.EXE) for SMART Win 
  603.       Help translation. Information Presentation Facility (IPF) is available 
  604.       from the IBM Developer's Toolkit. 
  605.  
  606.  
  607. ΓòÉΓòÉΓòÉ 7. Windows and Open32 Differences ΓòÉΓòÉΓòÉ
  608.  
  609. The following are the differences between Windows 32-bit and OS/2 Warp 
  610. functions' behaviors. These differences were discovered by testing Windows NT 
  611. and OS/2 Warp functions. References to Windows and Windows 32-bit in this 
  612. section apply to the Windows NT operating system. 
  613.  
  614.  
  615. ΓòÉΓòÉΓòÉ 7.1. Accelerator Tables ΓòÉΓòÉΓòÉ
  616.  
  617. The following sections describe the differences between Windows and OS/2 
  618. accelerator tables. 
  619.  
  620.  
  621. ΓòÉΓòÉΓòÉ 7.1.1. System Accelerator Table ΓòÉΓòÉΓòÉ
  622.  
  623. In Windows, the system accelerator table is processed inside the GetMessage 
  624. function before an application calls TranslateAccelerator for its own 
  625. accelerator table.  Consequently, in OS/2, all keystrokes handled by the OS/2 
  626. system accelerator table will be filtered before returning from GetMessage. 
  627. Most notably, an OS/2 application will never see the F1 key, which it would see 
  628. under Windows. 
  629.  
  630.  
  631. ΓòÉΓòÉΓòÉ 7.1.2. Keyboard Shift States ΓòÉΓòÉΓòÉ
  632.  
  633. In Windows, the shift state of a key is ignored unless explicitly specified. 
  634. For example: 
  635.  
  636. ID _ MYACCELTABLE  ACCELERATORS
  637.   BEGIN
  638.     " a " ,  ID _ LOWERA ,  ASCII
  639.     " B " ,  ID _ UPPERB ,  ASCII  SHIFT
  640.   END
  641.  
  642. This accelerator table generates a WM_COMMAND of ID_LOWERA when the user clicks 
  643. on the "a" key or "Shift+a" keys (with Caps Lock ON). However, a WM_COMMAND of 
  644. ID_UPPERB will be generated only when you click on the "Shift+b" keys (with 
  645. Caps Lock OFF). 
  646.  
  647. In OS/2, the shift state of a key must be specified explicitly:  The equivalent 
  648. OS/2 accelerator table would look like: 
  649.  
  650. ACCELTABLE  ID _ MYACCELTABLE
  651.   BEGIN
  652.     " a " ,  ID _ LOWERA ,  CHAR
  653.     " a " ,  ID _ LOWERA ,  CHAR  SHIFT  / *  Additional  entry  to  allow  SHIFT + a  * /
  654.     " B " ,  ID _ UPPERB ,  CHAR  SHIFT
  655.   END
  656.  
  657. For Open32, the OS/2 model is followed; accelerator table entries that do not 
  658. specify SHIFT will not generate WM_COMMAND messages when the user clicks on the 
  659. Shift key. 
  660.  
  661.  
  662. ΓòÉΓòÉΓòÉ 7.2. Class Names ΓòÉΓòÉΓòÉ
  663.  
  664. Windows class names are case insensitive.  OS/2 class names are case sensitive. 
  665. Open32 converts class names to uppercase before registering them with OS/2.  In 
  666. general, Open32 that deal with class names work as expected, with respect to 
  667. Windows; for example, GetClassInfo returns the class name exactly as it was 
  668. originally registered.  One important difference occurs with resource files, 
  669. however.  Open32 does not currently support Windows resources; Open32 resources 
  670. are really OS/2 resources.  If an Open32 resource contains a user-defined 
  671. class, the class name must be converted to uppercase because that it how the 
  672. class is registered internally with OS/2. 
  673.  
  674.  
  675. ΓòÉΓòÉΓòÉ 7.3. Class Styles ΓòÉΓòÉΓòÉ
  676.  
  677. The following class styles are not supported by Open32: 
  678.  
  679.       CS_CLASSDC 
  680.       CS_PARENTDC 
  681.  
  682.  
  683. ΓòÉΓòÉΓòÉ 7.4. Clipboard Viewer Chain ΓòÉΓòÉΓòÉ
  684.  
  685. In implementations of Win32 other than the OS/2 version, applications are 
  686. responsible for keeping track of the viewer chain and behaving well. In OS/2, 
  687. OS/2 keeps track of the viewer chain, meaning that an application will always 
  688. think that there is no viewer following it in the chain, and applications will 
  689. never receive the WM_CHANGECBCHAIN message. 
  690.  
  691.  
  692. ΓòÉΓòÉΓòÉ 7.5. Combination Boxes ΓòÉΓòÉΓòÉ
  693.  
  694. In Windows, a combination box consists of an edit control, which is a child of 
  695. the combination box control and a list box control, which is a child of the 
  696. Desktop window.  When the list box is dropped, the list box becomes a child of 
  697. the combination box and reverts to being a child of the Desktop when it is 
  698. closed. 
  699.  
  700. In Open32, a combination box consists of an edit control, which is a child of 
  701. the combination box control and a list box control which is a child of the 
  702. object window.  When the list box is dropped, the list box becomes a child of 
  703. the combination box and reverts to being a child of the root object window when 
  704. it is closed. 
  705.  
  706. You will need to slightly modify application code to enumerate and find a 
  707. combination list box control in Windows. For the starting parameter in your 
  708. enumeration routines, use the following for each platform: 
  709.  
  710.  Windows             Desktop window (GetDesktopWindow) 
  711.  
  712.  Open32              Object window (HWND_OBJECT) 
  713.  
  714.  When creating an Open32 window that will have combination box children, do not 
  715.  use the CLIPCHILDREN flag. 
  716.  
  717.  
  718. ΓòÉΓòÉΓòÉ 7.6. Common Open and Save File Dialog ΓòÉΓòÉΓòÉ
  719.  
  720. In OS/2 there is a default filter of All Files that cannot be removed from the 
  721. Type of File combination box.  In Windows, there is no default filter.  If a 
  722. Win32 developer adds one or more filters (including, perhaps, an All Files 
  723. filter), the Type of File combination box will still have All Files as a 
  724. choice. 
  725.  
  726. But, if a developer does add one or more filters, there is no way to have the 
  727. OS/2 All Files filter come up as the default selection. Developers should be 
  728. cautioned not to remove the All Files entry if they want the option of 
  729. selecting it as their default choice. 
  730.  
  731. The actual filtering mechanism also behaves quite a bit differently in OS/2: 
  732.  
  733.      In Win32, filtering is centralized, and the current filter can be changed 
  734.       in two different ways: 
  735.  
  736.         -  By typing a filter in the File Name edit box (using wild card 
  737.            characters) 
  738.         -  By selecting a filter from the List Files Of Type combination box 
  739.  
  740.      In OS/2, the filtering is based on an intersection (or union if the 
  741.       proper flag is set) of the contents of the File Name field and the filter 
  742.       currently selected in the Type of File combination box.  This might seem 
  743.       awkward to Windows programmers because an intersection of a file name of 
  744.       *.txt and a filter of *.hlp will not display anything (even if txt and 
  745.       hlp files exist) and a file name of *.* and a filter of *.hlp will 
  746.       display only hlp files. 
  747.  
  748.      In Win32, if a filter is selected from the List Files of Type list and 
  749.       the File Name field currently contains wild card characters, then the 
  750.       File Name field will be updated with the selected filter string. 
  751.  
  752.       For example, if File Name contains *.txt or shell.?pp and the user 
  753.       selects List Files of Type filter of All Files (*.*), then File Name will 
  754.       be set to *.*. 
  755.  
  756.  
  757. ΓòÉΓòÉΓòÉ 7.7. Coordinate Spaces ΓòÉΓòÉΓòÉ
  758.  
  759. The maximum coordinates allowed in Win32 are not the same as those allowed in 
  760. OS/2.  These maximums are: 
  761.  
  762. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  763. ΓöéWorld/Page               Γöé-2[31] to 2[31]-1        Γöé-2[27] to 2[27]-1        Γöé
  764. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  765. ΓöéDevice                   Γöé-2[27] to 2[27]-1        Γöé-2[15] to 2[15]-1        Γöé
  766. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  767.  
  768. Passing extreme values to the Open32 graphics display interface (GDI) function, 
  769. even though the values might fall within the above ranges, is not guaranteed to 
  770. work. There are many factors that can influence whether or not a particular 
  771. graphics programming interface (GPI) function with a given set of extreme 
  772. values will provide the expected behavior or not.  It is nearly impossible to 
  773. establish guaranteed maximum coordinates on a per function basis.  Because of 
  774. this, programming tricks that involve passing maximum values to GDI functions 
  775. is discouraged and not guaranteed to work.  An example of such a trick would be 
  776. to call FillRect with the maximum allowed coordinates to clear a window.  Such 
  777. a call might not work and should be avoided. 
  778.  
  779.  
  780. ΓòÉΓòÉΓòÉ 7.8. Device Context (DC) for Display Device Driver ΓòÉΓòÉΓòÉ
  781.  
  782. Device context (DC) for display device drivers cannot be deleted through the 
  783. DeleteDC function.  A display DC gets deleted automatically when its associated 
  784. window is deleted.  If DeleteDC is called to delete a display DC, a success 
  785. return code (TRUE) is returned, but the DC does not get physically deleted. 
  786.  
  787.  
  788. ΓòÉΓòÉΓòÉ 7.9. DEVMODE Structure and DeviceCapabilities Function ΓòÉΓòÉΓòÉ
  789.  
  790. Open32 supports the Win32 DeviceCapabilities function but does not support the 
  791. old Windows method of loading the printer driver and accessing an internal 
  792. DeviceCapabilities function.  Any application that tries to use 
  793. DeviceCapabilities or a DEVMODE structure to set or query a printer driver must 
  794. have the proper Dynamic Job Properties (DJP)-enabled OS/2 print drivers 
  795. installed. 
  796.  
  797.  
  798. ΓòÉΓòÉΓòÉ 7.10. Dialog Styles ΓòÉΓòÉΓòÉ
  799.  
  800. Windows NT does not support system modal dialog boxes.  Therefore, if a user 
  801. specifies DS_SYSMODAL style in the resource file for the dialog box it is 
  802. ignored.  However, with Open32, the DS_SYSMODAL style is converted by the SMART 
  803. tool to FCF_SYSMODAL and the dialog is implemented as a system modal dialog 
  804. box.  Windows 3.x does support System Modal dialog boxes. 
  805.  
  806.  
  807. ΓòÉΓòÉΓòÉ 7.11. File Pointers ΓòÉΓòÉΓòÉ
  808.  
  809. OS/2 file pointers are limited to 32 bits, whereas in Windows NT, some 
  810. functions support 64-bit file pointers. 
  811.  
  812.  
  813. ΓòÉΓòÉΓòÉ 7.12. Functions ΓòÉΓòÉΓòÉ
  814.  
  815. The following Open32 functions behave differently than their Windows 32-bit 
  816. counterparts. 
  817.  
  818.  
  819. ΓòÉΓòÉΓòÉ 7.12.1. AdjustWindowRect ΓòÉΓòÉΓòÉ
  820.  
  821. The OS/2 version of AdjustWindowRect does not emulate the Windows 32-bit 
  822. version.  The OS/2 version calculates the adjustment required to accommodate 
  823. the window that CreateWindow places on the screen, as long as the caller passes 
  824. the same rectangle structure pointer and style parameters to AdjustWindowRect 
  825. and CreateWindow. 
  826.  
  827. Note:  In Windows, if you call AdjustWindowRect with a NULL style parameter (to 
  828. indicate the Overlapped style), Windows does not adjust the rectangle.  Yet, if 
  829. CreateWindow is called with the same NULL style parameter, a caption is added. 
  830. If the caller tries to use the rectangle returned by AdjustWindowRect to size a 
  831. window of this style, the sizing is off when the window is created.  Many other 
  832. style parameters are treated with this kind of inconsistency in Windows.  In 
  833. terms of window sizing, Windows is consistent with itself only where dialogs 
  834. and overlapped windows are concerned.  These are the only kinds of windows that 
  835. really have client areas in Windows. 
  836.  
  837.  
  838. ΓòÉΓòÉΓòÉ 7.12.2. AdjustWindowRectEx ΓòÉΓòÉΓòÉ
  839.  
  840. The OS/2 version of AdjustWindowRectEx does not emulate the Windows 32-bit 
  841. version.  Instead, the OS/2 function calculates the amount of adjustment 
  842. necessary to accommodate the window that CreateWindow places on the screen, so 
  843. long as the caller passes the same rectangle structure pointer and style 
  844. parameters to AdjustWindowRectEx and CreateWindow. 
  845.  
  846. Note:  In Windows, if you call AdjustWindowRectEx with a NULL style parameter 
  847. (to indicate the Overlapped style), Windows does not adjust the rectangle. 
  848. Yet, if CreateWindow is called with the same NULL style parameter, a caption is 
  849. added.  If the caller tries to use the rectangle returned by AdjustWindowRectEx 
  850. to size a window of this style, the sizing is off when the window is created. 
  851. Many other style parameters are treated with this kind of inconsistency in 
  852. Windows. In terms of window sizing, Windows is consistent with itself only 
  853. where dialogs and overlapped windows are concerned.  These are the only kinds 
  854. of windows that really have client areas in Windows. 
  855.  
  856.  
  857. ΓòÉΓòÉΓòÉ 7.12.3. BitBlt ΓòÉΓòÉΓòÉ
  858.  
  859. Logical color palettes cannot contain more entries than the color-depth of the 
  860. video driver (for example, on a 256-color driver, you cannot call the BitBlt 
  861. function with a color palette of more than 256). 
  862.  
  863. The XGA video driver (and all based on it) cannot handle being passed a palette 
  864. larger than 256 on a machine that has a color-depth of 256.  It is possible to 
  865. do this, but the video driver traps. 
  866.  
  867.  
  868. ΓòÉΓòÉΓòÉ 7.12.4. Chord ΓòÉΓòÉΓòÉ
  869.  
  870. OS/2 allows these maximum coordinates: 
  871.  
  872.      -134217728 to 134217727 (world and page spaces) 
  873.      -32768 to 32767 (device spaces) 
  874.  
  875.  If you use INT_MAX (2147483647) or INT_MIN (-2147483646) for maximum or 
  876.  minimum coordinates, Chord does not function properly. 
  877.  
  878.  
  879. ΓòÉΓòÉΓòÉ 7.12.5. CloseClipboard ΓòÉΓòÉΓòÉ
  880.  
  881. In OS/2, GlobalFree is not needed to release the memory for CloseClipboard.  If 
  882. GlobalFree is called after the CloseClipboard call, CloseClipboard fails. 
  883.  
  884.  
  885. ΓòÉΓòÉΓòÉ 7.12.6. CloseEnhMetaFile ΓòÉΓòÉΓòÉ
  886.  
  887. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  888. acceptable for the applications for which it was developed. 
  889.  
  890.  
  891. ΓòÉΓòÉΓòÉ 7.12.7. CloseFigure ΓòÉΓòÉΓòÉ
  892.  
  893. CloseFigure returns FALSE if no path exists. 
  894.  
  895.  
  896. ΓòÉΓòÉΓòÉ 7.12.8. CopyEnhMetaFile ΓòÉΓòÉΓòÉ
  897.  
  898. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  899. acceptable for the applications for which it was developed. 
  900.  
  901.  
  902. ΓòÉΓòÉΓòÉ 7.12.9. CreateAcceleratorTable ΓòÉΓòÉΓòÉ
  903.  
  904. OS/2 does not support FNOINVERT_W. For character VKeys, OS/2 generates two 
  905. accelerator entries:  one uppercase; one lowercase. 
  906.  
  907.  
  908. ΓòÉΓòÉΓòÉ 7.12.10. CreateBitmap ΓòÉΓòÉΓòÉ
  909.  
  910. In OS/2, the bitmap width and height are bounded by screen resolution.  For 
  911. example, for a screen resolution of 1024 x 768, the bitmap: 
  912.  
  913.      Width must be between 0 and 1024 
  914.      Height must be between 0 and 768 
  915.  
  916.  The plane count usually does not work if greater than 1 because of the 
  917.  restriction of the physical device.  OS/2 supports a bits-per-pel count of: 
  918.  
  919.      1 
  920.      4 
  921.      8 
  922.      24 
  923.  
  924.  Any other value fails. 
  925.  
  926.  Note:  Testing of the Windows 32-bit CreateBitMap function shows that if 
  927.  CreateBitmap is called to get a handle of a one-plane device-dependent bitmap, 
  928.  and the third parameter (cPlanes) is greater than one, a handle is returned as 
  929.  if CreateBimap was successful. However, a subsequent call to BitBlt or PatBlt 
  930.  reveals that this handle is not valid, because even though no error is 
  931.  returned, no bitmap appears.  The OS/2 implementation of CreateBitmap fails in 
  932.  this case (that is, if the plane count is greater than one).  In other words, 
  933.  the return value from our implementation of CreateBitmap is NULL.  This is 
  934.  because the underlying call to GpiCreateBitmap returns an error in this case. 
  935.  
  936.  
  937. ΓòÉΓòÉΓòÉ 7.12.11. CreateBitmapIndirect ΓòÉΓòÉΓòÉ
  938.  
  939. In OS/2, the bitmap width and height are bounded by screen resolution.  For 
  940. example, for a screen resolution of 1024 x 768, the bitmap: 
  941.  
  942.      Width must be between 0 and 1024 
  943.      Height must be between 0 and 768 
  944.  
  945.  The plane count usually does not work if greater than 1 because of the 
  946.  restriction of the physical device.  OS/2 supports a bits per pel count of: 
  947.  
  948.      1 
  949.      4 
  950.      8 
  951.      24 
  952.  
  953.  Any other value fails. 
  954.  
  955.  
  956. ΓòÉΓòÉΓòÉ 7.12.12. CreateCaret ΓòÉΓòÉΓòÉ
  957.  
  958. OS/2 does not support logical unit specification for the size of the caret; the 
  959. units are always assumed to be in pels.  In Windows, the sizes are in logical 
  960. units. 
  961.  
  962.  
  963. ΓòÉΓòÉΓòÉ 7.12.13. CreateCompatibleDC ΓòÉΓòÉΓòÉ
  964.  
  965. In Windows, it is possible to create a monochrome memory device context (DC) 
  966. and then BitBlt it to the screen.  In OS/2, if you try to do this, the drawing 
  967. appears black. 
  968.  
  969. In OS/2, do not draw to a monochrome memory DC.  In addition, VGA and XGA 
  970. drivers behave differently when you try to do this in OS/2. 
  971.  
  972. In OS/2, you should instead draw to a color DC and then BitBlt into a 
  973. monochrome DC. 
  974.  
  975.  
  976. ΓòÉΓòÉΓòÉ 7.12.14. CreateCursor ΓòÉΓòÉΓòÉ
  977.  
  978. As in Windows, the width and height parameters to this function must specify a 
  979. width and height that are supported by the current display driver.  Because 
  980. OS/2 supports only bitmaps padded to 32 bits (where Windows 32-bit bitmaps are 
  981. padded to 16 bits), the OS/2 implementation of this function might be more 
  982. restrictive than the Windows 32-bit implementation depending on the driver. 
  983.  
  984.  
  985. ΓòÉΓòÉΓòÉ 7.12.15. CreateDialogIndirect ΓòÉΓòÉΓòÉ
  986.  
  987. In OS/2, CreateDialogIndirect supports OS/2 dialog templates only; these 
  988. functions do not accept Windows dialog templates. 
  989.  
  990.  
  991. ΓòÉΓòÉΓòÉ 7.12.16. CreateDialogIndirectParam ΓòÉΓòÉΓòÉ
  992.  
  993. In OS/2, CreateDialogIndirectParam supports OS/2 dialog templates only; these 
  994. functions do not accept Windows dialog templates. 
  995.  
  996.  
  997. ΓòÉΓòÉΓòÉ 7.12.17. CreateEllipticRgn ΓòÉΓòÉΓòÉ
  998.  
  999. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1000. this is a GPI restriction. 
  1001.  
  1002.  
  1003. ΓòÉΓòÉΓòÉ 7.12.18. CreateEllipticRgnIndirect ΓòÉΓòÉΓòÉ
  1004.  
  1005. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1006. this is a GPI restriction. 
  1007.  
  1008.  
  1009. ΓòÉΓòÉΓòÉ 7.12.19. CreateEnhMetaFile ΓòÉΓòÉΓòÉ
  1010.  
  1011. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1012. acceptable for the applications for which it was developed. 
  1013.  
  1014.  
  1015. ΓòÉΓòÉΓòÉ 7.12.20. CreateEvent ΓòÉΓòÉΓòÉ
  1016.  
  1017. OS/2 allows backslashes in the object name; Windows prohibits them. 
  1018.  
  1019.  
  1020. ΓòÉΓòÉΓòÉ 7.12.21. CreateFile ΓòÉΓòÉΓòÉ
  1021.  
  1022. In Windows, CreateFile assumes that application designers are careful not to 
  1023. overwrite or delete files; CreateFile allows write and delete operations to be 
  1024. performed regardless of file attribute settings and regardless of the manner in 
  1025. which the file is accessed.  This behavior might be somehow in keeping with the 
  1026. security implementation of Windows, but it differs from current industry 
  1027. standards on most other platforms. 
  1028.  
  1029. In Windows NT, there is a privilege level that allows directories and files to 
  1030. be deleted even if it has the read-only file attribute set.  This privilege 
  1031. level, called full control privilege, applies to the NTFS file system.  Judging 
  1032. by the behavior of the CreateFile, WriteFile, and DeleteFile functions on 
  1033. Windows NT, it appears that the full control privilege level is implemented in 
  1034. Windows NT as the default privilege level for FAT and other file systems as 
  1035. well.  In Windows NT, if the CREATE_ALWAYS parameter is used, CreateFile 
  1036. deletes any file of the same name that currently exists, regardless of its 
  1037. attributes, and regardless of the access mode set by fdwAccess.  The OS/2 
  1038. version of CreateFile fails if CREATE_ALWAYS is used and the access mode is set 
  1039. to read-only. 
  1040.  
  1041.  
  1042. ΓòÉΓòÉΓòÉ 7.12.22. CreateFont ΓòÉΓòÉΓòÉ
  1043.  
  1044. The font matching capabilities of Windows NT differ from the capabilities in 
  1045. OS/2. Specifically, some of the parameters that can be passed to the Windows NT 
  1046. version of CreateFont cannot be passed to the OS/2 version of CreateFont: 
  1047.  
  1048.      nCharSet 
  1049.      nOrientation 
  1050.      outPrecis - only OUT_OUTLINE_PRECIS and OUT_STROKE_PRECIS bits are valid 
  1051.      clipPrecis 
  1052.      outQual 
  1053.      nEscapement 
  1054.      fdwPitchAndFamily - ignore pitch (PROPORTIONAL/FIXED), but honor family 
  1055.  
  1056.  The OS/2 version of CreateFont treats OUT_OUTLINE_PRECIS and OUT_STROKE_PRECIS 
  1057.  identically.  Although either can be passed to the OS/2 version of CreateFont, 
  1058.  only OUT_STROKE_PRECIS is returned by GetObject. 
  1059.  
  1060.  In Windows NT, height represents world coordinates as follows: 
  1061.  
  1062.  0         A default height is to be used by the searching algorithm. 
  1063.  
  1064.  +n        The searching algorithm should look for a font that has the 
  1065.            specified character cell height (Em height). 
  1066.  
  1067.  -n        The searching algorithm should look for a font that has the 
  1068.            specified character height (lMaxBaselineExt).  The following formula 
  1069.            is used: 
  1070.  
  1071.                        Em height = lMaxBaselinesExt + lInternalLeading
  1072.  
  1073.  In OS/2, the GPI font matching algorithm does not provide a means to search 
  1074.  based on the Em height (cell height); it only considers the lMaxBaselinesExt. 
  1075.  So, from a Windows 32-bit application perspective, the OS/2 version of 
  1076.  CreateFont acts as if it is passed a negative height. 
  1077.  
  1078.  
  1079. ΓòÉΓòÉΓòÉ 7.12.23. CreateHatchBrush ΓòÉΓòÉΓòÉ
  1080.  
  1081. Although OS/2 tries to provide the closest possible match for each hatch brush 
  1082. in Windows NT, some of the OS/2 hatch patterns do not precisely match the 
  1083. Windows NT hatch brush patterns.  The patterns for the OS/2 hatch brushes are 
  1084. from the Base Pattern Symbol set shown in OS/2 Warp Graphics Programming 
  1085. Interface Programming Guide. 
  1086.  
  1087.  
  1088. ΓòÉΓòÉΓòÉ 7.12.24. CreateIconFromResource ΓòÉΓòÉΓòÉ
  1089.  
  1090. The OS/2 version of CreateIconFromResource loads an OS/2 Icon resource. 
  1091.  
  1092.  
  1093. ΓòÉΓòÉΓòÉ 7.12.25. CreateMutex ΓòÉΓòÉΓòÉ
  1094.  
  1095. OS/2 allows backslashes in the object name; Windows prohibits them. 
  1096.  
  1097.  
  1098. ΓòÉΓòÉΓòÉ 7.12.26. CreatePen ΓòÉΓòÉΓòÉ
  1099.  
  1100. When a line is drawn, the number of colors that can be displayed at once for 
  1101. that line is: 
  1102.  
  1103.      Two for Windows NT 
  1104.      One for OS/2 
  1105.  
  1106.  This difference in drawn colors applies only to lines not to filled regions. 
  1107.  If a brush object is selected and visible foreground and background colors are 
  1108.  chosen, a two-color pattern is drawn when an area is filled using the brush. 
  1109.  
  1110.  The OS/2 version of CreatePolygonRgn matches the Windows NT behavior for brush 
  1111.  objects.  However, if a pen object is selected, the OS/2 version draws only 
  1112.  one color, no matter what pen style or background mix are chosen.  Any gaps in 
  1113.  the pattern, as determined by the pen style, will be the color of the region 
  1114.  on which the line is drawn.  This behavior differs from the Windows NT 
  1115.  behavior due to an OS/2 GPI restriction. 
  1116.  
  1117.  
  1118. ΓòÉΓòÉΓòÉ 7.12.27. CreatePolygonRgn ΓòÉΓòÉΓòÉ
  1119.  
  1120. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1121. this is a GPI restriction.  A polygon, as used in Open32 and OS/2, can must 
  1122. have greater th points.  A polygon of 2 points is a line. 
  1123.  
  1124.  
  1125. ΓòÉΓòÉΓòÉ 7.12.28. CreatePolyPolygonRgn ΓòÉΓòÉΓòÉ
  1126.  
  1127. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1128. this is a GPI restriction.  A polygon, as used in Open32, must have more than 
  1129. two points.  A polygon of two points is a line. 
  1130.  
  1131.  
  1132. ΓòÉΓòÉΓòÉ 7.12.29. CreateProcess ΓòÉΓòÉΓòÉ
  1133.  
  1134. The OS/2 version of CreateProcess supports these parameters differently than 
  1135. the Windows NT version: 
  1136.  
  1137.  Security attributes Not supported 
  1138.  
  1139.  Inherit flag        Not supported 
  1140.  
  1141.  STARTUPINFO         lpTitle, dwX, dwY, dwSizeX, dwSizeY, wShowWindow, 
  1142.                      PgmControl 
  1143.  
  1144.  
  1145. ΓòÉΓòÉΓòÉ 7.12.30. CreateRectRgn ΓòÉΓòÉΓòÉ
  1146.  
  1147. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1148. this is a GPI restriction. 
  1149.  
  1150.  
  1151. ΓòÉΓòÉΓòÉ 7.12.31. CreateRectRgnIndirect ΓòÉΓòÉΓòÉ
  1152.  
  1153. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1154. this is a GPI restriction. 
  1155.  
  1156.  
  1157. ΓòÉΓòÉΓòÉ 7.12.32. CreateRoundRectRgn ΓòÉΓòÉΓòÉ
  1158.  
  1159. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1160. this is a GPI restriction. 
  1161.  
  1162.  
  1163. ΓòÉΓòÉΓòÉ 7.12.33. CreateSemaphore ΓòÉΓòÉΓòÉ
  1164.  
  1165. OS/2 allows backslashes in the object name; Windows prohibits them. 
  1166.  
  1167.  
  1168. ΓòÉΓòÉΓòÉ 7.12.34. CreateWindow ΓòÉΓòÉΓòÉ
  1169.  
  1170. The OS/2 version of CreateWindow differs from the Windows NT version where 
  1171. negative client areas are concerned.  In Windows NT, if the client area has 
  1172. negative height or width, the window is drawn as though that height or width is 
  1173. zero.  In OS/2, the absolute value of the negative space is subtracted from the 
  1174. surrounding border, title bar, and so on. 
  1175.  
  1176. For example, assume that a window is to be created, and according to the 
  1177. parameters passed into CreateWindow: 
  1178.  
  1179.      The bottom of the window's client area is located at 100 (device 
  1180.       coordinates) 
  1181.      The top of the caption is at 72 (device coordinates) 
  1182.  
  1183.  This would place the bottom of the client area at 95, depending on the height 
  1184.  of the caption in device coordinates.  In other words, the bottom of the 
  1185.  client area is five pixels above the top. 
  1186.  
  1187.  With the same parameters, in Windows NT, a complete caption nonetheless 
  1188.  appears on-screen when the window is created.  In contrast, in OS/2, the 
  1189.  bottom of the caption is clipped off. 
  1190.  
  1191.  
  1192. ΓòÉΓòÉΓòÉ 7.12.35. DdeUnaccessData ΓòÉΓòÉΓòÉ
  1193.  
  1194. This is a Windows NT-specific function.  DdeUnaccessData unlocks global memory 
  1195. previously locked by a call to DdeAccessData.  Because OS/2 memory management 
  1196. architecture does not impose such requirements, this function is not used in 
  1197. OS/2. 
  1198.  
  1199.  
  1200. ΓòÉΓòÉΓòÉ 7.12.36. DeleteAtom ΓòÉΓòÉΓòÉ
  1201.  
  1202. The documented behavior for this function in Windows NT is to return the atom 
  1203. if the atom to be deleted does not exist; however, the Windows NT version of 
  1204. this function returns 0 in all cases.  The OS/2 version of DeleteAtom returns 
  1205. the atom if the atom to be deleted does not exist. 
  1206.  
  1207.  
  1208. ΓòÉΓòÉΓòÉ 7.12.37. DeleteEnhMetaFile ΓòÉΓòÉΓòÉ
  1209.  
  1210. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1211. acceptable for the applications for which it was developed. 
  1212.  
  1213.  
  1214. ΓòÉΓòÉΓòÉ 7.12.38. DialogBoxIndirect ΓòÉΓòÉΓòÉ
  1215.  
  1216. In OS/2, DialogBoxIndirect and DialogBoxIndirectParam support the passing of 
  1217. OS/2 templates. 
  1218.  
  1219.  
  1220. ΓòÉΓòÉΓòÉ 7.12.39. DllEntryPoint ΓòÉΓòÉΓòÉ
  1221.  
  1222. The OS/2 version of DllEntryPoint does not support: 
  1223.  
  1224.      The Windows 16-bit entry point LibMain 
  1225.  
  1226.      In Windows NT, DllEntryPoint can be called on thread creation and 
  1227.       destruction.  OS/2 does not support this. 
  1228.  
  1229.      In Windows NT, DllEntryPoint has a parameter that distinguishes between 
  1230.       dynamic and static loading.  OS/2 does not support this flag. 
  1231.  
  1232.  
  1233. ΓòÉΓòÉΓòÉ 7.12.40. DrawText ΓòÉΓòÉΓòÉ
  1234.  
  1235. The OS/2 and Windows NT versions of this function differ as follows: 
  1236.  
  1237.      Windows NT uses the last mnemonic on a line (the other mnemonic 
  1238.       characters are treated as normal characters); the OS/2 implementation 
  1239.       uses the first mnemonic as the mnemonic. 
  1240.  
  1241.      Windows NT does not allow DT_MULTILINE to be mixed with DT_BOTTOM or 
  1242.       DT_VCENTER. The OS/2 implementation does. 
  1243.  
  1244.      OS/2 does not support the Windows NT undocumented DT_INTERNAL flag. 
  1245.  
  1246.      The OS/2 version has the following new flags: 
  1247.  
  1248.       DT_AMPERSAND             Causes the ampersand to be recognized as the 
  1249.                                mnemonic character instead of the tilde. 
  1250.  
  1251.       DT_MULTILINE             Enables WinDrawText to output two or more lines 
  1252.                                of text in one operation.  DT_MULTILINE is 
  1253.                                mutually exclusive with DT_SINGLELINE and 
  1254.                                DT_ERASERECT; if used in combination with these, 
  1255.                                the result is undefined. 
  1256.  
  1257.       DT_NOCLIP                Text is not clipped to the rectangle passed in. 
  1258.                                Can improve performance and alter the text 
  1259.                                output. 
  1260.  
  1261.       DT_OPAQUE                Causes the text background rectangle to be 
  1262.                                filled with the background color. 
  1263.  
  1264.       DT_SINGLELINE            Causes linefeeds and carriage returns to be 
  1265.                                treated like normal characters. 
  1266.  
  1267.       DT_VERTICALEXTENT        If DT_LINEEXTENT is set, WinDrawText and 
  1268.                                DrawText returns the height of text drawn (or 
  1269.                                potentially drawn) instead of the number of 
  1270.                                characters printed. 
  1271.  
  1272.      In OS/2, the DT_EXTERNALLEADING flag might affect how text is drawn if 
  1273.       the font used has an non-zero external leading value, especially if 
  1274.       multiple lines of text are output (DT_MULTILINE). Previously, this flag 
  1275.       affected only the extent of the rectangle returned when DT_QUERYEXTENT 
  1276.       was set. 
  1277.  
  1278.  
  1279. ΓòÉΓòÉΓòÉ 7.12.41. DuplicateHandle ΓòÉΓòÉΓòÉ
  1280.  
  1281. File handles cannot be duplicated from or to processes that are not children of 
  1282. the calling process or the process itself, because this is not supported by 
  1283. OS/2 file systems. 
  1284.  
  1285.  
  1286. ΓòÉΓòÉΓòÉ 7.12.42. Ellipse ΓòÉΓòÉΓòÉ
  1287.  
  1288. OS/2 allows the following maximum coordinates: 
  1289.  
  1290.      -134217728 to 134217727 (world and page spaces) 
  1291.      -32768 to 32767 (device spaces) 
  1292.  
  1293.  If INT_MAX (2147483647) or INT_MIN (-2147483646) are used for maximum or 
  1294.  minimum coordinates, the function does not function properly. 
  1295.  
  1296.  
  1297. ΓòÉΓòÉΓòÉ 7.12.43. EnableScrollBar ΓòÉΓòÉΓòÉ
  1298.  
  1299. In OS/2, this function cannot enable or disable individual arrow buttons: 
  1300. either both buttons are enabled or both are disabled. 
  1301.  
  1302.  
  1303. ΓòÉΓòÉΓòÉ 7.12.44. EndPath ΓòÉΓòÉΓòÉ
  1304.  
  1305. EndPath returns FALSE if no path exists or the path has been destroyed with 
  1306. AbortPath. 
  1307.  
  1308.  
  1309. ΓòÉΓòÉΓòÉ 7.12.45. EnhMetaFileProc ΓòÉΓòÉΓòÉ
  1310.  
  1311. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1312. acceptable for the applications for which it was developed. 
  1313.  
  1314.  
  1315. ΓòÉΓòÉΓòÉ 7.12.46. EnumEnhMetaFile ΓòÉΓòÉΓòÉ
  1316.  
  1317. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1318. acceptable for the applications for which it was developed. 
  1319.  
  1320.  
  1321. ΓòÉΓòÉΓòÉ 7.12.47. EnumMetaFile ΓòÉΓòÉΓòÉ
  1322.  
  1323. In OS/2, the metafile handle retrieved from the clipboard or loaded from an 
  1324. OS/2 metafile does not work because it only contains OS/2 metafile handle and 
  1325. has no information about the actual metafile records. 
  1326.  
  1327.  
  1328. ΓòÉΓòÉΓòÉ 7.12.48. Escape ΓòÉΓòÉΓòÉ
  1329.  
  1330. In OS/2, the following escapes are supported: 
  1331.  
  1332.      ABORTDOC 
  1333.      ENDOC 
  1334.      GETPHYSPAGESIZE 
  1335.      GETPRINTINGOFFSET 
  1336.      GETSCALINGFACTOR 
  1337.      NEWFRAME 
  1338.      STARTDOC 
  1339.  
  1340.  
  1341. ΓòÉΓòÉΓòÉ 7.12.49. ExcludeClipRect ΓòÉΓòÉΓòÉ
  1342.  
  1343. OS/2 supports a range of values for the rectangle coordinates of -32767 to 
  1344. 32766; this is a GPI restriction. 
  1345.  
  1346.  
  1347. ΓòÉΓòÉΓòÉ 7.12.50. ExtCreateRegion ΓòÉΓòÉΓòÉ
  1348.  
  1349. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1350. this is a GPI restriction. 
  1351.  
  1352.  
  1353. ΓòÉΓòÉΓòÉ 7.12.51. FillRect ΓòÉΓòÉΓòÉ
  1354.  
  1355. In Windows NT, FillRect accepts invalid rectangle values and does not fail. 
  1356. The Windows 16-bit of this function did not have this behavior. 
  1357.  
  1358. In OS/2, this function returns an error if parameters are invalid. 
  1359.  
  1360.  
  1361. ΓòÉΓòÉΓòÉ 7.12.52. FindResource ΓòÉΓòÉΓòÉ
  1362.  
  1363. OS/2 does not support resource types: 
  1364.  
  1365.      RT_GROUPCURSOR 
  1366.      RT_GROUPICON 
  1367.      RT_VERSION 
  1368.  
  1369.  To load resource with RT_STRING type, the resource id has to be computed 
  1370.  before calling LoadResource due to the way OS/2 stores the string table data. 
  1371.  Use the formula: 
  1372.  
  1373.    (string id / 16) + 1
  1374.  
  1375.  Similarly, for RT_MESSAGETABLE, compute resource id as: 
  1376.  
  1377.    (message id / 16) + 1
  1378.  
  1379.  
  1380. ΓòÉΓòÉΓòÉ 7.12.53. FrameRgn ΓòÉΓòÉΓòÉ
  1381.  
  1382. OS/2 supports a range of values for the region coordinates of -32767 to 32766; 
  1383. this is a GPI restriction. 
  1384.  
  1385.  
  1386. ΓòÉΓòÉΓòÉ 7.12.54. FreeProcInstance ΓòÉΓòÉΓòÉ
  1387.  
  1388. In OS/2, this is a NULL macro. 
  1389.  
  1390.  
  1391. ΓòÉΓòÉΓòÉ 7.12.55. GdiComment ΓòÉΓòÉΓòÉ
  1392.  
  1393. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1394. acceptable for the applications for which it was developed. 
  1395.  
  1396.  
  1397. ΓòÉΓòÉΓòÉ 7.12.56. GetAsyncKeyState ΓòÉΓòÉΓòÉ
  1398.  
  1399. If GetAsyncKeyState is issued twice in succession while the key is down, the 
  1400. second GetAsyncKeyState reports the key as being up. 
  1401.  
  1402. Virtual keys for regular characters like VK_A, VK_B, and so on are not 
  1403. supported -- just as they are not supported for GetKeyState. 
  1404.  
  1405. For mouse Vkeys like VK_LBUTTON, the synchronous state, rather than the 
  1406. asynchronous state, is provided becasue PM does not provide any way to get the 
  1407. asynchronous state of the mouse buttons. 
  1408.  
  1409.  
  1410. ΓòÉΓòÉΓòÉ 7.12.57. GetClassInfo ΓòÉΓòÉΓòÉ
  1411.  
  1412. In OS/2, this function fails if called against a window not created through 
  1413. Open32, because it returns class information specific to Open32 window classes. 
  1414.  
  1415.  
  1416. ΓòÉΓòÉΓòÉ 7.12.58. GetClassLong ΓòÉΓòÉΓòÉ
  1417.  
  1418. In OS/2, this function fails if called against a window not created through 
  1419. Open32, because it returns class information specific to Open32 window classes. 
  1420.  
  1421.  
  1422. ΓòÉΓòÉΓòÉ 7.12.59. GetClassWord ΓòÉΓòÉΓòÉ
  1423.  
  1424. In OS/2, this function fails if called against a window not created through 
  1425. Open32, because it returns class information specific to Open32 window classes. 
  1426.  
  1427.  
  1428. ΓòÉΓòÉΓòÉ 7.12.60. GetClientRect ΓòÉΓòÉΓòÉ
  1429.  
  1430. The OS/2 version of GetClientRect differs from the Windows NT version where 
  1431. negative client areas are concerned.  In Windows NT, if the client area has 
  1432. negative height or width, the window is drawn as though that height or width is 
  1433. zero.  In OS/2, the absolute value of the negative space is subtracted from the 
  1434. surrounding border, title bar, and so on. 
  1435.  
  1436. For example, assume that a window is to be created, and according to the 
  1437. parameters passed into CreateWindow: 
  1438.  
  1439.      The bottom of the window's client area is located at 100 (device 
  1440.       coordinates) 
  1441.      The top of the caption is at 72 (device coordinates) 
  1442.  
  1443.  This would place the bottom of the client area at 95, depending on the height 
  1444.  of the caption in device coordinates.  In other words, the bottom of the 
  1445.  client area is five pixels above the top. 
  1446.  
  1447.  With the same parameters, in Windows NT, a complete caption nonetheless 
  1448.  appears on-screen when the window is created.  In contrast, in OS/2, the 
  1449.  bottom of the caption is clipped off. 
  1450.  
  1451.  
  1452. ΓòÉΓòÉΓòÉ 7.12.61. GetClipboardViewer ΓòÉΓòÉΓòÉ
  1453.  
  1454. In OS/2, GetClipboardViewer returns a valid window handle that can be used to 
  1455. send messages to all viewers in the system (including one registered through 
  1456. WinSetClipbrdViewer).  Clipboard messages and messages with a value greater 
  1457. than WM_USER sent to this window are sent to all viewers known to the system. 
  1458. However, the window returned by GetClipboardViewer will not be a viewer window 
  1459. set by an application. 
  1460.  
  1461.  
  1462. ΓòÉΓòÉΓòÉ 7.12.62. GetEnhMetaFile ΓòÉΓòÉΓòÉ
  1463.  
  1464. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1465. acceptable for the applications for which it was developed. 
  1466.  
  1467.  
  1468. ΓòÉΓòÉΓòÉ 7.12.63. GetEnhMetaFileBits ΓòÉΓòÉΓòÉ
  1469.  
  1470. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1471. acceptable for the applications for which it was developed. 
  1472.  
  1473.  
  1474. ΓòÉΓòÉΓòÉ 7.12.64. GetEnhMetaFileDescription ΓòÉΓòÉΓòÉ
  1475.  
  1476. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1477. acceptable for the applications for which it was developed. 
  1478.  
  1479.  
  1480. ΓòÉΓòÉΓòÉ 7.12.65. GetEnhMetaFileHeader ΓòÉΓòÉΓòÉ
  1481.  
  1482. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1483. acceptable for the applications for which it was developed. 
  1484.  
  1485.  
  1486. ΓòÉΓòÉΓòÉ 7.12.66. GetEnhMetaFilePaletteEntries ΓòÉΓòÉΓòÉ
  1487.  
  1488. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1489. acceptable for the applications for which it was developed. 
  1490.  
  1491.  
  1492. ΓòÉΓòÉΓòÉ 7.12.67. GetFileTime ΓòÉΓòÉΓòÉ
  1493.  
  1494. The GetFileTime function is related to the OS/2 DosQueryFileInfo function. 
  1495. GetFileTime returns whatever the DosQueryFileInfo function returns.  This means 
  1496. that the function might return: 
  1497.  
  1498.      0 creation time 
  1499.      0 last access time 
  1500.  
  1501.  
  1502. ΓòÉΓòÉΓòÉ 7.12.68. GetKeyboardState ΓòÉΓòÉΓòÉ
  1503.  
  1504. Virtual keys for regular characters like VK_A, VK_B, and so on are not 
  1505. supported -- just as they are not supported for GetKeyState. 
  1506.  
  1507.  
  1508. ΓòÉΓòÉΓòÉ 7.12.69. GetLocaleInfo ΓòÉΓòÉΓòÉ
  1509.  
  1510. LOCALE_ILDATE is not supported on OS/2. 
  1511.  
  1512. LOCALE_ITIMEMARKPOSN always returns 0. 
  1513.  
  1514. LOCALE_INEGNUMBER always returns 1. 
  1515.  
  1516. LOCALE_SGROUPING and LOCALE_SMONGROUPING always return the grouping size 
  1517. followed by ";0" to match what Windows NT provides.  For example, for the US, 
  1518. the grouping is 3 so the value of LOCALE_SGROUPING and LOCALE_SMONGROUPING is 
  1519. "3;0". 
  1520.  
  1521. LOCALE_STIMEFORMAT returns "h:mm:ss tt" on Windows NT, and "h:m:s" on OS/2. 
  1522.  
  1523. LOCALE_SLONGDATE returns "dddd, mmmm dd, yyyy" on Windows NT, and "mm/dd/yy" on 
  1524. OS/2. 
  1525.  
  1526. LOCALE_SSHORTDATE returns "M/d/yy" on Windows NT, and "M-d-yy" on OS/2. 
  1527.  
  1528.  
  1529. ΓòÉΓòÉΓòÉ 7.12.70. GetMetaFileBitsEx ΓòÉΓòÉΓòÉ
  1530.  
  1531. There are two different kinds of Open32 metafiles: 
  1532.  
  1533.    1. A true Open32 metafile that contains a stream of GDI commands. 
  1534.  
  1535.    2. A metafile that has been converted into an Open32 metafile.  A metafile 
  1536.       of this type is created by obtaining a metafile handle through 
  1537.       WinTranslateGraphicsObject.  These metafiles are wrappers for an OS/2 
  1538.       metafile. 
  1539.  
  1540.  You can use GetMetaFileBitsEx with the first metafile type only. This function 
  1541.  does not work with the second type of metafile: a converted metafile. 
  1542.  
  1543.  Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1544.  acceptable for the applications for which it was developed. 
  1545.  
  1546.  
  1547. ΓòÉΓòÉΓòÉ 7.12.71. GetTimeZoneInformation ΓòÉΓòÉΓòÉ
  1548.  
  1549. When you use GetTimeZoneInformation, the time zone setting defaults to 
  1550. Greenwich Mean Time (GMT) with UTC bias set to 0.  You can use 
  1551. SetTimeZoneInformation to change the time zone setting. 
  1552.  
  1553.  
  1554. ΓòÉΓòÉΓòÉ 7.12.72. GetVersion ΓòÉΓòÉΓòÉ
  1555.  
  1556. This function returns Windows NT Version 3.51. 
  1557.  
  1558.  
  1559. ΓòÉΓòÉΓòÉ 7.12.73. GetVersionEx ΓòÉΓòÉΓòÉ
  1560.  
  1561. This function returns Windows NT Version 3.51. 
  1562.  
  1563.  
  1564. ΓòÉΓòÉΓòÉ 7.12.74. GetWinMetaFileBits ΓòÉΓòÉΓòÉ
  1565.  
  1566. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1567. acceptable for the applications for which it was developed. 
  1568.  
  1569.  
  1570. ΓòÉΓòÉΓòÉ 7.12.75. IsIconic ΓòÉΓòÉΓòÉ
  1571.  
  1572. In OS/2, IsIconic works only with frame windows. 
  1573.  
  1574.  
  1575. ΓòÉΓòÉΓòÉ 7.12.76. LineTo ΓòÉΓòÉΓòÉ
  1576.  
  1577. In OS/2, the coordinates for LineTo round differently than they do in Windows. 
  1578. In OS/2, a line drawn from (1,10) to (10.5,10) results in a line drawn to 
  1579. (11,10), not (10,10) as would happen under Windows NT. This can result in stray 
  1580. pixels or unexpected overlap of lines. 
  1581.  
  1582.  
  1583. ΓòÉΓòÉΓòÉ 7.12.77. LoadLibrary ΓòÉΓòÉΓòÉ
  1584.  
  1585. In OS/2, when LoadLibrary is called to load a device driver without specifying 
  1586. the complete path to the file, OS/2 might not find the driver. In Windows, 
  1587. device drivers are typically placed in the Windows system directory. In OS/2, 
  1588. they are placed in the os2\dll subdirectory. This subdirectory is typically not 
  1589. in any path so LoadLibrary does not find the drivers unless the complete path 
  1590. is specified. 
  1591.  
  1592.  
  1593. ΓòÉΓòÉΓòÉ 7.12.78. lstrcmpW ΓòÉΓòÉΓòÉ
  1594.  
  1595. OS/2 sorts by character value; Win32 sorts using "dictionary" order: 
  1596.  
  1597.    1. Non-alphanumeric 
  1598.  
  1599.    2. Numbers 
  1600.  
  1601.    3. Letters 
  1602.  
  1603.  
  1604. ΓòÉΓòÉΓòÉ 7.12.79. MessageBox ΓòÉΓòÉΓòÉ
  1605.  
  1606. In OS/2, when using MessageBox, the width of the message box is adjusted to fit 
  1607. the title and the buttons, but no adjustment is made for the message itself. 
  1608. This might cause portions of the message text to be forced to a new line. 
  1609.  
  1610.  
  1611. ΓòÉΓòÉΓòÉ 7.12.80. MultiByteToWideChar ΓòÉΓòÉΓòÉ
  1612.  
  1613. A single ASCII character can map to more than one Unicode character. For 
  1614. example, 0xE6 in ASCII maps to Unicode 0x3BC and Unicode 0xB5. In some 
  1615. instances, OS/2 returns a different character value. 
  1616.  
  1617.  
  1618. ΓòÉΓòÉΓòÉ 7.12.81. PlayEnhMetaFile ΓòÉΓòÉΓòÉ
  1619.  
  1620. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1621. acceptable for the applications for which it was developed. 
  1622.  
  1623.  
  1624. ΓòÉΓòÉΓòÉ 7.12.82. PlayEnhMetaFileRecord ΓòÉΓòÉΓòÉ
  1625.  
  1626. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1627. acceptable for the applications for which it was developed. 
  1628.  
  1629.  
  1630. ΓòÉΓòÉΓòÉ 7.12.83. RealizePalette ΓòÉΓòÉΓòÉ
  1631.  
  1632. The OS/2 version of RealizePalette is valid only with a screen DC. 
  1633.  
  1634.  
  1635. ΓòÉΓòÉΓòÉ 7.12.84. RedrawWindow ΓòÉΓòÉΓòÉ
  1636.  
  1637. In OS/2, RedrawWindow does not support redraw flags: 
  1638.  
  1639.      RDW_FRAME 
  1640.      RDW_INVALIDATE 
  1641.      RDW_NOINTERNALPAINT 
  1642.  
  1643.  
  1644. ΓòÉΓòÉΓòÉ 7.12.85. Registry Functions ΓòÉΓòÉΓòÉ
  1645.  
  1646. OS/2 supports the following predefined key handles: 
  1647.  
  1648.      HKEY_CLASSES_ROOT 
  1649.      HKEY_CURRENT_USER 
  1650.      HKEY_LOCAL_MACHINE 
  1651.      HKEY_USERS 
  1652.      REGH_INIMAPPING 
  1653.      REGH_SYSINFO 
  1654.      REGH_WINOS2INI 
  1655.  
  1656.  For HKEY_LOCAL_MACHINE, OS/2 accepts and converts only the following list of 
  1657.  subkeys: 
  1658.  
  1659.      All new keys added under HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS 
  1660.       and NT\CURRENTVERSION\INIFILEMAPPING is added to REGH_INIMAPPING. 
  1661.      All references to HKEY_LOCAL_MACHINE\SOFTWARE are mapped to 
  1662.       REGH_WINOS2INI (application's data). 
  1663.  
  1664.  OS/2 does not support REG_LINK and REG_RESOURCE_LIST value types. 
  1665.  
  1666.  The registry supplies mappings for the following subkeys: 
  1667.  
  1668.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1669.   ΓöéHKEY_CLASSES_ROOT\ ... (alias to                  ΓöéREGH_SYSINFO\Classes\ ...     Γöé
  1670.   ΓöéHLM\Software\Classes)                             Γöé                              Γöé
  1671.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1672.   ΓöéHKEY_CURRENT_USER\Software\ ...                   ΓöéREGH_SYSINFO\User\Current\ ...Γöé
  1673.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1674.   ΓöéHKEY_LOCAL_MACHINE\Software\ ...                  ΓöéREGH_WINOS2INI\  ...          Γöé
  1675.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1676.   ΓöéHKEY_LOCAL_MACHINE\Software\Classes\ ...          ΓöéREGH_SYSINFO\Classes\ ...     Γöé
  1677.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1678.   ΓöéHKEY_LOCAL_MACHINE\System\CurrentControlSet\ h.   ΓöéREGH_SYSINFO\Control\ ...     Γöé
  1679.   Γöé...                                               Γöé                              Γöé
  1680.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1681.   ΓöéHKEY_USERS\.Default\ ...                          ΓöéREGH_SYSINFO\User\Default\ ...Γöé
  1682.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1683.  
  1684.  Notes: 
  1685.  
  1686.      HKEY_CLASSES_ROOT is totally unrestricted with regard to the first subkey 
  1687.       and it is an alias to the information stored in the registry key 
  1688.       HKEY_LOCAL_MACHINE\Software\Classes. 
  1689.      HKEY_CURRENT_USER must have Software as the first subkey. 
  1690.      HKEY_LOCAL_MACHINE must have either Software or System\CurrentControlSet 
  1691.       as the first subkey. 
  1692.      HKEY_USERS must have .Default as the first subkey (note the period). 
  1693.  
  1694.  
  1695. ΓòÉΓòÉΓòÉ 7.12.86. Resource Functions ΓòÉΓòÉΓòÉ
  1696.  
  1697. The following functions are not source-compatible with Windows: 
  1698.  
  1699.      CreateBitmapIndirect 
  1700.      CreateDialogIndirect 
  1701.      CreateDialogIndirectParam 
  1702.      CreateIconIndirect 
  1703.      DialogBoxIndirect 
  1704.      DialogBoxIndirectParam 
  1705.      LoadMenuIndirect 
  1706.      LoadResource 
  1707.  
  1708.  
  1709. ΓòÉΓòÉΓòÉ 7.12.87. SetClipboardViewer ΓòÉΓòÉΓòÉ
  1710.  
  1711. In Windows NT, applications keep track of the viewer chain through this 
  1712. function and ChangeClipboardChain.  In OS/2, OS/2 keeps track of the viewer 
  1713. chain. 
  1714.  
  1715. In OS/2, only one viewer is allowed and OS/2 performs no arbitration when an 
  1716. application sets itself as the viewer; OS/2 just ends the old viewer with no 
  1717. warning.  Each application thinks that it is the only viewer in the system. 
  1718.  
  1719. In OS/2, SetClipboardViewer always returns 0.  OS/2 does not tell applications 
  1720. about other viewers.  In OS/2, it is not the application's responsibility to 
  1721. pass clipboard messages on to the next viewer in the chain.  In Windows NT, 0 
  1722. indicates there is no next viewer. 
  1723.  
  1724. In OS/2, applications are never sent WM_CHANGECBCHAIN; this message is 
  1725. meaningless in OS/2.  In Windows NT, the viewer that is leaving the chain does 
  1726. not get this message; in OS/2, the other viewers do not know about each other 
  1727. so this message is meaningless to them.  In Windows NT, they would just pass it 
  1728. on. 
  1729.  
  1730.  
  1731. ΓòÉΓòÉΓòÉ 7.12.88. SetEnhMetaFileBits ΓòÉΓòÉΓòÉ
  1732.  
  1733. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1734. acceptable for the applications for which it was developed. 
  1735.  
  1736.  
  1737. ΓòÉΓòÉΓòÉ 7.12.89. SetKeyboardState ΓòÉΓòÉΓòÉ
  1738.  
  1739. Virtual keys for regular characters like VK_A, VK_B, and so on are not 
  1740. supported -- just as they are not supported for GetKeyState. 
  1741.  
  1742.  
  1743. ΓòÉΓòÉΓòÉ 7.12.90. SetLocaleInfo ΓòÉΓòÉΓòÉ
  1744.  
  1745. LOCALE_ILDATE is not supported on OS/2. 
  1746.  
  1747. LOCALE_ITIMEMARKPOSN always returns 0. 
  1748.  
  1749. LOCALE_INEGNUMBER always returns 1. 
  1750.  
  1751. LOCALE_SGROUPING and LOCALE_SMONGROUPING always return the grouping size 
  1752. followed by ";0" to match what Windows NT provides.  For example, for the US, 
  1753. the grouping is 3 so the value of LOCALE_SGROUPING and LOCALE_SMONGROUPING is 
  1754. "3;0". 
  1755.  
  1756. LOCALE_STIMEFORMAT returns "h:mm:ss tt" on Windows NT, and "h:m:s" on OS/2. 
  1757.  
  1758. LOCALE_SLONGDATE returns "dddd, mmmm dd, yyyy" on Windows NT, and "mm/dd/yy" on 
  1759. OS/2. 
  1760.  
  1761. LOCALE_SSHORTDATE returns "M/d/yy" on Windows NT, and "M-d-yy" on OS/2. 
  1762.  
  1763.  
  1764. ΓòÉΓòÉΓòÉ 7.12.91. SetTimeZoneInformation ΓòÉΓòÉΓòÉ
  1765.  
  1766. When you use GetTimeZoneInformation, the time zone setting defaults to 
  1767. Greenwich Mean Time (GMT) with UTC bias set to 0.  You can use 
  1768. SetTimeZoneInformation to change the time zone setting. 
  1769.  
  1770.  
  1771. ΓòÉΓòÉΓòÉ 7.12.92. SetWinMetaFileBits ΓòÉΓòÉΓòÉ
  1772.  
  1773. Note:  This API underwent a limited test cycle.  Its quality was deemed 
  1774. acceptable for the applications for which it was developed. 
  1775.  
  1776.  
  1777. ΓòÉΓòÉΓòÉ 7.12.93. ShellExecute ΓòÉΓòÉΓòÉ
  1778.  
  1779. Only the "open" command is supported (no "print"). Opening of folders is not 
  1780. supported. 
  1781.  
  1782. The ShowCmd flags are only available if the application being launched has 
  1783. FCF_SHELLPOSITION specified. 
  1784.  
  1785. The SW_HIDE show command is not supported. 
  1786.  
  1787. On successful execution, the HRPROCESS returned is always -1. 
  1788.  
  1789.  
  1790. ΓòÉΓòÉΓòÉ 7.12.94. StrokePath ΓòÉΓòÉΓòÉ
  1791.  
  1792. In OS/2, StrokePath returns TRUE only if a path exists in the device context; 
  1793. otherwise, StrokePath returns FALSE. 
  1794.  
  1795.  
  1796. ΓòÉΓòÉΓòÉ 7.12.95. StrokeAndFillPath ΓòÉΓòÉΓòÉ
  1797.  
  1798. In OS/2, StrokeAndFillPath returns TRUE only if a path exists and is closed in 
  1799. the device context; otherwise StrokeAndFillPath returns FALSE. 
  1800.  
  1801.  
  1802. ΓòÉΓòÉΓòÉ 7.12.96. TrackPopUpMenu ΓòÉΓòÉΓòÉ
  1803.  
  1804. In Open32, TrackPopUpMenu ignores the last parameter, which specifies a 
  1805. rectangular box that is used specify an area that the user can click in to keep 
  1806. the track pop menu on the screen.  For this parameter, Open32 uses the NULL 
  1807. value response, which is to remove the menu any time the user clicks. 
  1808.  
  1809.  
  1810. ΓòÉΓòÉΓòÉ 7.12.97. WinHelp ΓòÉΓòÉΓòÉ
  1811.  
  1812. The OS/2 WinHelp implementation supports only the following commands: 
  1813.  
  1814.      HELP_CONTENTS:  Displays contents panel and not the contents option 
  1815.       specified in .HPJ file. 
  1816.      HELP_CONTEXT 
  1817.      HELP_PARTIALKEY:  Only a null string input can be accepted, which causes 
  1818.       the search dialog box to be displayed. 
  1819.      HELP_QUIT 
  1820.  
  1821.  As in Windows, the second parameter of WinHelp-lpszHelpFile- accepts the help 
  1822.  file name with path included.  But, the path must be defined in the current 
  1823.  SET HELP path. Otherwise, an error code is returned.  In OS/2, all help files 
  1824.  are expected to reside in a directory that is defined in SET HELP path. 
  1825.  Otherwise, the Help Manager is not able to locate them. 
  1826.  
  1827.  There is no secondary window support for lpszHelpFile parameter and no macro 
  1828.  support. 
  1829.  
  1830.  
  1831. ΓòÉΓòÉΓòÉ 7.12.98. WinMain ΓòÉΓòÉΓòÉ
  1832.  
  1833. To be able to use the Windows NT WinMain() function, use the OS/2 main() 
  1834. function located in the following subdirectory: 
  1835.  
  1836. TOOLKIT\BETA\SAMPLES\DAPIE\WINMAIN\ma
  1837. in.c
  1838.  
  1839. You can also use the main function, a DLL, in the following subdirectory: 
  1840.  
  1841.  TOOLKIT\BETA\SAMPLES\DLLMAIN\dllmain.c
  1842.  
  1843. main.c gets compiled and linked with the module containing WinMain and creates 
  1844. an OS/2 Warp executable.  If you do not use the OS/2 Warp main function, you 
  1845. receive a link error stating that there is no starting address for your 
  1846. program. 
  1847.  
  1848.  
  1849. ΓòÉΓòÉΓòÉ 7.13. GDI Return Codes ΓòÉΓòÉΓòÉ
  1850.  
  1851. In Windows NT, GDI functions send messages to the graphics subsystem rather 
  1852. than making direct function calls.  To improve performance, functions that do 
  1853. not return a value, other than a return code, send the message asynchronously 
  1854. and immediately return TRUE.  The requested action might subsequently fail, but 
  1855. the caller will not be informed of this.  In OS/2, the graphics operations are 
  1856. performed during the GDI function call, so OS/2 validates the parameters and 
  1857. returns a useful return code.  There are instances when OS/2 returns FALSE and 
  1858. Windows NT returns TRUE. 
  1859.  
  1860.  
  1861. ΓòÉΓòÉΓòÉ 7.14. GPI Mode Parameter ΓòÉΓòÉΓòÉ
  1862.  
  1863. For functions such as SetBkMode and SetPolyFillMode, Windows NT allows the 
  1864. functions to succeed even with incorrect values specified for the mode 
  1865. parameter. 
  1866.  
  1867.  
  1868. ΓòÉΓòÉΓòÉ 7.15. Line Attributes ΓòÉΓòÉΓòÉ
  1869.  
  1870. OS/2 supports line styles only for cosmetic lines.  This means that when a line 
  1871. is drawn as a geometric line, the line is always solid, which occurs in the 
  1872. following circumstances: 
  1873.  
  1874.      The line width is greater than one pel. 
  1875.      The lines are drawn in a path. 
  1876.      The functions Pie and Chord, which use paths. 
  1877.  
  1878.  
  1879. ΓòÉΓòÉΓòÉ 7.16. Logical Color Palettes ΓòÉΓòÉΓòÉ
  1880.  
  1881. Logical color palettes cannot contain more entries than the color-depth of the 
  1882. video driver (for example, on a 256-color driver, you cannot call the BitBlt 
  1883. function with a color palette of more than 256). 
  1884.  
  1885. The XGA video driver (and all based on it) cannot handle being passed a palette 
  1886. larger than 256 on a machine that has a color-depth of 256.  It is possible to 
  1887. do this, but the video driver traps. 
  1888.  
  1889.  
  1890. ΓòÉΓòÉΓòÉ 7.17. Menus ΓòÉΓòÉΓòÉ
  1891.  
  1892. Windows supports inactive menu items (disabled but not greyed) as well as 
  1893. OS/2-style disabled menu items.  Because OS/2 does not have an equivalent 
  1894. concept, Open32 does not support this functionality. 
  1895.  
  1896.  
  1897. ΓòÉΓòÉΓòÉ 7.18. Messages ΓòÉΓòÉΓòÉ
  1898.  
  1899. The following describes the differences between Open32 and Windows message 
  1900. behavior. 
  1901.  
  1902.  
  1903. ΓòÉΓòÉΓòÉ 7.18.1. WM_DRAWITEM ΓòÉΓòÉΓòÉ
  1904.  
  1905. The WM_DRAWITEM message for a combination box or a list box are not exactly 
  1906. identical to their Windows counterpart.  In Windows, when the item selection is 
  1907. changed using the mouse or keyboard, two WM_DRAWITEM messages are sent for the 
  1908. item deselected and four WM_DRAWITEM messages are sent for the item being 
  1909. selected. 
  1910.  
  1911. For the deselected item, the messages received are: 
  1912.  
  1913. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1914. ΓöéA         ΓöéODA_FOCUS                     ΓöéODS_SELECTED                  Γöé
  1915. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1916. ΓöéB         ΓöéODA_SELECT                    Γöé0                             Γöé
  1917. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1918.  
  1919. For the selected item, the messages received are: 
  1920.  
  1921. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1922. ΓöéC         ΓöéODA_FOCUS                     ΓöéODS_FOCUS                     Γöé
  1923. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1924. ΓöéD         ΓöéODA_FOCUS                     Γöé0                             Γöé
  1925. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1926. ΓöéE         ΓöéODA_SELECT                    ΓöéODS_SELECTED                  Γöé
  1927. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1928. ΓöéF         ΓöéODA_FOCUS                     ΓöéODS_FOCUS | ODS_SELECTED      Γöé
  1929. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1930.  
  1931. The order of messages received, assuming the list box had the focus, is: 
  1932.  
  1933.       A 
  1934.       C 
  1935.       D 
  1936.       B 
  1937.       E 
  1938.       F 
  1939.  
  1940.  If the list box did not have the focus and the user clicks in the list box on 
  1941.  a new item (such that the list box is also gaining the focus), only messages 
  1942.  A, E, and F are sent. 
  1943.  
  1944.  If the list box is just receiving the focus but no new item is being selected, 
  1945.  only message F is sent for the item currently selected. 
  1946.  
  1947.  When the list box loses the focus, only message A is sent for the currently 
  1948.  selected item. 
  1949.  
  1950.  A special case arises when the user is at the beginning or end of the list and 
  1951.  re-selects the selected item using the mouse or keyboard.  In this case, only 
  1952.  message A is sent. 
  1953.  
  1954.  In the Open32 implementation, one WM_DRAWITEM message is sent for the item 
  1955.  deselected and one WM_DRAWITEM message for the item being selected. 
  1956.  
  1957.  For the deselected item, the message received is: 
  1958.  
  1959.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1960.   ΓöéA         ΓöéODA_SELECT                    Γöé0                             Γöé
  1961.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1962.  
  1963.  For the selected item, the message received is: 
  1964.  
  1965.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1966.   ΓöéB         ΓöéODA_FOCUS                     ΓöéODS_FOCUS | ODS_SELECTED      Γöé
  1967.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1968.  
  1969.  The order of messages received is A, then B. If the list box did not have the 
  1970.  focus and the user clicks in the list box on a new item (such that the list 
  1971.  box is also gaining the focus), messages A and B are again sent.  If the list 
  1972.  box is just receiving the focus, only message B is sent.  When the list box 
  1973.  loses the focus, the following message is sent for the currently selected 
  1974.  item: 
  1975.  
  1976.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1977.   ΓöéC         ΓöéODA_FOCUS                     ΓöéODS_SELECTED                  Γöé
  1978.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1979.  
  1980.  For the special case when the user is at the beginning or end of the list and 
  1981.  re-selects the selected item using the mouse or keyboard, no message is sent 
  1982.  in Open32. 
  1983.  
  1984.  When an item is just to be drawn (in response to painting the list is), the 
  1985.  WM_DRAWITEM message received in both implementations is: 
  1986.  
  1987.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1988.   ΓöéA         ΓöéODA_DRAWENTIRE                Γöé0                             Γöé
  1989.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1990.  
  1991.  In both implementations, the WM_DRAWITEM message received for the combination 
  1992.  box edit are: 
  1993.  
  1994.       When the edit control receives focus: 
  1995.  
  1996.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1997.             ΓöéA         ΓöéODA_DRAWENTIRE                ΓöéODS_COMBOBOXEDIT ODS_FOCUS    Γöé
  1998.             Γöé          Γöé                              ΓöéODS_SELECTED                  Γöé
  1999.             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2000.  
  2001.       When the edit control loses focus: 
  2002.  
  2003.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2004.             ΓöéA         ΓöéODA_DRAWENTIRE                ΓöéODS_COMBOBOXEDIT              Γöé
  2005.             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2006.  
  2007.  This implementation can cause problems if the drawing of the item's focus 
  2008.  relies on only the ODA_FOCUS Action and the ODS_FOCUS state flags.  Likewise, 
  2009.  problems can occur drawing the item's selection state relies on only the 
  2010.  ODA_SELECT Action and ODS_SELECTED State flags. By properly arranging the 
  2011.  logic for the WM_DRAWITEM message, an application can be written to work 
  2012.  efficiently under both Windows and Open32. 
  2013.  
  2014.  
  2015. ΓòÉΓòÉΓòÉ 7.19. Metafiles ΓòÉΓòÉΓòÉ
  2016.  
  2017. There are two different kinds of Open32 metafiles: 
  2018.  
  2019.    1. A true Open32 metafile that contains a stream of GDI commands. 
  2020.  
  2021.    2. A metafile that has been converted into an Open32 metafile. A metafile of 
  2022.       this type is created by obtaining a metafile handle through 
  2023.       WinTranslateGraphicsObject. These metafiles are wrappers for an OS/2 
  2024.       metafile. 
  2025.  
  2026.  You can use the GetMetaFileBitsEx function with the first metafile type only. 
  2027.  GetMetaFileBitsEx does not work the the second type of metafile: a converted 
  2028.  metafile. 
  2029.  
  2030.  
  2031. ΓòÉΓòÉΓòÉ 7.20. Monochrome Memory Device Context (DC) ΓòÉΓòÉΓòÉ
  2032.  
  2033. In Windows, it is possible to create a monochrome memory device context (DC) 
  2034. and then BitBlt it to the screen. In OS/2, if you try to do this, the drawing 
  2035. appears black. 
  2036.  
  2037. In OS/2, do not draw to a monochrome memory DC. In addition, VGA and XGA 
  2038. drivers behave differently when you try to do this in OS/2. 
  2039.  
  2040. In OS/2, you should instead draw to a color DC and then BitBlt into a 
  2041. monochrome DC. 
  2042.  
  2043.  
  2044. ΓòÉΓòÉΓòÉ 7.21. Open32 Controls ΓòÉΓòÉΓòÉ
  2045.  
  2046. All Open32 controls, unlike Windows controls, notify their parent when focus 
  2047. changes.  Care needs to be taken when processing WM_COMMAND messages from 
  2048. controls so that proper handling based on control type is accomplished.  You 
  2049. may receive a WM_COMMAND notification from Open32 that you do not receive from 
  2050. Windows causing unpredictable results.  A well-structured program should not 
  2051. encounter problems related to these extra notifications.  Open32 applications 
  2052. can also be enhanced to take advantage of these additional notifications to 
  2053. provide OS/2-only additional functionality. 
  2054.  
  2055.  
  2056. ΓòÉΓòÉΓòÉ 7.22. Pattern Brushes ΓòÉΓòÉΓòÉ
  2057.  
  2058. In Windows, pattern brushes can be created with bitmaps of any size. Many of 
  2059. the OS/2 video drivers will only work properly with bitmaps whose widths are 
  2060. divisible by 8 (but there is no guarantee of consistency), and OS/2 VGA 
  2061. supports only pattern bitmaps that are specifically 8*8 (if a larger bitmap is 
  2062. specified, all but the lower left 8*8 goes unused). 
  2063.  
  2064.  
  2065. ΓòÉΓòÉΓòÉ 7.23. Read-Only Files ΓòÉΓòÉΓòÉ
  2066.  
  2067. In Windows NT, there is a privilege level that allows a directory or file to be 
  2068. deleted even if it has the read-only file attribute set. This privilege level 
  2069. is called Full Control privilege. Full Control privilege, like other file 
  2070. system security features in Windows NT, applies to the NT file system (NTFS). 
  2071. Based on the behavior of Windows NT CreateFile and other file-manipulation 
  2072. functions, it appears that the Full Control privilege level in Windows NT is 
  2073. the default privilege level for FAT and other file systems as well.  The 
  2074. Windows NT implementation of file access privileges differs from the OS/2 
  2075. implementation: 
  2076.  
  2077. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2078. ΓöéFAT                      ΓöéNever Full Control       ΓöéAlways Full Control      Γöé
  2079. Γöé                         Γöéprivilege                Γöéprivilege                Γöé
  2080. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2081. ΓöéHPFS                     ΓöéNever Full Control       ΓöéAlways Full Control      Γöé
  2082. Γöé                         Γöéprivilege                Γöéprivilege                Γöé
  2083. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2084. ΓöéNTFS                     Γöé                         ΓöéOptional Full Control    Γöé
  2085. Γöé                         Γöé                         Γöéprivilege                Γöé
  2086. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2087.  
  2088. In OS/2, the OS/2 behavior is preserved instead of emulating the Windows NT 
  2089. behavior with regards to the handling of read-only files. For example, 
  2090. CreateFile can be passed a parameter called CREATE_ALWAYS.  If the file to be 
  2091. created has the same name as a file that already exists, the CREATE_ALWAYS 
  2092. parameter causes the existing file to be overwritten.  In Windows NT, if the 
  2093. CREATE_ALWAYS parameter is used, CreateFile deletes the existing file, 
  2094. regardless of its attributes, and regardless of the access mode set by 
  2095. fdwAccess (another parameter that tells CreateFile to open the file as writable 
  2096. or read-only).  In OS/2, CreateFile fails if CREATE_ALWAYS is used and the 
  2097. access mode is set to read-only.  In OS/2, CreateFile also fails if any attempt 
  2098. is made to open an existing file with write access when the file's read-only 
  2099. attribute is set.  The OS/2 implementation of other file-manipulation 
  2100. functions, including DeleteFile and WriteFile, similarly respects file 
  2101. attributes. 
  2102.  
  2103. Programmers using the OS/2 implementation should be aware that a file's 
  2104. attributes must be set appropriately before the file can be deleted or opened 
  2105. with write access.  Furthermore, the implementation requires that a file must 
  2106. be opened with write access before data can be written to the file. 
  2107.  
  2108.  
  2109. ΓòÉΓòÉΓòÉ 7.24. Registry ΓòÉΓòÉΓòÉ
  2110.  
  2111. The following general information applies to OS/2 registry.  See also Registry 
  2112. Functions for information about the registry functions. 
  2113.  
  2114.  
  2115. ΓòÉΓòÉΓòÉ 7.24.1. Registry Tree Structure ΓòÉΓòÉΓòÉ
  2116.  
  2117. OS/2 defines the base set of persistent keys in the DOS branch of the name 
  2118. space, hanging off WINOS2 node.  The root of these registry keys is called 
  2119. winreg.  Beneath winreg, the following structure exists: 
  2120.  
  2121. winreg  ( root )   - - -
  2122.                   |
  2123.                   | - -  REGH _ WINOS2INI
  2124.                   |                   | - - -  WIN . INI
  2125.                   |                                 | -  WINI _ FONTS
  2126.                   |                                 | -  WINI _ INTL
  2127.                   |                                 | -  WINI _ DEVICES
  2128.                   |                                 | -  WINI _ WINDOWS
  2129.                   |                   | - - -  xxxxxxxxx  ( application  ini  file  name )
  2130.                   |
  2131.                   | - -  REGH _ SYSINFO
  2132.                   |               | - - TIME
  2133.                   |                  | -  TIME _ SETTING
  2134.                   |
  2135.                   |
  2136.                   - - -  REGH _ INIMAPPING  ( All  mappings  take  place
  2137.                                        under  REGH _ WINOS2INI  directory )
  2138.                                | - - - - WIN . INI
  2139.                                             ( contains  value  name  " FONTS "
  2140.                                              with  value  " WIN . INI \ WINI _ INTL " )
  2141.                                             ( contains  value  name  " DEVICES "
  2142.                                              with  value  " WIN . INI \ WINI _ DEVICES " )
  2143.                                             ( contains  value  name  " WINDOWS "
  2144.                                              with  value  " WIN . INI \ WINI _ WINDOWS " )
  2145.  
  2146. winreg is a name space node, not accessible through Windows 32-bit registry 
  2147. functions.  In addition to actual key handles, you can use the following as 
  2148. input handles to Windows 32-bit registry functions: 
  2149.  
  2150.      REGH_WINOS2INI 
  2151.      REGH_SYSINFO 
  2152.      REGH_INIMAPPING 
  2153.  
  2154.  They are defined in os2win.h. 
  2155.  
  2156.  The following describes the subdirectories in the tree: 
  2157.  
  2158.  REGH_WINOSINI Contains the supported system INI keys as well as application 
  2159.            INI data. All node names are: 
  2160.  
  2161.                Case-insensitive 
  2162.                Converted to uppercase 
  2163.  
  2164.            All attribute names are: 
  2165.  
  2166.                Case-insensitive 
  2167.                Converted to uppercase, except for value names under 
  2168.                 WINI_FONTS, WINI_INTL, and WINI_DEVICES 
  2169.  
  2170.            Values for WINI_FONTS, WINI_INTL, and WINI_DEVICES are obtained from 
  2171.            OS2.INI and so maintain the case-sensitive quality. 
  2172.  
  2173.            There is only one value contained in WINI_WINDOWS:  the default 
  2174.            printer device (value name device). 
  2175.  
  2176.  REGH_SYSINFO Contains any system information.  For now, the only data stored 
  2177.            under this branch is time-related information, such as time bias, 
  2178.            standard bias, daylight bias, and so on.  The information is used by 
  2179.            Windows time-related functions. 
  2180.  
  2181.  REGH_INIMAPPING Contains INI file mapping information. 
  2182.  
  2183.  
  2184. ΓòÉΓòÉΓòÉ 7.24.2. Adding an Application INI File to Registry ΓòÉΓòÉΓòÉ
  2185.  
  2186. Applications can add their own INI file to registry by: 
  2187.  
  2188.    1. Updating REGH_INIMAPPING:  Add the name of the application INI file under 
  2189.       REGH_INIMAPPING.  For example, for application XYZ, create a new node 
  2190.       under REGH_INIMAPPING called XYZ.INI.  For each section in XYZ.INI, 
  2191.       create a value under the XYZ.INI node.  The value name is the section 
  2192.       name.  The value content is the corresponding directory path under the 
  2193.       REGH_WINOS2INI node.  See step 2. 
  2194.  
  2195.    2. Updating REGH_WINOS2INI:  Add the name of the application INI file under 
  2196.       REGH_WINOS2INI.  For example, for application XYZ, create a new node 
  2197.       under REGH_WINOS2INI called XYZ.INI.  Add a new node under XYZ.INI.  The 
  2198.       name of the node is the group name. 
  2199.  
  2200.  After completing these two steps, the application can use Windows 32-bit 
  2201.  profile functions to modify the contents of XYZ.INI. 
  2202.  
  2203.  When finished, the registry structure looks like this: 
  2204.  
  2205.   winreg  ( root )   - - -
  2206.                     |
  2207.                     | - -  REGH _ WINOS2INI  - - -  XYZ . INI
  2208.                     |
  2209.                                             | - - section  1
  2210.                                             |
  2211.                                             |   ( value  name = key  name  11 ;
  2212.                                             |    value  content . . . )
  2213.                                             |    value  name = key  name  12 ;
  2214.                                             |    value  content . . . )
  2215.                                             |
  2216.                                             | - - section  2
  2217.                                             |
  2218.                                                ( value  name = key  name  21 ;
  2219.                                                 value  content . . . )
  2220.                                                 value  name = key  name  22 ;
  2221.                                                 value  content . . . )
  2222.  
  2223.                     | - -  REGH _ INIMAPPING
  2224.                           | - - -  XYZ . INI
  2225.                           ( value  name = section1 ;
  2226.                            value  content = " XYZ . INI \ section1 " )
  2227.                           ( value  name = section2 ;
  2228.                            value  content = " XYZ . INI \ section2 " )
  2229.  
  2230.  All new keys added under HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS 
  2231.  NT\CURRENTVERSION\INIFILEMAPPING are added to REGH_INIMAPPING. 
  2232.  
  2233.  All references to HKEY_LOCAL_MACHINE\SOFTWARE are mapped to REGH_WINOS2INI. 
  2234.  
  2235.  
  2236. ΓòÉΓòÉΓòÉ 7.24.3. Viewing Registry ΓòÉΓòÉΓòÉ
  2237.  
  2238. The NameExt is an OS/2 command-line utility program that is used to display the 
  2239. contents of nodes in the OS/2 name space.  The Open32 registry is part of the 
  2240. OS/2 name space.  It resides under the node path DOS/WINOS2/WINREG. 
  2241.  
  2242. By default, the information generated by this utility program is written to the 
  2243. terminal (STDOUT); however, the user can use the "-f" parameter to write the 
  2244. output to a file.  NameExt has the flexibility to provide information to a 
  2245. single node (the default or -1 0), for all nodes at or below the specified node 
  2246. (-1 *), or to limit the depth in the name space.  The user has even finer 
  2247. control in being able to select only nodes that satisfy a specific set of 
  2248. search criteria (the "-s" parameter).  Finally, the user can: 
  2249.  
  2250.      Retrieve all information for a node (the default) 
  2251.      Retrieve only the metadata for a node (the "-m" parameter) 
  2252.      Include or exclude a list of attributes (the "-i" and "-x" parameters) 
  2253.  
  2254.  Character strings will be output in display format if they contain all 
  2255.  printable characters; otherwise they will be output in character-based hex 
  2256.  format. 
  2257.  
  2258.  Syntax: 
  2259.  
  2260.   Γöî ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÉ
  2261.   Γöé                                                                               Γöé
  2262.   Γöé  > > ΓöÇΓöÇ NameExt ΓöÇΓöÇ path ΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ >  Γöé
  2263.   Γöé                     Γöö ΓöÇ - s  ΓöÇ Γöñ  search _ filter  Γö£ ΓöÇΓöÇ Γöÿ                                 Γöé
  2264.   Γöé                                                                               Γöé
  2265.   Γöé                                      ( 3 )                                       Γöé
  2266.   Γöé  > ΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γö¼ ΓöÇΓöÇ - m  ΓöÇΓöÇΓöÇΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ >  Γöé
  2267.   Γöé     Γöé      Γöî ΓöÇ , ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÉ   Γöé           Γöö ΓöÇ - f  output _ file ΓöÇ Γöÿ                   Γöé
  2268.   Γöé     Γöé                        Γöé   Γöé                                               Γöé
  2269.   Γöé     Γöé                     ( 1 )    Γöé                                               Γöé
  2270.   Γöé     Γö£ ΓöÇ - i  ΓöÇΓöÇ attribute _ name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ                                               Γöé
  2271.   Γöé     Γöé      Γöî ΓöÇ , ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÉ   Γöé                                               Γöé
  2272.   Γöé     Γöé                        Γöé   Γöé                                               Γöé
  2273.   Γöé     Γöé                     ( 2 )    Γöé                                               Γöé
  2274.   Γöé     Γöö ΓöÇ - x  ΓöÇΓöÇ attribute _ name ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöÿ                                               Γöé
  2275.   Γöé                                                                               Γöé
  2276.   Γöé     Γöî ΓöÇ - l  0  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÉ                                                   Γöé
  2277.   Γöé  > ΓöÇΓöÇ Γö╝ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇ Γö╝ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ > <  Γöé
  2278.   Γöé     Γö£ ΓöÇ - l  levels _ to _ extract ΓöÇ Γöñ                                                   Γöé
  2279.   Γöé     Γöö ΓöÇ - l  * ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöÿ                                                   Γöé
  2280.   Γöé                                                                               Γöé
  2281.   Γöé  SEARCH _ FILTER :                                                                Γöé
  2282.   Γöé     Γöî ΓöÇ Γöñ  logical _ operator  Γö£ ΓöÇ ΓöÉ                                                   Γöé
  2283.   Γöé       Γöé                   Γöé  Γöé                                                   Γöé
  2284.   Γöé  Γö£ ΓöÇΓöÇΓöÇΓöÇ Γöñ  filter  Γö£ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γö┤ ΓöÇ Γö┤ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ  Γöé
  2285.   Γöé                                                                               Γöé
  2286.   Γöé  LOGICAL _ OPERATOR :                                                             Γöé
  2287.   Γöé  Γö£ ΓöÇΓöÇ Γö¼ ΓöÇ AND ΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ  Γöé
  2288.   Γöé     Γö£ ΓöÇ OR ΓöÇΓöÇ Γöñ                                                                    Γöé
  2289.   Γöé     Γöö ΓöÇ XOR ΓöÇ Γöÿ                                                                    Γöé
  2290.   Γöé                                                                               Γöé
  2291.   Γöé  FILTER :                                                                       Γöé
  2292.   Γöé  Γö£ ΓöÇΓöÇ Γö¼ ΓöÇ attribute _ name ΓöÇ Γö¼ ΓöÇ EQ ΓöÇ Γö¼ ΓöÇΓöÇ Γöñ  value _ expression  Γö£ ΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ Γöñ  Γöé
  2293.   Γöé     Γöé                 Γö£ ΓöÇ NE ΓöÇ Γöñ                         Γöé                           Γöé
  2294.   Γöé     Γöé                 Γö£ ΓöÇ GT ΓöÇ Γöñ                         Γöé                           Γöé
  2295.   Γöé     Γöé                 Γö£ ΓöÇ GE ΓöÇ Γöñ                         Γöé                           Γöé
  2296.   Γöé     Γöé                 Γö£ ΓöÇ LT ΓöÇ Γöñ                         Γöé                           Γöé
  2297.   Γöé     Γöé                 Γöö ΓöÇ LE ΓöÇ Γöÿ                         Γöé                           Γöé
  2298.   Γöé     Γöé                        ( 4 )                     Γöé                           Γöé
  2299.   Γöé     Γö£ ΓöÇ EXISTS ( attribute _ name ) ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ Γöñ                           Γöé
  2300.   Γöé     Γöé                                ( 5 )             Γöé                           Γöé
  2301.   Γöé     Γö£ ΓöÇ RSTR ( attribute _ name )  EQ  string ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ                           Γöé
  2302.   Γöé     Γöé                                ( 6 )             Γöé                           Γöé
  2303.   Γöé     Γö£ ΓöÇ LSTR ( attribute _ name )  EQ  string ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ                           Γöé
  2304.   Γöé     Γöé                                  ( 7 )           Γöé                           Γöé
  2305.   Γöé     Γö£ ΓöÇ MIDSTR ( attribute _ name )  EQ  string ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ Γöñ                           Γöé
  2306.   Γöé     Γö£ ΓöÇ ( ΓöÇ Γöñ  filter  Γö£ ΓöÇ ) ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇ Γöñ                           Γöé
  2307.   Γöé     Γöö ΓöÇ NOT ( ΓöÇ Γöñ  filter  Γö£ ΓöÇ ) ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöÿ                           Γöé
  2308.   Γöé                                                                               Γöé
  2309.   Γöé  VALUE _ EXPRESSION :                                                             Γöé
  2310.   Γöé  Γö£ ΓöÇΓöÇ Γö¼ ΓöÇ ( [ system _ type ΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇ Γö¼ ΓöÇ ] value ) ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ  Γöé
  2311.   Γöé     Γöé                Γöö ΓöÇ : user _ type ΓöÇ Γöÿ                Γöé                             Γöé
  2312.   Γöé     Γöé                                   Γöî ΓöÇ , ΓöÇΓöÇΓöÇ ΓöÉ    Γöé                             Γöé
  2313.   Γöé     Γöé                                         Γöé    Γöé                             Γöé
  2314.   Γöé     Γö£ ΓöÇ ( [ system _ type [ ] ΓöÇ Γö¼ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇ Γö¼ ΓöÇ ] ΓöÇΓöÇ value Γö┤ ΓöÇ ) ΓöÇ Γöñ                             Γöé
  2315.   Γöé     Γöé                  Γöö ΓöÇ : user _ type ΓöÇ Γöÿ              Γöé                             Γöé
  2316.   Γöé     Γö£ ΓöÇ quoted _ character _ string ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöñ                             Γöé
  2317.   Γöé     Γöé    Γöî ΓöÇ , ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÉ                        Γöé                             Γöé
  2318.   Γöé     Γöé                     Γöé                        Γöé                             Γöé
  2319.   Γöé     Γöö ΓöÇ { ΓöÇΓöÇ value _ expression Γö┤ ΓöÇ } ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇ Γöÿ                             Γöé
  2320.   Γöé                                                                               Γöé
  2321.   Γöé  NOTES :                                                                        Γöé
  2322.   Γöé  ( 1 )   This  form  specifies  that  the  list  of  attributes  that  follows  should  be   Γöé
  2323.   Γöé       included  in  the  extract .                                                 Γöé
  2324.   Γöé                                                                               Γöé
  2325.   Γöé  ( 2 )   This  form  specifies  that  the  list  of  attributes  that  follows  should  be   Γöé
  2326.   Γöé       excluded  from  the  extract .                                               Γöé
  2327.   Γöé                                                                               Γöé
  2328.   Γöé  ( 3 )   This  form  specifies  that  the  extract  contains  only  the  metadata  and  the  Γöé
  2329.   Γöé       path  name .                                                               Γöé
  2330.   Γöé                                                                               Γöé
  2331.   Γöé  ( 4 )   This  expression  is  true  if  the  attribute  exists  and  has  any  value  or  no  Γöé
  2332.   Γöé       value .                                                                   Γöé
  2333.   Γöé                                                                               Γöé
  2334.   Γöé  ( 5 )   This  expression  is  true  if  the  right - most  portion  of  attribute _ name ' s    Γöé
  2335.   Γöé       value  equals  the  string .                                                 Γöé
  2336.   Γöé                                                                               Γöé
  2337.   Γöé  ( 6 )   This  expression  is  true  if  the  left - most  portion  of  attribute _ name ' s     Γöé
  2338.   Γöé       value  equals  the  string .                                                 Γöé
  2339.   Γöé                                                                               Γöé
  2340.   Γöé  ( 7 )   This  expression  is  true  if  the  string  appears  anywhere  in                Γöé
  2341.   Γöé       attribute _ name ' s  value .                                                  Γöé
  2342.   Γöé                                                                               Γöé
  2343.   Γöö ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöÿ
  2344.  Parameters: 
  2345.  
  2346.  path      Name space to be displayed 
  2347.  
  2348.  -s        Flag used to specify that you want to extract nodes which satisfy a 
  2349.            certain set of search criteria. 
  2350.  
  2351.  search_filter The search criteria used to extract nodes. 
  2352.  
  2353.  -i        Flag used to specify that you want to provide a list of attributes 
  2354.            to be included in the extract. 
  2355.  
  2356.  -x        Flag used to specify that you want to provide a list of attributes 
  2357.            to be excluded from the extract. 
  2358.  
  2359.  attribute_name The name of the attribute to be extracted. 
  2360.  
  2361.  -m        Flag used to specify that you want only the metadata for a node 
  2362.            extracted. 
  2363.  
  2364.  -f        Sends the results to an output file that you specify. 
  2365.  
  2366.  output_file A user-specified file to which the extracted data is sent. 
  2367.  
  2368.  -l        Flag used to specify the number of levels deep (relative to the 
  2369.            path) in the name space to extract. 
  2370.  
  2371.  *         Flag used to specify that you want all the nodes at or below a 
  2372.            specified node. 
  2373.  
  2374.  0         Provides information for the node specified by the path. 
  2375.  
  2376.  levels_to_extract Limits the depth of a name space. 
  2377.  
  2378.  logical_operator Allowable logical operators are AND, OR, and XOR. 
  2379.  
  2380.  value_expression A value given to an expression. 
  2381.  
  2382.  EXISTS(attribute_name) This expression is true if the attribute exists, and 
  2383.            has any or no value. 
  2384.  
  2385.  RSTR(attribute_name) EQ string This expression is true if the right-most 
  2386.            portion of attribute_name's value equals the string. 
  2387.  
  2388.  LSTR(attribute_name) EQ string This expression is true is the left-most 
  2389.            portion of attribute_name's value equals the string. 
  2390.  
  2391.  MIDSTR(attribute_name) EQ string This expression is true if the string appears 
  2392.            anywhere in attribute_name's value. 
  2393.  
  2394.  system_type System-defined attribute types.  The system_type can be one of the 
  2395.            following: 
  2396.  
  2397.                 BOOLEAN 
  2398.                 CHAR 
  2399.                 UCHAR 
  2400.                 UNICHAR 
  2401.                 INT8 
  2402.                 UINT8 
  2403.                 INT16 
  2404.                 UNIT16 
  2405.                 INT32 
  2406.                 UINT32 
  2407.                 BYTE 
  2408.                 PORT 
  2409.  
  2410.  user_type User-defined attribute types. 
  2411.  
  2412.  value     Any value appropriate for the system type. 
  2413.  
  2414.  quoted_character_string One-dimensional array of characters, enclosed in 
  2415.            quotes. 
  2416.  
  2417.  Return Codes: 
  2418.  
  2419.  0    OK. The command ran successfully. 
  2420.  4    Warning. The command probably ran successfully. 
  2421.  8    Error.  The command did not run successfully. 
  2422.  12   Internal Error. The command did not run successfully. 
  2423.  
  2424.  There are currently no warnings (return codes of 4) issued by the utilities. 
  2425.  A warning return code is included only for completeness. The error will be 
  2426.  further identified by messages that are issued by the commands when errors are 
  2427.  detected. 
  2428.  
  2429.  Example: 
  2430.  
  2431.  The following example displays the contents of the entire Open32 registry. 
  2432.  
  2433.   nameext  dos \ winos2 \ winreg  - l  *
  2434.  
  2435.  
  2436. ΓòÉΓòÉΓòÉ 7.24.4. Restoring Registry ΓòÉΓòÉΓòÉ
  2437.  
  2438. To restore registry, do the following: 
  2439.  
  2440.    1. End the RSRV session by: 
  2441.  
  2442.         a. Editing CONFIG.SYS and removing the following line: 
  2443.  
  2444.                       RUN = . . . \ RSRV . EXE
  2445.  
  2446.            Note:  This line will be added back later. 
  2447.  
  2448.         b. Restarting the system. 
  2449.  
  2450.    2. Delete all *.DAT files in the root directory of the boot drive: 
  2451.  
  2452.              BOOT.DAT DOS.DAT REGISTRY.DAT
  2453.  
  2454.    3. Add the following line back in the CONFIG.SYS file: 
  2455.  
  2456.             RUN = . . . \ RSRV . EXE
  2457.  
  2458.    4. Start up an RSRV session by going to the OS2 directory and typing: 
  2459.  
  2460.             start  rsrv
  2461.  
  2462.    5. Go to the OS2 directory and type: 
  2463.  
  2464.             inst _ dos  dos
  2465.  
  2466.    6. Then, type: 
  2467.  
  2468.             reginit
  2469.  
  2470.  Now registry is fully restored to post-system installation level. 
  2471.  
  2472.  If you want to save your registry data, archive DOS.DAT on the root of your 
  2473.  boot drive.  In case of corruption, to restore data to this level, do the 
  2474.  following: 
  2475.  
  2476.    1. End the RSRV session by: 
  2477.  
  2478.         a. Editing CONFIG.SYS and remove the following line: 
  2479.  
  2480.                       RUN = . . . \ RSRV . EXE
  2481.  
  2482.            Note:  This line will be added back later. 
  2483.         b. Restarting the system. 
  2484.  
  2485.    2. Delete all *.DAT files in the root directory of the boot drive: 
  2486.  
  2487.             BOOT . DAT  DOS . DAT  REGISTRY . DAT
  2488.  
  2489.    3. Add the following line back in the CONFIG.SYS file: 
  2490.  
  2491.             RUN = . . . \ RSRV . EXE
  2492.  
  2493.    4. Copy the archived file as DOS.DAT in the root directory. 
  2494.  
  2495.    5. Go to the OS2 directory and type: 
  2496.  
  2497.             inst _ dos  dos
  2498.  
  2499.    6. Start up an RSRV session by going to the OS2 directory and typing: 
  2500.  
  2501.             start  rsrv
  2502.  
  2503.  
  2504. ΓòÉΓòÉΓòÉ 7.25. Return Codes ΓòÉΓòÉΓòÉ
  2505.  
  2506. Open32 return codes are currently not guaranteed to be mapped to the same 
  2507. return codes that Windows returns for the same errors.  In most cases, this 
  2508. should be acceptable because the set of OS/2 errors is generally a superset of 
  2509. the Windows NT errors.  Virtually all of the OS/2 error codes map directly to 
  2510. the identical Windows NT error code. OS/2, however, has several additional 
  2511. error codes that Windows NT does not.  These error codes provide more precise 
  2512. information about the cause of the failure. 
  2513.  
  2514.  
  2515. ΓòÉΓòÉΓòÉ 7.26. SMART Conversion Error ΓòÉΓòÉΓòÉ
  2516.  
  2517. When using SMART to convert an RC file that contains a string table with an 
  2518. entry that has an ampersand (&) in it causes the ampersand to be converted 
  2519. incorrectly to a tilde (~) character throughout the entire RC file (including 
  2520. menus and string tables).  The string table conversion could cause some 
  2521. unexpected problems with text strings. For example: 
  2522.  
  2523. You  &  me
  2524.  
  2525. becomes: 
  2526.  
  2527. You  ~  me
  2528.  
  2529.  
  2530. ΓòÉΓòÉΓòÉ 7.27. Structure Packing ΓòÉΓòÉΓòÉ
  2531.  
  2532. The Windows NT DLLs are compiled with 4-byte default packing. However, the 
  2533. Windows NT headers do not force 4-byte default packing. Instead, Windows NT 
  2534. applications are required be compiled with either /Zp4 or no /Zp specification, 
  2535. which defaults to 4-byte packing.  This means that if a Win32 application 
  2536. compiles with /Zp1, most of its Win32 structures will be misaligned with 
  2537. respect to the Windows NT DLLs, and the results will be unpredictable. 
  2538.  
  2539. MSVC has the unique feature of supporting nested packing modes.  This means a 
  2540. Win32 application can compile using MSVC with /Zp1 or /Zp2 and still have the 
  2541. Win32 structures properly packed.  They simply need to do the following: 
  2542.  
  2543. # pragma  pack ( 4 )  # include  < windows . h >  # pragma  pack ( )
  2544.  
  2545. This will work only for MSVC because only MSVC supports pushing and popping of 
  2546. packing modes.  The Win32 headers then, of course, always push or pop the 
  2547. packing mode when they explicitly want to set packing for a particular 
  2548. structure or set of structures.  This will not work for any other compiler, 
  2549. including C/Set. 
  2550.  
  2551. Unlike the Win32 headers, Open32 forces the right packing (4) to occur 
  2552. throughout the Open32 headers, regardless of which compiler options are 
  2553. specified.  OS/2 does this to accommodate code bases that are normally compiled 
  2554. using MSVC and to make use of the MSVC packing feature to specify either /Zp1 
  2555. or /Zp2. 
  2556.  
  2557. To summarize: 
  2558.  
  2559.      Open32 applications always get properly packed Win32 structures, 
  2560.       regardless of the packing they specify through the compiler switch. 
  2561.  
  2562.      The true Win32 header files do not do this. 
  2563.  
  2564.      Open32 must do this to prevent potentially significant changes in Win32 
  2565.       code bases normally compiled with MSVC. 
  2566.  
  2567.  
  2568. ΓòÉΓòÉΓòÉ 7.28. System Handles ΓòÉΓòÉΓòÉ
  2569.  
  2570. The handles for system objects (such as mutexes, events, semaphores, processes, 
  2571. threads, files, and so on) are not compatible with the OS/2 handles. 
  2572.  
  2573.  
  2574. ΓòÉΓòÉΓòÉ 7.29. System Object Names ΓòÉΓòÉΓòÉ
  2575.  
  2576. Windows NT does not allow back slashes within the names of system objects.  The 
  2577. OS/2 implementation of system objects does not restrict the name space in any 
  2578. way, so OS/2 does not to support this restriction. 
  2579.  
  2580.  
  2581. ΓòÉΓòÉΓòÉ 7.30. Text Mode Applications ΓòÉΓòÉΓòÉ
  2582.  
  2583. Open32 is designed to work with PM-compatible text mode applications (such as 
  2584. those marked as WINDOWCOMPAT).  As with native OS/2 applications, however, a 
  2585. text mode Open32 application is restricted to a limited set of Open32 and PM 
  2586. functions (no GDI and few user functions). Also, as with native OS/2 
  2587. applications, pure text mode applications (those marked as NOWINDOWCOMPAT) are 
  2588. prohibited from calling any Open32 functions (as well as PM functions).  Calls 
  2589. to any Open32 function from an application before PM is initialized are 
  2590. currently defined to produce unpredictable behavior. 
  2591.  
  2592.  
  2593. ΓòÉΓòÉΓòÉ 8. Testing ΓòÉΓòÉΓòÉ
  2594.  
  2595. To test Open32 programs, do the following: 
  2596.  
  2597.    1. Rewrite the makefile for the OS/2 build environment. 
  2598.    2. Use the VisualAge C++ compiler to compile the code. 
  2599.    3. Use the IPF compiler included in the Toolkit to compile the help files. 
  2600.    4. Use the RC compiler included in the Toolkit to compile the resource 
  2601.       files. 
  2602.    5. Perform testing as you do normally. 
  2603.  
  2604.  
  2605. ΓòÉΓòÉΓòÉ 9. Example of Migrating Code ΓòÉΓòÉΓòÉ
  2606.  
  2607. The following is example of the steps you might follow to convert and compile 
  2608. code that uses the sample code-hiworld.c: 
  2609.  
  2610.      Sample 
  2611.  
  2612.        1. Convert the Windows 32-bit resource file hiworld.rc to an OS/2 
  2613.           resource file using SMART. 
  2614.  
  2615.           Note:  SMART will rename the Windows 32-bit resource file from 
  2616.           hiworld.rc to hiworld.rcx and creates an OS/2 resource file named 
  2617.           hiworld.rc if you click on the Overwrite Original radio button on the 
  2618.           Resource Translation dialog. Otherwise, SMART names the OS/2 resource 
  2619.           file hiworld.rcx. 
  2620.  
  2621.        2. Change hiworld.h to include hiworld.hhh, which is the output from 
  2622.           SMART. hiworld.hhh contains #defines for the resource IDs. For your 
  2623.           convenience, this change has been flagged with comments in the 
  2624.           Windows 32-bit hiworld.c source code. The comments are removed in the 
  2625.           OS/2 hiworld.c code. 
  2626.  
  2627.        3. In any source module that includes <windows.h>, change: 
  2628.  
  2629.                     #include <windows.h>
  2630.  
  2631.           to: 
  2632.  
  2633.                     #include <os2win.h>
  2634.  
  2635.           This change has been flagged with comments in the Windows 32-bit 
  2636.           hiworld.c code. The comments are removed in the OS/2 hiworld.c code. 
  2637.  
  2638.        4. Change the code in hiworld.c that uses string resource IDs to use 
  2639.           MAKEINTRESOURCE with the numeric resource IDs in hiworld.hhh. These 
  2640.           have been flagged with comments in the Windows 32-bit hiworld.c 
  2641.           source code. The comments are removed in the OS/2 hiworld.c code. 
  2642.  
  2643.           Note:  This is a temporary restriction. 
  2644.  
  2645.        5. Create a DEF file and specify a stack size of at least 128KB. Include 
  2646.           a NAME statement which specifies an apptype of WINDOWAPI. 
  2647.  
  2648.        6. Link main.obj (found in the toolkit\c directory under your Open32 
  2649.           directory) with hiworld.obj to form hiworld.exe. This is done in the 
  2650.           makefile provided with this sample. 
  2651.  
  2652.        7. Run hiworld.exe as you would any other OS/2 executable file. 
  2653.  
  2654.  
  2655. ΓòÉΓòÉΓòÉ 10. Open32 Functions ΓòÉΓòÉΓòÉ
  2656.  
  2657. The highlighted functions behave differently than their Windows 32-bit 
  2658. counterparts. 
  2659.  
  2660.       _lclose 
  2661.       _lcreat 
  2662.       _llseek 
  2663.       _lopen 
  2664.       _lread 
  2665.       _lwrite 
  2666.  
  2667.       AbortDoc 
  2668.       AbortPath 
  2669.       AddAtom 
  2670.       AddFontResource 
  2671.       AdjustWindowRect 
  2672.       AdjustWindowRectEx 
  2673.       AngleArc 
  2674.       AnimatePalette 
  2675.       AppendMenu 
  2676.       Arc 
  2677.       ArcTo 
  2678.       ArrangeIconicWindows 
  2679.  
  2680.       Beep 
  2681.       BeginDeferWindowPos 
  2682.       BeginPaint 
  2683.       BeginPath 
  2684.       BitBlt 
  2685.       BringWindowToTop 
  2686.  
  2687.       CallMsgFilter 
  2688.       CallNextHookEx 
  2689.       CallWindowProc 
  2690.       ChangeClipboardChain 
  2691.       CharLower 
  2692.       CharLowerBuff 
  2693.       CharNext 
  2694.       CharPrev 
  2695.       CharToOem 
  2696.       CharToOemBuff 
  2697.       CharUpper 
  2698.       CharUpperBuff 
  2699.       CheckDlgButton 
  2700.       CheckMenuItem 
  2701.       CheckRadioButton 
  2702.       ChildWindowFromPoint 
  2703.       ChooseColor 
  2704.       ChooseFont 
  2705.       Chord 
  2706.       ClientToScreen 
  2707.       ClipCursor 
  2708.       CloseClipboard 
  2709.       CloseEnhMetaFile 
  2710.       CloseFigure 
  2711.       CloseHandle 
  2712.       CloseMetaFile 
  2713.       CloseWindow 
  2714.       CombineRgn 
  2715.       CommDlgExtendedError 
  2716.       CompareFileTime 
  2717.       ConvertDefaultLocale 
  2718.       CopyAcceleratorTable 
  2719.       CopyCursor 
  2720.       CopyEnhMetaFile 
  2721.       CopyFile 
  2722.       CopyIcon 
  2723.       CopyMetaFile 
  2724.       CopyRect 
  2725.       CountClipboardFormats 
  2726.       CreateAcceleratorTable 
  2727.       CreateBitmap 
  2728.       CreateBitmapIndirect 
  2729.       CreateBrushIndirect 
  2730.       CreateCaret 
  2731.       CreateCompatibleBitmap 
  2732.       CreateCompatibleDC 
  2733.       CreateCursor 
  2734.       CreateDC 
  2735.       CreateDialog 
  2736.       CreateDialogIndirect 
  2737.       CreateDialogIndirectParam 
  2738.       CreateDialogParam 
  2739.       CreateDIBitmap 
  2740.       CreateDIBPatternBrushPt 
  2741.       CreateDirectory 
  2742.       CreateEllipticRgn 
  2743.       CreateEllipticRgnIndirect 
  2744.       CreateEnhMetaFile 
  2745.       CreateEvent 
  2746.       CreateFile 
  2747.       CreateFont 
  2748.       CreateFontIndirect 
  2749.       CreateHatchBrush 
  2750.       CreateIC 
  2751.       CreateIcon 
  2752.       CreateIconFromResource 
  2753.       CreateIconIndirect 
  2754.       CreateMDIWindow 
  2755.       CreateMenu 
  2756.       CreateMetaFile 
  2757.       CreateMutex 
  2758.       CreatePalette 
  2759.       CreatePatternBrush 
  2760.       CreatePen 
  2761.       CreatePenIndirect 
  2762.       CreatePolygonRgn 
  2763.       CreatePolyPolygonRgn 
  2764.       CreatePopupMenu 
  2765.       CreateProcess 
  2766.       CreateRectRgn 
  2767.       CreateRectRgnIndirect 
  2768.       CreateRoundRectRgn 
  2769.       CreateSemaphore 
  2770.       CreateSolidBrush 
  2771.       CreateThread 
  2772.       CreateWindow 
  2773.       CreateWindowEx 
  2774.  
  2775.       DdeAbandonTransaction 
  2776.       DdeAccessData 
  2777.       DdeAddData 
  2778.       DdeClientTransaction 
  2779.       DdeCmpStringHandles 
  2780.       DdeConnect 
  2781.       DdeConnectList 
  2782.       DdeCreateDataHandle 
  2783.       DdeCreateStringHandle 
  2784.       DdeDisconnect 
  2785.       DdeDisconnectList 
  2786.       DdeEnableCallback 
  2787.       DdeFreeDataHandle 
  2788.       DdeFreeStringHandle 
  2789.       DdeGetData 
  2790.       DdeGetLastError 
  2791.       DdeInitialize 
  2792.       DdeKeepStringHandle 
  2793.       DdeNameService 
  2794.       DdePostAdvise 
  2795.       DdeQueryConvInfo 
  2796.       DdeQueryNextServer 
  2797.       DdeQueryString 
  2798.       DdeReconnect 
  2799.       DdeSetUserHandle 
  2800.       DdeUnaccessData 
  2801.       DdeUninitialize 
  2802.       DefDlgProc 
  2803.       DeferWindowPos 
  2804.       DefFrameProc 
  2805.       DefMDIChildProc 
  2806.       DefWindowProc 
  2807.       DeleteAtom 
  2808.       DeleteCriticalSection 
  2809.       DeleteDC 
  2810.       DeleteEnhMetaFile 
  2811.       DeleteFile 
  2812.       DeleteMenu 
  2813.       DeleteMetaFile 
  2814.       DeleteObject 
  2815.       DestroyAcceleratorTable 
  2816.       DestroyCaret 
  2817.       DestroyCursor 
  2818.       DestroyIcon 
  2819.       DestroyMenu 
  2820.       DestroyWindow 
  2821.       DialogBox 
  2822.       DialogBoxIndirect 
  2823.       DialogBoxIndirectParam 
  2824.       DialogBoxParam 
  2825.       DispatchMessage 
  2826.       DlgDirList 
  2827.       DlgDirListComboBox 
  2828.       DlgDirSelectComboBoxEx 
  2829.       DlgDirSelectEx 
  2830.       DllEntryPoint 
  2831.       DosDateTimeToFileTime 
  2832.       DPtoLP 
  2833.       DragAcceptFiles 
  2834.       DragFinish 
  2835.       DragQueryFile 
  2836.       DragQueryPoint 
  2837.       DrawFocusRect 
  2838.       DrawIcon 
  2839.       DrawMenuBar 
  2840.       DrawText 
  2841.       DuplicateHandle 
  2842.  
  2843.       Ellipse 
  2844.       EmptyClipboard 
  2845.       EnableMenuItem 
  2846.       EnableScrollBar 
  2847.       EnableWindow 
  2848.       EndDeferWindowPos 
  2849.       EndDialog 
  2850.       EndDoc 
  2851.       EndPage 
  2852.       EndPaint 
  2853.       EndPath 
  2854.       EnhMetaFileProc 
  2855.       EnterCriticalSection 
  2856.       EnumChildWindows 
  2857.       EnumClipboardFormats 
  2858.       EnumEnhMetaFile 
  2859.       EnumFontFamilies 
  2860.       EnumFonts 
  2861.       EnumMetaFile 
  2862.       EnumObjects 
  2863.       EnumProps 
  2864.       EnumPropsEx 
  2865.       EnumSystemLocales 
  2866.       EnumThreadWindows 
  2867.       EnumWindows 
  2868.       EqualRect 
  2869.       EqualRgn 
  2870.       Escape 
  2871.       ExcludeClipRect 
  2872.       ExcludeUpdateRgn 
  2873.       ExitProcess 
  2874.       ExitThread 
  2875.       ExitWindows 
  2876.       ExitWindowsEx 
  2877.       ExtCreatePen 
  2878.       ExtCreateRegion 
  2879.       ExtFloodFill 
  2880.       ExtSelectClipRgn 
  2881.       ExtTextOut 
  2882.       ExtractIcon 
  2883.  
  2884.       FatalAppExit 
  2885.       FatalExit 
  2886.       FileTimeToDosDateTime 
  2887.       FileTimeToLocalFileTime 
  2888.       FileTimeToSystemTime 
  2889.       FillPath 
  2890.       FillRect 
  2891.       FillRgn 
  2892.       FindAtom 
  2893.       FindClose 
  2894.       FindFirstFile 
  2895.       FindNextFile 
  2896.       FindResource 
  2897.       FindText 
  2898.       FindWindow 
  2899.       FlashWindow 
  2900.       FlattenPath 
  2901.       FloodFill 
  2902.       FlushFileBuffers 
  2903.       FrameRect 
  2904.       FrameRgn 
  2905.       FreeDDElParam 
  2906.       FreeLibrary 
  2907.       FreeProcInstance 
  2908.  
  2909.       GdiComment 
  2910.       GetACP 
  2911.       GetActiveWindow 
  2912.       GetArcDirection 
  2913.       GetAspectRatioFilterEx 
  2914.       GetAsyncKeyState 
  2915.       GetAtomName 
  2916.       GetBitmapBits 
  2917.       GetBitmapDimensionEx 
  2918.       GetBkColor 
  2919.       GetBkMode 
  2920.       GetBoundsRect 
  2921.       GetBrushOrgEx 
  2922.       GetBValue 
  2923.       GetCapture 
  2924.       GetCaretBlinkTime 
  2925.       GetCaretPos 
  2926.       GetCharABCWidths 
  2927.       GetCharWidth 
  2928.       GetClassInfo 
  2929.       GetClassLong 
  2930.       GetClassName 
  2931.       GetClassWord 
  2932.       GetClientRect 
  2933.       GetClipboardData 
  2934.       GetClipboardFormatName 
  2935.       GetClipboardOwner 
  2936.       GetClipboardViewer 
  2937.       GetClipBox 
  2938.       GetClipCursor 
  2939.       GetClipRgn 
  2940.       GetCommandLine 
  2941.       GetCurrentDirectory 
  2942.       GetCurrentObject 
  2943.       GetCurrentPositionEx 
  2944.       GetCurrentProcess 
  2945.       GetCurrentProcessId 
  2946.       GetCurrentThread 
  2947.       GetCurrentThreadId 
  2948.       GetCurrentTime 
  2949.       GetCursor 
  2950.       GetCursorPos 
  2951.       GetDC 
  2952.       GetDCEx 
  2953.       GetDCOrgEx 
  2954.       GetDesktopWindow 
  2955.       GetDeviceCaps 
  2956.       GetDialogBaseUnits 
  2957.       GetDIBits 
  2958.       GetDiskFreeSpace 
  2959.       GetDlgCtrlID 
  2960.       GetDlgItem 
  2961.       GetDlgItemInt 
  2962.       GetDlgItemText 
  2963.       GetDoubleClickTime 
  2964.       GetDriveType 
  2965.       GetEnhMetaFile 
  2966.       GetEnhMetaFileBits 
  2967.       GetEnhMetaFileDescription 
  2968.       GetEnhMetaFileHeader 
  2969.       GetEnhMetaFilePaletteEntries 
  2970.       GetEnvironmentStrings 
  2971.       GetEnvironmentVariable 
  2972.       GetExitCodeProcess 
  2973.       GetExitCodeThread 
  2974.       GetFileAttributes 
  2975.       GetFileInformationByHandle 
  2976.       GetFileSize 
  2977.       GetFileTime 
  2978.       GetFileTitle 
  2979.       GetFileType 
  2980.       GetFocus 
  2981.       GetForegroundWindow 
  2982.       GetFullPathName 
  2983.       GetGraphicsMode 
  2984.       GetGValue 
  2985.       GetIconInfo 
  2986.       GetKerningPairs 
  2987.       GetKeyboardLayout 
  2988.       GetKeyboardState 
  2989.       GetKeyboardType 
  2990.       GetKeyNameText 
  2991.       GetKeyState 
  2992.       GetLastActivePopup 
  2993.       GetLastError 
  2994.       GetLocaleInfo 
  2995.       GetLocalTime 
  2996.       GetLogicalDrives 
  2997.       GetLogicalDriveStrings 
  2998.       GetMapMode 
  2999.       GetMenu 
  3000.       GetMenuCheckMarkDimensions 
  3001.       GetMenuContextHelpID 
  3002.       GetMenuItemCount 
  3003.       GetMenuItemID 
  3004.       GetMenuState 
  3005.       GetMenuString 
  3006.       GetMessage 
  3007.       GetMessageExtraInfo 
  3008.       GetMessagePos 
  3009.       GetMessageTime 
  3010.       GetMetaFile 
  3011.       GetMetaFileBitsEx 
  3012.       GetMiterLimit 
  3013.       GetModuleFileName 
  3014.       GetModuleHandle 
  3015.       GetNearestColor 
  3016.       GetNearestPaletteIndex 
  3017.       GetNextDlgGroupItem 
  3018.       GetNextDlgTabItem 
  3019.       GetNextWindow 
  3020.       GetObject 
  3021.       GetObjectType 
  3022.       GetOEMCP 
  3023.       GetOpenClipboardWindow 
  3024.       GetOpenFileName 
  3025.       GetOutlineTextMetrics 
  3026.       GetOverlappedResult 
  3027.       GetPaletteEntries 
  3028.       GetParent 
  3029.       GetPath 
  3030.       GetPixel 
  3031.       GetPolyFillMode 
  3032.       GetPriorityClass 
  3033.       GetPriorityClipboardFormat 
  3034.       GetPrivateProfileInt 
  3035.       GetPrivateProfileString 
  3036.       GetProcAddress 
  3037.       GetProfileInt 
  3038.       GetProfileString 
  3039.       GetProp 
  3040.       GetQueueStatus 
  3041.       GetRasterizerCaps 
  3042.       GetRegionData 
  3043.       GetRgnBox 
  3044.       GetROP2 
  3045.       GetRValue 
  3046.       GetSaveFileName 
  3047.       GetScrollPos 
  3048.       GetScrollRange 
  3049.       GetStdHandle 
  3050.       GetStockObject 
  3051.       GetStretchBltMode 
  3052.       GetStringTypeEx 
  3053.       GetSubMenu 
  3054.       GetSysColor 
  3055.       GetSystemDirectory 
  3056.       GetSystemMenu 
  3057.       GetSystemMetrics 
  3058.       GetSystemPaletteEntries 
  3059.       GetSystemTime 
  3060.       GetTabbedTextExtent 
  3061.       GetTempFileName 
  3062.       GetTempPath 
  3063.       GetTextAlign 
  3064.       GetTextCharacterExtra 
  3065.       GetTextColor 
  3066.       GetTextExtentPoint 
  3067.       GetTextExtentExPoint 
  3068.       GetTextFace 
  3069.       GetTextMetrics 
  3070.       GetThreadLocale 
  3071.       GetThreadPriority 
  3072.       GetTickCount 
  3073.       GetTimeZoneInformation 
  3074.       GetTopWindow 
  3075.       GetUpdateRect 
  3076.       GetUpdateRgn 
  3077.       GetUserDefaultLangID 
  3078.       GetUserDefaultLCID 
  3079.       GetVersion 
  3080.       GetVersionEx 
  3081.       GetViewportExtEx 
  3082.       GetViewportOrgEx 
  3083.       GetVolumeInformation 
  3084.       GetWindow 
  3085.       GetWindowDC 
  3086.       GetWindowExtEx 
  3087.       GetWindowLong 
  3088.       GetWindowOrgEx 
  3089.       GetWindowPlacement 
  3090.       GetWindowRect 
  3091.       GetWindowsDirectory 
  3092.       GetWindowText 
  3093.       GetWindowTextLength 
  3094.       GetWindowThreadProcessId 
  3095.       GetWindowWord 
  3096.       GetWinMetaFileBits 
  3097.       GetWorldTransform 
  3098.       GlobalAddAtom 
  3099.       GlobalAlloc 
  3100.       GlobalDeleteAtom 
  3101.       GlobalDiscard 
  3102.       GlobalFindAtom 
  3103.       GlobalFlags 
  3104.       GlobalFree 
  3105.       GlobalGetAtomName 
  3106.       GlobalHandle 
  3107.       GlobalLock 
  3108.       GlobalMemoryStatus 
  3109.       GlobalReAlloc 
  3110.       GlobalSize 
  3111.       GlobalUnlock 
  3112.  
  3113.       HeapAlloc 
  3114.       HeapCreate 
  3115.       HeapDestroy 
  3116.       HeapFree 
  3117.       HeapReAlloc 
  3118.       HeapSize 
  3119.       HideCaret 
  3120.       HiliteMenuItem 
  3121.  
  3122.       InflateRect 
  3123.       InitAtomTable 
  3124.       InitializeCriticalSection 
  3125.       InSendMessage 
  3126.       InsertMenu 
  3127.       InterlockedDecrement 
  3128.       InterlockedExchange 
  3129.       InterlockedIncrement 
  3130.       IntersectClipRect 
  3131.       IntersectRect 
  3132.       InvalidateRect 
  3133.       InvalidateRgn 
  3134.       InvertRect 
  3135.       InvertRgn 
  3136.       IsBadCodePtr 
  3137.       IsBadHugeReadPtr 
  3138.       IsBadHugeWritePtr 
  3139.       IsBadReadPtr 
  3140.       IsBadStringPtr 
  3141.       IsBadWritePtr 
  3142.       IsCharAlpha 
  3143.       IsCharAlphaNumeric 
  3144.       IsCharLower 
  3145.       IsCharUpper 
  3146.       IsChild 
  3147.       IsClipboardFormatAvailable 
  3148.       IsDBCSLeadByte 
  3149.       IsDialogMessage 
  3150.       IsDlgButtonChecked 
  3151.       IsIconic 
  3152.       IsMenu 
  3153.       IsRectEmpty 
  3154.       IsValidLocale 
  3155.       IsWindow 
  3156.       IsWindowEnabled 
  3157.       IsWindowVisible 
  3158.       IsZoomed 
  3159.  
  3160.       KillTimer 
  3161.  
  3162.       LeaveCriticalSection 
  3163.       LineDDA 
  3164.       LineTo 
  3165.       LoadAccelerators 
  3166.       LoadBitmap 
  3167.       LoadCursor 
  3168.       LoadIcon 
  3169.       LoadLibrary 
  3170.       LoadMenu 
  3171.       LoadMenuIndirect 
  3172.       LoadModule 
  3173.       LoadResource 
  3174.       LoadString 
  3175.       LocalAlloc 
  3176.       LocalDiscard 
  3177.       LocalFileTimeToFileTime 
  3178.       LocalFlags 
  3179.       LocalFree 
  3180.       LocalHandle 
  3181.       LocalLock 
  3182.       LocalReAlloc 
  3183.       LocalSize 
  3184.       LocalUnlock 
  3185.       LockFile 
  3186.       LockResource 
  3187.       LockWindowUpdate 
  3188.       LPtoDP 
  3189.       lstrcat 
  3190.       lstrcmpW 
  3191.       lstrcpy 
  3192.       lstrlen 
  3193.  
  3194.       MakeProcInstance 
  3195.       MapDialogRect 
  3196.       MapWindowPoints 
  3197.       MaskBlt 
  3198.       MessageBeep 
  3199.       MessageBox 
  3200.       ModifyMenu 
  3201.       ModifyWorldTransform 
  3202.       MoveFile 
  3203.       MoveToEx 
  3204.       MoveWindow 
  3205.       MsgWaitForMultipleObjects 
  3206.       MulDiv 
  3207.       MultiByteToWideChar 
  3208.  
  3209.       OemToChar 
  3210.       OemToCharBuff 
  3211.       OffsetClipRgn 
  3212.       OffsetRect 
  3213.       OffsetRgn 
  3214.       OffsetViewportOrgEx 
  3215.       OffsetWindowOrgEx 
  3216.       OpenClipboard 
  3217.       OpenEvent 
  3218.       OpenFile 
  3219.       OpenMutex 
  3220.       OpenProcess 
  3221.       OpenSemaphore 
  3222.       OutputDebugString 
  3223.  
  3224.       PackDDElParam 
  3225.       PaintRgn 
  3226.       PatBlt 
  3227.       PathToRegion 
  3228.       PeekMessage 
  3229.       Pie 
  3230.       PlayEnhMetaFile 
  3231.       PlayEnhMetaFileRecord 
  3232.       PlayMetaFile 
  3233.       PlayMetaFileRecord 
  3234.       PolyBezier 
  3235.       PolyBezierTo 
  3236.       PolyDraw 
  3237.       Polygon 
  3238.       Polyline 
  3239.       PolylineTo 
  3240.       PolyPolygon 
  3241.       PolyPolyline 
  3242.       PostMessage 
  3243.       PostQuitMessage 
  3244.       PostThreadMessage 
  3245.       PrintDlg 
  3246.       PtInRect 
  3247.       PtInRegion 
  3248.       PtVisible 
  3249.       PulseEvent 
  3250.  
  3251.       ReadFile 
  3252.       RealizePalette 
  3253.       Rectangle 
  3254.       RectInRegion 
  3255.       RectVisible 
  3256.       RedrawWindow 
  3257.       Registry functions (see Registry and Registry Functions): 
  3258.            RegCloseKey 
  3259.            RegCreateKey 
  3260.            RegCreateKeyEx 
  3261.            RegDeleteKey 
  3262.            RegDeleteValue 
  3263.            RegEnumKey 
  3264.            RegEnumKeyEx 
  3265.            RegEnumValue 
  3266.            RegisterClass 
  3267.            RegisterClipboardFormat 
  3268.            RegisterWindowMessage 
  3269.            RegOpenKey 
  3270.            RegOpenKeyEx 
  3271.            RegQueryInfoKey 
  3272.            RegQueryValue 
  3273.            RegQueryValueEx 
  3274.            RegSetValue 
  3275.            RegSetValueEx 
  3276.       ReleaseCapture 
  3277.       ReleaseDC 
  3278.       ReleaseMutex 
  3279.       ReleaseSemaphore 
  3280.       RemoveDirectory 
  3281.       RemoveFontResource 
  3282.       RemoveMenu 
  3283.       RemoveProp 
  3284.       ReplaceText 
  3285.       ReplyMessage 
  3286.       ResetDC 
  3287.       ResetEvent 
  3288.       ResizePalette 
  3289.       RestoreDC 
  3290.       ResumeThread 
  3291.       ReuseDDElParam 
  3292.       RoundRect 
  3293.  
  3294.       SaveDC 
  3295.       ScaleViewportExtEx 
  3296.       ScaleWindowExtEx 
  3297.       ScreenToClient 
  3298.       ScrollDC 
  3299.       ScrollWindow 
  3300.       ScrollWindowEx 
  3301.       SearchPath 
  3302.       SelectClipRgn 
  3303.       SelectObject 
  3304.       SelectPalette 
  3305.       SendDlgItemMessage 
  3306.       SendMessage 
  3307.       SetAbortProc 
  3308.       SetActiveWindow 
  3309.       SetArcDirection 
  3310.       SetBitmapBits 
  3311.       SetBitmapDimensionEx 
  3312.       SetBkColor 
  3313.       SetBkMode 
  3314.       SetBoundsRect 
  3315.       SetBrushOrgEx 
  3316.       SetCapture 
  3317.       SetCaretBlinkTime 
  3318.       SetCaretPos 
  3319.       SetClassLong 
  3320.       SetClassWord 
  3321.       SetClipboardData 
  3322.       SetClipboardViewer 
  3323.       SetCurrentDirectory 
  3324.       SetCursor 
  3325.       SetCursorPos 
  3326.       SetDIBits 
  3327.       SetDIBitsToDevice 
  3328.       SetDlgItemInt 
  3329.       SetDlgItemText 
  3330.       SetDoubleClickTime 
  3331.       SetEndOfFile 
  3332.       SetEnhMetaFileBits 
  3333.       SetEnvironmentVariable 
  3334.       SetEvent 
  3335.       SetFileAttributes 
  3336.       SetFilePointer 
  3337.       SetFileTime 
  3338.       SetFocus 
  3339.       SetForegroundWindow 
  3340.       SetGraphicsMode 
  3341.       SetHandleCount 
  3342.       SetKeyboardState 
  3343.       SetLastError 
  3344.       SetLocaleInfo 
  3345.       SetLocalTime 
  3346.       SetMapMode 
  3347.       SetMapperFlags 
  3348.       SetMenu 
  3349.       SetMenuContextHelpID 
  3350.       SetMenuItemBitmaps 
  3351.       SetMetaFileBitsEx 
  3352.       SetMiterLimit 
  3353.       SetPaletteEntries 
  3354.       SetParent 
  3355.       SetPixel 
  3356.       SetPolyFillMode 
  3357.       SetPriorityClass 
  3358.       SetProp 
  3359.       SetRect 
  3360.       SetRectEmpty 
  3361.       SetRectRgn 
  3362.       SetROP2 
  3363.       SetScrollPos 
  3364.       SetScrollRange 
  3365.       SetStdHandle 
  3366.       SetStretchBltMode 
  3367.       SetSysColors 
  3368.       SetSystemTime 
  3369.       SetTextAlign 
  3370.       SetTextCharacterExtra 
  3371.       SetTextColor 
  3372.       SetTextJustification 
  3373.       SetThreadPriority 
  3374.       SetTimer 
  3375.       SetTimeZoneInformation 
  3376.       SetViewportExtEx 
  3377.       SetViewportOrgEx 
  3378.       SetVolumeLabel 
  3379.       SetWindowExtEx 
  3380.       SetWindowLong 
  3381.       SetWindowOrgEx 
  3382.       SetWindowPlacement 
  3383.       SetWindowPos 
  3384.       SetWindowsHookEx 
  3385.       SetWindowText 
  3386.       SetWindowWord 
  3387.       SetWinMetaFileBits 
  3388.       SetWorldTransform 
  3389.       ShellExecute 
  3390.       ShowCaret 
  3391.       ShowCursor 
  3392.       ShowOwnedPopups 
  3393.       ShowScrollBar 
  3394.       ShowWindow 
  3395.       SizeofResource 
  3396.       Sleep 
  3397.       StartDoc 
  3398.       StartPage 
  3399.       StretchBlt 
  3400.       StretchDIBits 
  3401.       StrokeAndFillPath 
  3402.       StrokePath 
  3403.       SubtractRect 
  3404.       SuspendThread 
  3405.       SwapMouseButton 
  3406.       SystemParametersInfo 
  3407.       SystemTimeToFileTime 
  3408.       SystemTimeToTzSpecificLocalTime 
  3409.  
  3410.       TabbedTextOut 
  3411.       TerminateProcess 
  3412.       TerminateThread 
  3413.       TextOut 
  3414.       timeGetSystemTime 
  3415.       timeGetTime 
  3416.       TlsAlloc 
  3417.       TlsFree 
  3418.       TlsGetValue 
  3419.       TlsSetValue 
  3420.       TrackPopUpMenu 
  3421.       TranslateAccelerator 
  3422.       TranslateMDISysAccel 
  3423.       TranslateMessage 
  3424.  
  3425.       UnhookWindowsHookEx 
  3426.       UnionRect 
  3427.       UnlockFile 
  3428.       UnpackDDElParam 
  3429.       UnrealizeObject 
  3430.       UnregisterClass 
  3431.       UpdateWindow 
  3432.  
  3433.       ValidateRect 
  3434.       ValidateRgn 
  3435.       VkKeyScan 
  3436.  
  3437.       WaitForInputIdle 
  3438.       WaitForMultipleObjects 
  3439.       WaitForSingleObject 
  3440.       WaitMessage 
  3441.       WideCharToMultiByte 
  3442.       WidenPath 
  3443.       WindowFromDC 
  3444.       WindowFromPoint 
  3445.       WinExec 
  3446.       WinHelp 
  3447.       WinMain 
  3448.       WriteFile 
  3449.       WritePrivateProfileString 
  3450.       WriteProfileString 
  3451.       wsprintf 
  3452.       wvsprintf 
  3453.  
  3454.       Yield 
  3455.  
  3456.       ZeroMemory 
  3457.  
  3458.  
  3459. ΓòÉΓòÉΓòÉ 10.1. Open32-Unique Functions ΓòÉΓòÉΓòÉ
  3460.  
  3461. The functions HPSToHDC and DeleteHDCObjects are unique to Open32 and do not 
  3462. have a Windows counterpart function.  Descriptions of each of these functions 
  3463. follow. 
  3464.  
  3465.  
  3466. ΓòÉΓòÉΓòÉ 10.1.1. HPSToHDC ΓòÉΓòÉΓòÉ
  3467.  
  3468. This function will set up the HPS for Open32 application use and return a 
  3469. Windows HDC handle.  The Open32 application can then use this handle to perform 
  3470. drawing operations.  The applications should call DeleteHDCObjects when 
  3471. finished using the handle. 
  3472.  
  3473. Syntax: 
  3474.  
  3475.      HPSToHDC (HWND, HPS, PSZ, LPRECT)
  3476.  
  3477. Parameters: 
  3478.  
  3479.  HWND                The handle of the window associated with the HPS. 
  3480.  
  3481.  HPS                 The HPS to be converted to a Windows HDC. 
  3482.  
  3483.  PSZ                 The string containing the device name of the printer 
  3484.                      associated with the HPS or NULL for a non-printer HPS. 
  3485.  
  3486.  LPRECT              Rectangle that contains the coordinates for the drawing 
  3487.                      area. 
  3488.  
  3489.  
  3490. ΓòÉΓòÉΓòÉ 10.1.2. DeleteHDCObjects ΓòÉΓòÉΓòÉ
  3491.  
  3492. This function deletes Open32 objects that were created when this HDC was 
  3493. converted for Open32 use. 
  3494.  
  3495. Syntax: 
  3496.  
  3497. void DeleteHDCObjects (HDC)
  3498.  
  3499. Parameters: 
  3500.  
  3501.  HDC                 The HDC to be deleted. 
  3502.  
  3503.  
  3504. ΓòÉΓòÉΓòÉ 11. Notices ΓòÉΓòÉΓòÉ
  3505.  
  3506. November 1997 
  3507.  
  3508. The following paragraph does not apply to the United Kingdom or any country 
  3509. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  3510. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  3511. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  3512. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  3513. do not allow disclaimer of express or implied warranties in certain 
  3514. transactions, therefore, this statement may not apply to you. 
  3515.  
  3516. This publication could include technical inaccuracies or typographical errors. 
  3517. Changes are periodically made to the information herein; these changes will be 
  3518. incorporated in new editions of the publication. IBM may make improvements 
  3519. and/or changes in the product(s) and/or the program(s) described in this 
  3520. publication at any time. 
  3521.  
  3522. It is possible that this publication may contain reference to, or information 
  3523. about, IBM products (machines and programs), programming, or services that are 
  3524. not announced in your country.  Such references or information must not be 
  3525. construed to mean that IBM intends to announce such IBM products, programming, 
  3526. or services in your country. 
  3527.  
  3528. Requests for technical information about IBM products should be made to your 
  3529. IBM reseller or IBM marketing representative. 
  3530.  
  3531.  
  3532. ΓòÉΓòÉΓòÉ 11.1. Copyright Notices ΓòÉΓòÉΓòÉ
  3533.  
  3534. (C) Copyright International Business Machines Corporation 1997. All rights 
  3535. reserved. 
  3536. Note to U.S. Government Users - Documentation related to restricted rights - 
  3537. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  3538. Schedule Contract with IBM Corp. 
  3539.  
  3540.  
  3541. ΓòÉΓòÉΓòÉ 11.2. Disclaimers ΓòÉΓòÉΓòÉ
  3542.  
  3543. References in this publication to IBM products, programs, or services do not 
  3544. imply that IBM intends to make these available in all countries in which IBM 
  3545. operates. Any reference to an IBM product, program, or service is not intended 
  3546. to state or imply that only that IBM product, program, or service may be used. 
  3547. Subject to IBM's valid intellectual property or other legally protectable 
  3548. rights, any functionally equivalent product, program, or service may be used 
  3549. instead of the IBM product, program, or service. The evaluation and 
  3550. verification of operation in conjunction with other products, except those 
  3551. expressly designated by IBM, are the responsibility of the user. 
  3552.  
  3553. IBM may have patents or pending patent applications covering subject matter in 
  3554. this document. The furnishing of this document does not give you any license to 
  3555. these patents. You can send license inquiries, in writing, to: 
  3556.  
  3557.       IBM Director of Licensing 
  3558.       IBM Corporation 
  3559.       500 Columbus Avenue 
  3560.       Thornwood, NY  10594 
  3561.       U.S.A. 
  3562.  
  3563.  Asia-Pacific users can inquire, in writing, to the IBM Director of 
  3564.  Intellectual Property and Licensing, IBM World Trade Asia Corporation, 2-31 
  3565.  Roppongi 3-chome, Minato-ku, Tokyo 106, Japan. 
  3566.  
  3567.  Licensees of this program who wish to have information about it for the 
  3568.  purpose of enabling: (i) the exchange of information between independently 
  3569.  created programs and other programs (including this one) and (ii) the mutual 
  3570.  use of the information which has been exchanged, should contact IBM 
  3571.  Corporation, Department LZKS, 11400 Burnet Road, Austin, TX 78758 U.S.A.  Such 
  3572.  information may be available, subject to appropriate terms and conditions, 
  3573.  including in some cases, payment of a fee. 
  3574.  
  3575.  
  3576. ΓòÉΓòÉΓòÉ 11.3. Trademarks ΓòÉΓòÉΓòÉ
  3577.  
  3578. The following terms are trademarks of the IBM Corporation in the United States 
  3579. or other countries or both: 
  3580.  
  3581.       DB2 
  3582.       IBM 
  3583.       OS/2 
  3584.       Presentation Manager (PM) 
  3585.       VisualAge 
  3586.  
  3587.  The following terms are trademarks of other companies: 
  3588.  
  3589.  OpenDoc             Apple Computer, Inc. 
  3590.  
  3591.  SMART               One Up Corporation 
  3592.  
  3593.  Solaris             Sun Microsystems, Inc. 
  3594.  
  3595.  PC Direct is a trademark of Ziff Communications Company and is used by IBM 
  3596.  Corporation under license. 
  3597.  
  3598.  UNIX is a registered trademark in the United States and other countries 
  3599.  licensed exclusively through X/Open Company Limited. 
  3600.  
  3601.  C-bus is a trademark of Corollary, Inc. 
  3602.  
  3603.  Microsoft, Windows, and the Windows 95 logo are trademarks or registered 
  3604.  trademarks of Microsoft Corporation.