
                  COMMON CONTROLS
              their development status
    and their UNDOCUMENTED features and functions
-----------------------------------------------------


1. Introduction
---------------
  The information provided herein is based on the dll version 4.72 which
  is included in MS Internet Explorer 4.01.

  All information about common controls should be collected in this document.

  All Wine programmers are encouraged to add their knowledge to this document.


2. General Information
----------------------
  Further information about common controls can be found in the MS Platform SDK
  and the MS Internet Client SDK (most recent). Information from these SDK's
  will NOT be repeated here. Only information which can NOT be found in these
  SDK's will be collected here. Some information in the SDK's mentioned above
  is (intentionally???) WRONG. Corrections to wrong information will be
  collected here too.


2.1 Structure sizes of different common control versions
--------------------------------------------------------
  The common controls have been continously improved in the past. Some of the
  orignal structures had to be extended and their size changed. Most of the
  common control structures include their size as the first parameter. If
  a control gets the wrong size in a message or function a failure is very
  likely to occur. To avoid this, MS defined new constants that reflect the
  structure size of older COMCTL32.DLL versions. The following list shows the
  structure size constants that are currently defined in the original
  COMCTL32.DLL.
  NOTE: Some stuctures are NOT defined in wine's COMCTL32 yet.

    HDITEM_V1_SIZE:
      The size of the HDITEM structure in version 4.00.

    LVCOLUMN_V1_SIZE:
      The size of the LVCOLUMN structure in version 4.00.

    LVHITTESTINFO_V1_SIZE:
      The size of the LVHITTESTINFO structure in version 4.00.

    LVITEM_V1_SIZE:
      The size of the LVITEM structure in version 4.00.

    NMLVCUSTOMDRAW_V3_SIZE:
      The size of the NMLVCUSTOMDRAW structure in version 4.70.

    NMTTDISPINFO_V1_SIZE:
      The size of the NMTTDISPINFO structure in version 4.00.

    NMTVCUSTOMDRAW_V3_SIZE:
      The size of the NMTVCUSTOMDRAW structure in version 4.70.

    PROPSHEETHEADER_V1_SIZE:
      The size of the PROPSHEETHEADER structure in version 4.00.

    PROPSHEETPAGE_V1_SIZE:
      The size of the PROPSHEETPAGE structure in version 4.00.

    REBARBANDINFO_V3_SIZE:
      The size of the REBARBANDINFO structure in version 4.70.

    TTTOOLINFO_V1_SIZE:
      The size of the TOOLINFO structure in version 4.00.

    TVINSERTSTRUCT_V1_SIZE:
      The size of the TVINSERTSTRUCT structure in version 4.00.


3. Controls
-----------
  This paragraph describes the development status of the common controls.


3.1 Animation Control
---------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.2 Combo Box Ex Control
------------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.3 Date and Time Picker Control
--------------------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.4 Drag List Box Control
-------------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.5 Flat Scroll Bar Control
---------------------------
  Author:
      Dummy written by Alex Priem. <alexp@sci.kun.nl>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.6 Header Control
------------------
  Author:
      Eric Kohl <ekohl@abo.rhein-zeitung.de>

  Status:
      Almost finished.
      Unicode notifications are not supported (WM_NOTIFYFORMAT).
      Order array not supported.


3.7 Hot Key Control
-------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.8 Image List (no control)
---------------------------
  Author:
      Eric Kohl <ekohl@abo.rhein-zeitung.de>

  Status:
      Almost finished.


3.9 IP Address Control
----------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>
      Alex Priem <alexp@sci.kun.nl>

  Status:
      Under construction.


3.10 List View Control
----------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>
      Luc Tourangeau <luc@macadamian.com>
      Koen Deforche <jozef@kotnet.org>
      Francis Beaudet <francis@macadamian.com> and the "Corel-Team"

  Status:
      Under construction.

  Notes:
      Basic data structure with related messages are supported.
      No painting supported yet.


3.11 Month Calendar Control
---------------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.12 Native font control
------------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.13 Pager Control
------------------
  Author:
      Dummy written by Eric Kohl. <ekohl@abo.rhein-zeitung.de>

  Status:
      Under construction.
      Many missing features.

  Notes:
      Author needed!! Any volunteers??


