
                  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.


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

  


3.1 Animation Control
---------------------
  Status:
      - Nothing done at all.


3.2 Combo Box Ex Control
------------------------
  Status:
      - Nothing done at all.


3.3 Date and Time Picker Control
--------------------------------
  Status:
      - Nothing done at all.


3.4 Drag List Box Control
-------------------------
  Status:
      - Nothing done at all.


3.5 Flat Scroll Bar Control
---------------------------
  Status:
      - Nothing done at all.


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

  Status:
      - Almost finished.


3.7 Hot Key Control
-------------------
  Status:
      - Nothing done at all.


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

  Status:
      - Almost finished.

  Notes:
      Most of my test programs work as expected. But when image lists are used
      in other controls (e.g. Toolbar) they don't seem to be error-free.
      It looks like I have to do a major re-write (use DIB's instead of DDB's).


3.9 IP Address Control
----------------------
  Status:
      - Nothing done at all.


3.10 List View Control
----------------------
  Author:
      James Michael Mastros <root@jennifer-unix.dyn.ml.org>

  Status:
      - Development in progress.


3.11 Month Calendar Control
---------------------------
  Status:
      - Nothing done at all.


3.12 Pager Control
------------------
  Author:
      Dummy written by Eric Kohl.

  Status:
      Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


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

  Status:
      - Almost finished (should behave like the original).

  Notes:
      WM_GETFONT and WM_SETFONT are not implemented yet. They seem to be
      useless because progress bars usually don't display any textual
      information. But if M$ implemented an undocumented flag to display
      textual information (e.g. percentage) these messages would make sense.


3.14 Property Sheet
-------------------
  Author:
      Anders Carlsson <anders.carlsson@linux.nu>

  Status:
      - Development in progress.
      - Not yet published.

  Notes:
      Tab control must be implemented first.


3.15 Rebar Control (Cool Bar)
-----------------------------
  Author:
      Dummy written by Eric Kohl.

  Status:
      - Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


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

  Status:
      - Almost finished.

  Notes:
      - Tool tips need to be added, but since they are not done yet...

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


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

  Status:
      - Development in progress.
      - Not yet published.


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

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

  Notes
      Bitmaps are not correctly displayed.


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

  Status:
      - Development in progress. Almost done.

  Notes
      The control does not behave very well. This will be fixed


3.20 Trackbar Control
---------------------
  Author:
      Dummy written by Eric Kohl.

  Status:
      - Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.21 Tree View Control
----------------------
  Author:
      Dummy written by Eric Kohl.

  Status:
      - Dummy control. No functionality.

  Notes:
      Author needed!! Any volunteers??


3.22 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 (Dynnamic String Array?) functions.
     - DPA (Dymnamic Pointer Array?) functions.
     - MRU ("Most Recently Used" List) functions.
     - other unknown functions.

  Have a look at relay32/comctl32.spec.


5.1 Dymnamic String Arrays ??? (DSA)
------------------------------------
  Most of the DSA functions are implemented. I used TASKMAN.EXE to write them.
  Since TASKMAN.EXE doesn't bail out or crash I think I've done it right.

  Have a look at the source code to get more information.
  Further documentation will be written...


5.2 Dynamic Pointer Arrays ??? (DPA)
------------------------------------
  Similar to the DSA functions, but they just store pointers. I have written
  some stubs and semi-stubs. They are used by Explorer and IE4 but the 
  implementation is still incomplete since both programs seem to crash because
  of other incomplete functions.

  Have a look at the source code to get more information.
  Further documentation will be written...


5.3 MenuHelp
------------
  Has to be written...


5.4 GetEffectiveClientRect
--------------------------
  Has to 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>

