
                  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:
      Dummy written by Eric Kohl.

  Status:
      - Dummy control. No functionality.

  Notes:
      This control is NEEDED in many places. Any volunteers??


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.

  Notes
      The control does not show.


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
----------------------
  Status:
      - Nothing done at all.
      - needed.


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>