3.14 Progress Bar Control
-------------------------
  Author:
      Original implementation by Dimitrie O. Paun.
      Fixes and improvements by Eric Kohl.

  Status:
      Finished!


3.15 Property Sheet
-------------------
  Author:
      Anders Carlsson <anders.carlsson@linux.nu>
      Francis Beaudet <francis@macadamian.com>

  Status:
      Development in progress.

  Notes:
      Tab control must be implemented first.


3.16 Rebar Control (Cool Bar)
-----------------------------
  Author:
      Eric Kohl <ekohl@abo.rhein-zeitung.de>

  Status:
      Development in progress.
      Many bugs and missing features.

  Notes:
      Author needed!! Any volunteers??


3.17 Status Bar Control
-----------------------
  Author:
      Original implementation by Bruce Milner.
      Fixes and improvements by Eric Kohl.

  Status:
      Almost finished.

  Notes:
      Tooltip integration is almost complete.


3.18 Tab Control
----------------
  Author:
      Anders Carlsson <anders.carlsson@linux.nu>

  Status:
      Development in progress.


3.19 Toolbar Control
--------------------
  Author:
      Eric Kohl <ekohl@abo.rhein-zeitung.de>

  Status:
      Development in progress.
      Basic functionality is almost done. (dll version 4.0)



3.20 Tooltip Control
--------------------
  Author:
      Eric Kohl <ekohl@abo.rhein-zeitung.de>

  Status:
      Almost finished.

  Notes:
      Unicode support is incomplete (WM_NOTIFYFORMAT).


3.21 Trackbar Control
---------------------
  Author:
      Dummy written by Eric Kohl <ekohl@abo.rhein-zeitung.de>
      Alex Priem <alexp@sci.kun.nl>

  Status:
      Under construction.


3.22 Tree View Control
----------------------
  Author:
      Dummy written by Eric Kohl.
      Alex Priem <alexp@sci.kun.nl>

  Status:
      Under construction.


3.23 Updown Control
-------------------
  Author:
      Original implementation by Dimitrie O. Paun.
      Some minor changes by Eric Kohl <ekohl@abo.rhein-zeitung.de>.

  Status:
      Unknown.

  Notes:
      Have a look at controls/updown.c for a list of bugs and missing
      features.

      The status is unknown, because I did not have a close look at this
      control. One test-program looked quite good, but in Win95's
      cdplayer.exe the control does not show at all.
      
      Any volunteers??


4. Additional Information
-------------------------

  Has to be written...


5. Undocumented features
------------------------

  There are quite a lot of undocumented functions like:
     - DSA (Dynamic Storage Array) functions.
     - DPA (Dynamic Pointer Array) functions.
     - MRU ("Most Recently Used" List) functions.
     - other unknown functions.

  Have a look at relay32/comctl32.spec.


5.1 Dymnamic Storage Array (DSA)
---------------------------------
  The DSA functions are used to store and manage dynamic arrays of fixed size
  memory blocks. They are used by TASKMAN.EXE, Explorer, IE4 and other
  Programs and DLL's that are "parts of the Windows Operating System".
  The implementation should be complete.

  Have a look at the source code to get more information.


5.2 Dynamic Pointer Array (DPA)
------------------------------------
  Similar to the DSA functions, but they just store pointers. They are used by
  Explorer, IE4 and other Programs and DLL's that are "parts of the Windows
  Operating System". The implementation should be complete.

  Have a look at the source code to get more information.


5.3 "Most Recently Used" - List (MRU)
-------------------------------------
  Only stubs are implemented to keep Explorer from bailing out.

  No more information available at this time!


5.4 MenuHelp
------------
  Has to be written...


5.5 GetEffectiveClientRect
--------------------------
  Has to be written...


5.6 ShowHideMenuCtl
-------------------
  The official documentation provided by MS is incomplete.

  lpInfo:
  ...
  Both values of the first pair must be the handle to the applications main
  menu.
  ...


5.7 Other undocumented functions
--------------------------------
  Several other undocumented functions are used by IE4.

  String functions:
  (will be written...)


6. Epilogue
-----------
  You see, much work has still to be done. If you are interested in writing
  a control send me an e-mail. If you like to fix bugs or add some
  functionality send an e-mail to the author of the control.


Eric Kohl <ekohl@abo.rhein-zeitung.de>

