control.h
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:161k
源码类别:

GPS编程

开发平台:

C/C++

  1. /**
  2.  * file control.h
  3.  * author Wei Yongming <ymwei@minigui.org>
  4.  * date 2001/12/29
  5.  * 
  6.  * This file includes interfaces of standard controls of MiniGUI.
  7.  *
  8.  verbatim
  9.     Copyright (C) 1998-2002 Wei Yongming.
  10.     Copyright (C) 2002-2004 Feynman Software.
  11.     This file is part of MiniGUI, a compact cross-platform Graphics 
  12.     User Interface (GUI) support system for real-time embedded systems.
  13.     This program is free software; you can redistribute it and/or modify
  14.     it under the terms of the GNU General Public License as published by
  15.     the Free Software Foundation; either version 2 of the License, or
  16.     (at your option) any later version.
  17.     This program is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU General Public License for more details.
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  endverbatim
  25.  */
  26. /*
  27.  * $Id: control.h,v 1.165 2004/10/20 02:06:00 weiym Exp $
  28.  *
  29.  *             MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks version 1.6.x
  30.  *             Copyright (C) 1999-2002 Wei Yongming.
  31.  *             Copyright (C) 2002-2004 Feynman Software.
  32.  */
  33. #ifndef _MGUI_CONTROL_H
  34.   #define _MGUI_CONTROL_H
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif  /* __cplusplus */
  39. /************************** Common definitions *******************************/
  40. /************************** Control Helpers **********************************/
  41.     /**
  42.      * addtogroup fns Functions
  43.      * @{
  44.      */
  45.     /**
  46.      * addtogroup global_fns Global/general functions
  47.      * @{
  48.      */
  49.     /**
  50.      * addtogroup misc_fns Miscellaneous functions
  51.      * @{
  52.      */
  53. int EditOnEraseBackground (HWND hWnd, HDC hdc, const RECT* pClipRect);
  54. /**
  55.  * fn void GUIAPI DrawBoxFromBitmap (HDC hdc, const RECT* box, const BITMAP* bmp, BOOL h_v, BOOL do_clip)
  56.  * brief Draws a box from bitmap.
  57.  *
  58.  * param hdc The handle to drawing context.
  59.  * param box The rectangle of the box.
  60.  * param bmp The pointer to the BITMAP object.
  61.  * param h_v Draw the box along horizental or vertical.
  62.  * param do_clip Does clip the drawing in the box?
  63.  */
  64. void GUIAPI DrawBoxFromBitmap (HDC hdc, const RECT* box, const BITMAP* bmp, BOOL h_v, BOOL do_clip);
  65. #define DF_3DBOX_NORMAL     0x0000
  66. #define DF_3DBOX_PRESSED    0x0001
  67. #define DF_3DBOX_STATEMASK  0x000F
  68. #define DF_3DBOX_NOTFILL    0x0000
  69. #define DF_3DBOX_FILL       0x0010
  70. /**
  71.  * fn void GUIAPI Draw3DControlFrameEx (HDC hdc, HWND hwnd, int x0, int y0, int x1, int y1, DWORD flags, gal_pixel fillc)
  72.  * brief Draws a 3D style frame control.           
  73.  *
  74.  * param hdc The handle to drawing context.
  75.  * param hwnd Tell the function to draw with the color definitions of this window.
  76.  * param x0  Specify the x-coordinate of the upper-left corner.
  77.  * param y0  Specify the y-coordinate of the upper-left corner.
  78.  * param x1  Specify the x-coordinate of the lower-right corner.  
  79.  * param y1  Specify the y-coordinate of the lower-right corner.
  80.  * param flags Specify the drawing flag, can be or'ed with the following flags:
  81.  *              - DF_3DBOX_NORMALn The box is displayed with normal status.
  82.  *              - DF_3DBOX_PRESSEDn The box is pressed.
  83.  *              - DF_3DBOX_NOTFILLn Do not fill the box.
  84.  *              - DF_3DBOX_FILLn Fill the box and the a fillc defined the color.
  85.  * param fillc Specify the pixel value to fill the box when DF_3DBOX_FILL specified.
  86.  *
  87.  * sa DrawFlatControlFrameEx
  88.  */
  89. void GUIAPI Draw3DControlFrameEx (HDC hdc, HWND hwnd, int x0, int y0, int x1, int y1, 
  90.             DWORD flags, gal_pixel fillc);
  91. /* back compatibility definitions */
  92. #define Draw3DControlFrame(hdc, l, t, r, b, fillc, updown) 
  93.             Draw3DControlFrameEx(hdc, HWND_DESKTOP, l, t, r, b, 
  94.             (updown?DF_3DBOX_NORMAL:DF_3DBOX_PRESSED) | ((fillc)?DF_3DBOX_FILL:0), fillc)
  95. /**
  96.  * fn void GUIAPI DrawFlatControlFrameEx(HDC hdc, HWND hwnd, int x0, int y0, int x1, int y1, int corner, DWORD flags, gal_pixel fillc)
  97.  * brief Draws a flat frame control with triangle corner.
  98.  *
  99.  * param hdc The handle to drawing context.
  100.  * param hwnd Tell the function to draw with the color definitions of this window.
  101.  * param x0  Specifies the x-coordinate of the upper-left corner.
  102.  * param y0  Specifies the y-coordinate of the upper-left corner.
  103.  * param x1  Specifies the x-coordinate of the lower-right corner.
  104.  * param y1  Specifies the y-coordinate of the lower-right corner.
  105.  * param corner Specifies the length of the edge of the triangle corner.
  106.  * param flags Specify the drawing flag, can be or'ed with the following flags:
  107.  *              - DF_3DBOX_NORMALn The box is displayed with normal status.
  108.  *              - DF_3DBOX_PRESSEDn The box is pressed.
  109.  *              - DF_3DBOX_NOTFILLn Do not fill the box.
  110.  *              - DF_3DBOX_FILLn Fill the box and the a fillc defined the color.
  111.  * param fillc Specify the pixel value to fill the box when DF_3DBOX_FILL specified.
  112.  *
  113.  * sa Draw3DControlFrameEx
  114.  */
  115. void GUIAPI DrawFlatControlFrameEx (HDC hdc, HWND hwnd, int x0, int y0, int x1, int y1, 
  116.             int corner, DWORD flags, gal_pixel fillc);
  117. #define DrawFlatControlFrame(hdc, x0, y0, x1, y1, fillc, updown) 
  118.             DrawFlatControlFrameEx(hdc, HWND_DESKTOP, x0, y0, x1, y1, 3, 
  119.             (updown?DF_3DBOX_NORMAL:DF_3DBOX_PRESSED) | ((fillc)?DF_3DBOX_FILL:0), fillc)
  120. /**
  121.  * fn void GUIAPI Draw3DThickFrameEx (HDC hdc, HWND hwnd, int l, int t, int r, int b, DWORD flags, gal_pixel fillc)
  122.  * brief Draws a thick 3D frame.
  123.  *
  124.  * This function draws a thin 3D frame (the border is 2-pixel wide), 
  125.  * and fills the frame if a fill flag is specified.
  126.  *
  127.  * param hdc The device context.
  128.  * param hwnd Tell the function to draw with the color definitions of this window.
  129.  * param l The x-coordinate of upper-left corner of the frame.
  130.  * param t The y-coordinate of upper-left corner of the frame.
  131.  * param r The x-coordinate of lower-right corner of the frame.
  132.  * param b The y-coordinate of lower-right corner of the frame.
  133.  * param flags Specify the drawing flag, can be or'ed with the following flags:
  134.  *              - DF_3DBOX_NORMALn The box is displayed with normal status.
  135.  *              - DF_3DBOX_PRESSEDn The box is pressed.
  136.  *              - DF_3DBOX_NOTFILLn Do not fill the box.
  137.  *              - DF_3DBOX_FILLn Fill the box and the a fillc defined the color.
  138.  * param fillc Specify the pixel value to fill the box when DF_3DBOX_FILL specified.
  139.  *
  140.  * sa Draw3DControlFrameEx, DrawFlatControlFrameEx
  141.  */
  142. void GUIAPI Draw3DThickFrameEx (HDC hdc, HWND hwnd,
  143.                 int l, int t, int r, int b, DWORD flags, gal_pixel fillc);
  144. /* back compatibility definitions */
  145. #define Draw3DUpThickFrame(hdc, l, t, r, b, fillc) 
  146.             Draw3DThickFrameEx(hdc, HWND_DESKTOP, l, t, r, b, DF_3DBOX_NORMAL | ((fillc)?DF_3DBOX_FILL:0), fillc)
  147. #define Draw3DDownThickFrame(hdc, l, t, r, b, fillc) 
  148.             Draw3DThickFrameEx(hdc, HWND_DESKTOP, l, t, r, b, DF_3DBOX_PRESSED | ((fillc)?DF_3DBOX_FILL:0), fillc)
  149. #define Draw3DUpFrame   Draw3DUpThickFrame
  150. #define Draw3DDownFrame Draw3DDownThickFrame
  151. /**
  152.  * fn void GUIAPI Draw3DThinFrameEx (HDC hdc, HWND hwnd, int l, int t, int r, int b, DWORD flags, gal_pixel fillc)
  153.  * brief Draws a thin 3D frame.
  154.  *
  155.  * This function draws a thin 3D frame (the border is 1-pixel wide), 
  156.  * and fills the frame if a fill flag is specified.
  157.  *
  158.  * param hdc The device context.
  159.  * param hwnd Tell the function to draw with the color definitions of this window.
  160.  * param l The x-coordinate of upper-left corner of the frame.
  161.  * param t The y-coordinate of upper-left corner of the frame.
  162.  * param r The x-coordinate of lower-right corner of the frame.
  163.  * param b The y-coordinate of lower-right corner of the frame.
  164.  * param flags Specify the drawing flag, can be or'ed with the following flags:
  165.  *              - DF_3DBOX_NORMALn The box is displayed with normal status.
  166.  *              - DF_3DBOX_PRESSEDn The box is pressed.
  167.  *              - DF_3DBOX_NOTFILLn Do not fill the box.
  168.  *              - DF_3DBOX_FILLn Fill the box and the a fillc defined the color.
  169.  * param fillc Specify the pixel value to fill the box when DF_3DBOX_FILL specified.
  170.  *
  171.  * sa Draw3DControlFrameEx, DrawFlatControlFrameEx
  172.  */
  173. void GUIAPI Draw3DThinFrameEx (HDC hdc, HWND hwnd,
  174.                 int l, int t, int r, int b, DWORD flags, gal_pixel fillc);
  175. /* back compatibility definitions */
  176. #define Draw3DUpThinFrame(hdc, l, t, r, b, fillc) 
  177.             Draw3DThinFrameEx(hdc, HWND_DESKTOP, l, t, r, b, DF_3DBOX_NORMAL | ((fillc)?DF_3DBOX_FILL:0), fillc)
  178. #define Draw3DDownThinFrame(hdc, l, t, r, b, fillc) 
  179.             Draw3DThinFrameEx(hdc, HWND_DESKTOP, l, t, r, b, DF_3DBOX_PRESSED | ((fillc)?DF_3DBOX_FILL:0), fillc)
  180. /**
  181.  * fn void GUIAPI Draw3DBorderEx (HDC hdc, HWND hwnd, int l, int t, int r, int b)
  182.  * brief Draws a 3D rectangle border.
  183.  *
  184.  * This function draws a 3D retangle border which is 2-pixel wide.
  185.  *
  186.  * param hdc The device context.
  187.  * param hwnd Tell the function to draw with the color definitions of this window.
  188.  * param l The x-coordinate of upper-left corner of the rectangle.
  189.  * param t The y-coordinate of upper-left corner of the rectangle.
  190.  * param r The x-coordinate of lower-right corner of the rectangle.
  191.  * param b The y-coordinate of lower-right corner of the rectangle.
  192.  *
  193.  * sa Draw3DThinFrameEx, Draw3DThickFrameEx 
  194.  */
  195. void GUIAPI Draw3DBorderEx (HDC hdc, HWND hwnd, int l, int t, int r, int b);
  196. /* back compatibility definitions */
  197. #define Draw3DBorder(hdc, l, t, r, b)   
  198.             Draw3DBorderEx(hdc, HWND_DESKTOP, l, t, r, b)
  199. /**
  200.  * fn void GUIAPI DisabledTextOutEx (HDC hdc, HWND hwnd, int x, int y, const char* szText)
  201.  * brief Outputs disabled (grayed) text.
  202.  *
  203.  * This function outputs a grayed text at the specified position.
  204.  *
  205.  * param hdc The device context.
  206.  * param hwnd Tell the function to draw with the color definitions of this window.
  207.  * param x The x-coordinate of start point.
  208.  * param y The y-coordinate of start point.
  209.  * param szText The null-terminated text to be outputted.
  210.  *
  211.  * sa TextOut, DrawText
  212.  */
  213. void GUIAPI DisabledTextOutEx (HDC hdc, HWND hwnd, int x, int y, const char* szText);
  214. /**
  215.  * fn void GUIAPI NotifyParentEx (HWND hwnd, int id, int code, DWORD add_data)
  216.  * brief Sends a notification message to the parent.
  217.  *
  218.  * By default, the notification from a control will be sent to its parent
  219.  * window within a MSG_COMMAND messsage.
  220.  *
  221.  * Since version 1.2.6, MiniGUI defines the Nofication Callback Procedure 
  222.  * for control. You can specify a callback function for a control by calling
  223.  * a SetNotificationCallback to receive and handle the notification from 
  224.  * the control.
  225.  *
  226.  * If you have defined the Notificaton Callback Procedure for the control,
  227.  * calling NotifyParentEx will call the notification callback procedure,
  228.  * not send the notification message to the parent.
  229.  *
  230.  * param hwnd The handle to current control window.
  231.  * param id The identifier of current control.
  232.  * param code The notification code.
  233.  * param add_data The additional data of the notification.
  234.  *
  235.  * sa SetNotificationCallback
  236.  */
  237. void GUIAPI NotifyParentEx (HWND hwnd, int id, int code, DWORD add_data);
  238. /**
  239.  * def NotifyParent(hwnd, id, code)
  240.  * brief Sends a notification message to the parent, 
  241.  *        but without additional data.
  242.  *
  243.  * param hwnd The handle to current control window.
  244.  * param id The identifier of current control.
  245.  * param code The notification code.
  246.  *
  247.  * note This function is actually a macro of NotifyParentEx with 
  248.  *       a dwAddData being zero.
  249.  *
  250.  * sa NotifiyParentEx
  251.  */
  252. #define NotifyParent(hwnd, id, code) 
  253.                 NotifyParentEx(hwnd, id, code, 0)
  254. /**
  255.  * var typedef int (*STRCMP) (const char* s1, const char* s2, size_t n)
  256.  * brief Type of general strncmp function.
  257.  *
  258.  * The function compares the two strings a s1 and a s2. It returns
  259.  * an integer less than, equal to, or greater than zero if  a s1 is found,
  260.  * respectively, to be less than, to match, or be greater than a s2.
  261.  *
  262.  * Note that it only compares the first (at most) a n characters of s1 and s2. 
  263.  */
  264. typedef int (*STRCMP) (const char* s1, const char* s2, size_t n);
  265.     /** @} end of misc_fns */
  266.     /** @} end of global_fns */
  267.     /** @} end of fns */
  268.     /**
  269.      * defgroup controls Standard controls
  270.      * @{
  271.      */
  272. /****** control messages *****************************************************/
  273. /* NOTE: control messages start from 0xF000 to 0xFFFF */
  274. #define MSG_FIRSTCTRLMSG    0xF000
  275. #define MSG_LASTCTRLMSG     0xFFFF
  276. /****** Static Control ******************************************************/
  277. #ifdef _CTRL_STATIC
  278.     /**
  279.      * defgroup ctrl_static Static control
  280.      * @{
  281.      */
  282. /**
  283.  * def CTRL_STATIC
  284.  * brief The class name of static control.
  285.  */
  286. #define CTRL_STATIC         ("static")
  287.     /**
  288.      * defgroup ctrl_static_styles Styles of static control
  289.      * @{
  290.      */
  291. /**
  292.  * def SS_LEFT
  293.  * brief Displays the given text flush-left.
  294.  */
  295. #define SS_LEFT             0x00000000L
  296. /**
  297.  * def SS_CENTER 
  298.  * brief Displays the given text centered in the rectangle. 
  299.  */
  300. #define SS_CENTER           0x00000001L
  301. /**
  302.  * def SS_RIGHT
  303.  * brief Displays the given text flush-right.
  304.  */
  305. #define SS_RIGHT            0x00000002L
  306. /**
  307.  * def SS_ICON 
  308.  * brief Designates an icon displayed in the static control.
  309.  */
  310. #define SS_ICON             0x00000003L
  311. /**
  312.  * def SS_BLACKRECT
  313.  * brief Specifies a rectangle filled with the black color.
  314.  */
  315. #define SS_BLACKRECT        0x00000004L
  316. /**
  317.  * def SS_GRAYRECT
  318.  * brief Specifies a rectangle filled with the light gray color.
  319.  */
  320. #define SS_GRAYRECT         0x00000005L
  321. /**
  322.  * def SS_WHITERECT
  323.  * brief Specifies a rectangle filled with the light white color.
  324.  */
  325. #define SS_WHITERECT        0x00000006L
  326. /**
  327.  * def SS_BLACKFRAME
  328.  * brief Specifies a box with a frame drawn with the black color.
  329.  */
  330. #define SS_BLACKFRAME       0x00000007L
  331. /**
  332.  * def SS_GRAYFRAME
  333.  * brief Specifies a box with a frame drawn with the light gray color.
  334.  */
  335. #define SS_GRAYFRAME        0x00000008L
  336. /**
  337.  * def SS_WHITEFRAME
  338.  * brief Specifies a box with a frame drawn with the light gray color.
  339.  */
  340. #define SS_WHITEFRAME       0x00000009L
  341. /**
  342.  * def SS_GROUPBOX
  343.  * brief Creates a rectangle in which other controls can be grouped.
  344.  */
  345. #define SS_GROUPBOX         0x0000000AL
  346. /**
  347.  * def SS_SIMPLE 
  348.  * brief Designates a simple rectangle and displays a single line 
  349.  *        of text flush-left in the rectangle.
  350.  */
  351. #define SS_SIMPLE           0x0000000BL
  352. /**
  353.  * def SS_LEFTNOWORDWRAP
  354.  * brief Designates a simple rectangle and displays the given text 
  355.  *        flush-left in the rectangle. 
  356.  *
  357.  * Tabs are expanded, but words are not wrapped. 
  358.  * Text that extends past the end of a line is clipped.
  359.  */
  360. #define SS_LEFTNOWORDWRAP   0x0000000CL
  361. #define SS_OWNERDRAW        0x0000000DL
  362. /**
  363.  * def SS_BITMAP
  364.  * brief Specifies that a bitmap will be displayed in the static control.
  365.  */
  366. #define SS_BITMAP           0x0000000EL
  367. #define SS_ENHMETAFILE      0x0000000FL
  368. #define SS_TYPEMASK         0x0000000FL
  369. /**
  370.  * def SS_NOPREFIX
  371.  * brief Prevents interpretation of any ampersand (&) characters in 
  372.  *        the control's text as accelerator prefix characters.
  373.  *
  374.  * note Not implemented so far.
  375.  */
  376. #define SS_NOPREFIX         0x00000080L
  377. /**
  378.  * def SS_NOTIFY
  379.  * brief Sends the parent window notification messages when the user 
  380.  *        clicks or double-clicks the control.
  381.  */
  382. #define SS_NOTIFY           0x00000100L
  383. /**
  384.  * def SS_CENTERIMAGE
  385.  * brief Puts the image in the center of the static control.
  386.  *        Default is top-left aligned.
  387.  */
  388. #define SS_CENTERIMAGE      0x00000200L
  389. /**
  390.  * def SS_REALSIZEIMAGE
  391.  * brief Does not scale the image.
  392.  */
  393. #define SS_REALSIZEIMAGE    0x00000800L
  394.     /** @} end of ctrl_static_styles */
  395.     
  396.     /**
  397.      * defgroup ctrl_static_msgs Messages of static control
  398.      * @{
  399.      */
  400. #define STM_SETICON         0xF170
  401. #define STM_GETICON         0xF171
  402. /**
  403.  * def STM_SETIMAGE
  404.  * brief Associates a new image (icon or bitmap) with a static control.
  405.  *
  406.  * An application sends an STM_SETIMAGE message to 
  407.  * associate a new image (icon or bitmap) with a static control.
  408.  *
  409.  * code
  410.  * STM_SETIMAGE
  411.  * HICON image;
  412.  *  or 
  413.  * BITMAP* image;
  414.  *
  415.  * wParam = (WPARAM)image;
  416.  * lParam = 0;
  417.  * endcode
  418.  * 
  419.  * param image The handle to an icon if the type of static control type 
  420.  *        is SS_ICON, or the pointer to a BITMAP object if the type is SS_BITMAP.
  421.  *
  422.  * return The old image (handle or pointer).
  423.  */
  424. #define STM_SETIMAGE        0xF172
  425. /**
  426.  * def STM_GETIMAGE
  427.  * brief Retrieves a handle to the image.
  428.  *
  429.  * An application sends an STM_GETIMAGE message to retrieve a handle 
  430.  * to the image associated with a static control.
  431.  *
  432.  * code
  433.  * STM_GETIMAGE
  434.  * wParam = 0;
  435.  * lParam = 0;
  436.  * endcode
  437.  *
  438.  * return The handle to the icon if the type of static control type is SS_ICON, 
  439.  *         or the pointer to the BITMAP object if the type is SS_BITMAP.
  440.  */
  441. #define STM_GETIMAGE        0xF173
  442. #define STM_MSGMAX          0xF174
  443.     /** @} end of ctrl_static_msgs */
  444.     /**
  445.      * defgroup ctrl_static_ncs Notification codes of static control
  446.      * @{
  447.      */
  448. /**
  449.  * def STN_DBLCLK
  450.  * brief Notifies a double-click.
  451.  *
  452.  * The STN_DBLCLK notification message is sent when 
  453.  * the user double-clicks a static control that has the SS_NOTIFY style.
  454.  */
  455. #define STN_DBLCLK          1
  456. #define STN_ENABLE          2
  457. #define STN_DISABLE         3
  458. /**
  459.  * def STN_CLICKED
  460.  * brief Notifies that a static control is clicked.
  461.  *
  462.  * The STN_CLICKED notification message is sent 
  463.  * when the user clicks a static control that has the SS_NOTIFY style.
  464.  */
  465. #define STN_CLICKED         4
  466.     /** @} end of ctrl_static_ncs */
  467.     /** @} end of ctrl_static */
  468. #endif /* _CTRL_STATIC */
  469. /****** Button Control ******************************************************/
  470. #ifdef _CTRL_BUTTON
  471.     /**
  472.      * defgroup ctrl_button Button control
  473.      * @{
  474.      */
  475. /**
  476.  * def CTRL_BUTTON
  477.  * brief The class name of button control.
  478.  */
  479. #define CTRL_BUTTON         ("button")
  480.     /**
  481.      * defgroup ctrl_button_styles Styles of button control
  482.      * @{
  483.      */
  484. /**
  485.  * def BS_PUSHBUTTON
  486.  * brief Creates a push button.
  487.  */
  488. #define BS_PUSHBUTTON       0x00000000L
  489. /**
  490.  * def BS_DEFPUSHBUTTON
  491.  * brief Creates a push button that behaves like a BS_PUSHBUTTON style button.
  492.  
  493.  * Creates a push button that behaves like a BS_PUSHBUTTON style button, 
  494.  * but also has a heavy black border.  If the button is in a dialog box, 
  495.  * the user can select the button by pressing the enter key, 
  496.  * even when the button does not have the input focus. 
  497.  * This style is useful for enabling the user to quickly select 
  498.  * the most likely (default) option.
  499.  */
  500. #define BS_DEFPUSHBUTTON    0x00000001L
  501. /**
  502.  * def BS_CHECKBOX
  503.  * brief Creates a small, empty check box with text.
  504.  *
  505.  * By default, the text is displayed to the right of the check box. 
  506.  * To display the text to the left of the check box, combine this flag 
  507.  * with the BS_LEFTTEXT style (or with the equivalent BS_RIGHTBUTTON style).
  508.  */
  509. #define BS_CHECKBOX         0x00000002L
  510. /**
  511.  * def BS_AUTOCHECKBOX
  512.  * brief Creates a button that is almost the same as a check box.
  513.  *
  514.  * Creates a button that is the same as a check box, 
  515.  * except that the check state automatically toggles between 
  516.  * checked and unchecked each time the user selects the check box.
  517.  */
  518. #define BS_AUTOCHECKBOX     0x00000003L
  519. /**
  520.  * def BS_RADIOBUTTON
  521.  * brief Creates a small circle with text.
  522.  *
  523.  * By default, the text is displayed to the right of the circle. 
  524.  * To display the text to the left of the circle, combine this flag 
  525.  * with the BS_LEFTTEXT style (or with the equivalent BS_RIGHTBUTTON style). 
  526.  * Use radio buttons for groups of related, but mutually exclusive choices.
  527.  */
  528. #define BS_RADIOBUTTON      0x00000004L
  529. /**
  530.  * def BS_3STATE
  531.  * brief Creates a button that is almost the same as a check box.
  532.  * 
  533.  * Creates a button that is the same as a check box, except 
  534.  * that the box can be grayed as well as checked or unchecked.
  535.  * Use the grayed state to show that the state of the check box 
  536.  * is not determined.
  537.  */
  538. #define BS_3STATE           0x00000005L
  539. /**
  540.  * def BS_AUTO3STATE
  541.  * brief Creates a button that is almost the same as a three-state check box.
  542.  *
  543.  * Creates a button that is the same as a three-state check box, 
  544.  * except that the box changes its state when the user selects it.
  545.  * The state cycles through checked, grayed, and unchecked.
  546.  */
  547. #define BS_AUTO3STATE       0x00000006L
  548. #define BS_GROUPBOX         0x00000007L
  549. #define BS_USERBUTTON       0x00000008L
  550. /**
  551.  * def BS_AUTORADIOBUTTON
  552.  * brief Creates a button that is almost the same as a radio button.
  553.  * 
  554.  * Creates a button that is the same as a radio button, 
  555.  * except that when the user selects it, The system automatically 
  556.  * sets the button's check state to checked
  557.  * and automatically sets the check state for all other buttons 
  558.  * in the same group to unchecked.
  559.  */
  560. #define BS_AUTORADIOBUTTON  0x00000009L
  561. /**
  562.  * def BS_OWNERDRAW
  563.  * brief Creates an owner-drawn button.
  564.  *
  565.  * note Not implemented so far.
  566.  */
  567. #define BS_OWNERDRAW        0x0000000BL
  568. #define BS_TYPEMASK         0x0000000FL
  569. /**
  570.  * def BS_TEXT
  571.  * brief Specifies that the button displays text.
  572.  */
  573. #define BS_TEXT             0x00000000L
  574. /**
  575.  * def BS_LEFTTEXT
  576.  * brief Places text on the left side.
  577.  *
  578.  * Places text on the left side of the radio button 
  579.  * or check box when combined with a radio button or check box style.
  580.  */
  581. #define BS_LEFTTEXT         0x00000020L
  582. /**
  583.  * def BS_ICON
  584.  * brief Specifies that the button displays an icon.
  585.  */
  586. #define BS_ICON             0x00000040L
  587. /**
  588.  * def BS_BITMAP
  589.  * brief Specifies that the button displays a bitmap.
  590.  */
  591. #define BS_BITMAP           0x00000080L
  592. #define BS_CONTENTMASK      0x000000F0L
  593. /**
  594.  * def BS_LEFT
  595.  * brief Left-justifies the text in the button rectangle.
  596.  *
  597.  * However, if the button is a check box or radio button that 
  598.  * does not have the BS_RIGHTBUTTON style, the text is left 
  599.  * justified on the right side of the check box or radio button.
  600.  */
  601. #define BS_LEFT             0x00000100L
  602. /**
  603.  * def BS_RIGHT
  604.  * brief Right-justifies text in the button rectangle.
  605.  * 
  606.  * However, if the button is a check box or radio button that 
  607.  * does not have the BS_RIGHTBUTTON style, the text is 
  608.  * right justified on the right side of the check box or radio button.
  609.  */
  610. #define BS_RIGHT            0x00000200L
  611. /**
  612.  * def BS_CENTER
  613.  * brief Centers text horizontally in the button rectangle.
  614.  */
  615. #define BS_CENTER           0x00000300L
  616. /**
  617.  * def BS_TOP
  618.  * brief Places text at the top of the button rectangle.
  619.  */
  620. #define BS_TOP              0x00000400L
  621. /**
  622.  * def BS_BOTTOM
  623.  * brief Places text at the bottom of the button rectangle.
  624.  */
  625. #define BS_BOTTOM           0x00000800L
  626. /**
  627.  * def BS_VCENTER
  628.  * brief Places text in the middle (vertically) of the button rectangle.
  629.  */
  630. #define BS_VCENTER          0x00000C00L
  631. /**
  632.  * def BS_REALSIZEIMAGE
  633.  * brief Does not scale the image.
  634.  */
  635. #define BS_REALSIZEIMAGE    0x00000F00L
  636. #define BS_ALIGNMASK        0x00000F00L
  637. /**
  638.  * def BS_PUSHLIKE
  639.  * brief Makes a button look and act like a push button.
  640.  *
  641.  * Makes a button (such as a check box, three-state check box, or radio button) 
  642.  * look and act like a push button. The button looks raised when it isn't 
  643.  * pushed or checked, and sunken when it is pushed or checked.
  644.  */
  645. #define BS_PUSHLIKE         0x00001000L
  646. /**
  647.  * def BS_MULTLINE
  648.  * brief Wraps the button text to multiple lines.
  649.  *
  650.  * Wraps the button text to multiple lines if the text string is 
  651.  * too long to fit on a single line in the button rectangle.
  652.  */
  653. #define BS_MULTLINE         0x00002000L
  654. /**
  655.  * def BS_NOTIFY
  656.  * brief Enables a button to send notification messages to its parent window.
  657.  */
  658. #define BS_NOTIFY           0x00004000L
  659. /**
  660.  * def BS_CHECKED
  661.  * brief Makes a button checked initially.
  662.  */
  663. #define BS_CHECKED          0x00004000L
  664. #define BS_FLAT             0x00008000L
  665. #define BS_NOBORDER         0x00010000L
  666. #define BS_RIGHTBUTTON      BS_LEFTTEXT
  667.     /** @} end of ctrl_button_styles */
  668.     /**
  669.      * defgroup ctrl_button_states States of button control
  670.      * @{
  671.      */
  672. /**
  673.  * def BST_UNCHECKED
  674.  * brief Indicates the button is unchecked.
  675.  */
  676. #define BST_UNCHECKED       0x0000
  677. /**
  678.  * def BST_CHECKED
  679.  * brief Indicates the button is checked.
  680.  */
  681. #define BST_CHECKED         0x0001
  682. /**
  683.  * def BST_INDETERMINATE
  684.  * brief Indicates the button is grayed because 
  685.  * the state of the button is indeterminate.
  686.  */
  687. #define BST_INDETERMINATE   0x0002
  688. /**
  689.  * def BST_PUSHED
  690.  * brief Specifies the highlight state.
  691.  */
  692. #define BST_PUSHED          0x0004
  693. /**
  694.  * def BST_FOCUS
  695.  * brief Specifies the focus state.
  696.  */
  697. #define BST_FOCUS           0x0008
  698.     /** @} end of ctrl_button_states */
  699.     /**
  700.      * defgroup ctrl_button_msgs Messages of button control
  701.      * @{
  702.      */
  703. /**
  704.  * def BM_GETCHECK
  705.  * brief Retrieves the check state of a radio button or check box.
  706.  *
  707.  * An application sends a BM_GETCHECK message to retrieve 
  708.  * the check state of a radio button or check box.
  709.  *
  710.  * code
  711.  * BM_GETCHECK
  712.  * wParam = 0;
  713.  * lParam = 0;
  714.  * endcode
  715.  *
  716.  * return An integer indicates whether the button is checked.
  717.  *
  718.  * retval BST_UNCHECKED The button is not checked.
  719.  * retval BST_CHECKED The button is checked.
  720.  * retval BST_INDETERMINATE The button is grayed because the state of the button is indeterminate.
  721.  *
  722.  * sa ctrl_button_states
  723.  */
  724. #define BM_GETCHECK             0xF0F0
  725. /**
  726.  * def BM_SETCHECK
  727.  * brief Sets the check state of a radio button or check box.
  728.  *
  729.  * An application sends a BM_SETCHECK message to set 
  730.  * the check state of a radio button or check box.
  731.  *
  732.  * code
  733.  * BM_SETCHECK
  734.  * int check_state;
  735.  *
  736.  * wParam = (WPARAM)check_state;
  737.  * lParam = 0;
  738.  * endcode
  739.  *
  740.  * param check_state The check state of button, can be one of the following values:
  741.  *      - BST_UNCHECKEDn
  742.  *        Want the button to be unchecked.
  743.  *      - BST_CHECKEDn
  744.  *        Want the button to be checked.
  745.  *      - BST_INDETERMINATEn
  746.  *        Want the button to be grayed if it is a three states button.
  747.  * return The old button state.
  748.  */
  749. #define BM_SETCHECK             0xF0F1
  750. /**
  751.  * def BM_GETSTATE
  752.  * brief Gets the state of a button or check box.
  753.  *
  754.  * An application sends a BM_GETSTATE message to 
  755.  * determine the state of a button or check box.
  756.  *
  757.  * code
  758.  * BM_GETSTATE
  759.  * wParam = 0;
  760.  * lParam = 0;
  761.  * endcode
  762.  *
  763.  * return An integer indicates the button state.
  764.  *
  765.  * sa ctrl_button_states
  766.  */
  767. #define BM_GETSTATE             0xF0F2
  768. /**
  769.  * def BM_SETSTATE
  770.  * brief Sets the state of a button.
  771.  *
  772.  * An application sends a BM_GETSTATE message to set the state of a 
  773.  * button.
  774.  *
  775.  * code
  776.  * BM_SETSTATE
  777.  * int push_state;
  778.  *
  779.  * wParam = (WPARAM)push_state;
  780.  * lParam = 0;
  781.  * endcode
  782.  *
  783.  * param push_state The push state of a button, can be one of the following values:
  784.  *      - Zeron
  785.  *        Want the button to be unpushed.
  786.  *      - Non zeron
  787.  *        Want the button to be pushed.
  788.  *
  789.  * return The old button state.
  790.  */
  791. #define BM_SETSTATE             0xF0F3
  792. /**
  793.  * def BM_SETSTYLE
  794.  * brief Changes the style of a button.
  795.  *
  796.  * An application sends a BM_SETSTYLE message to change the style of a button.
  797.  *
  798.  * code
  799.  * BM_SETSTYLE
  800.  * int button_style;
  801.  *
  802.  * wParam = (WPARAM)button_style;
  803.  * lParam = 0;
  804.  * endcode
  805.  *
  806.  * param button_style The styles of a button.
  807.  *
  808.  * return Always be zero.
  809.  *
  810.  * sa ctrl_button_styles
  811.  */
  812. #define BM_SETSTYLE             0xF0F4
  813. /**
  814.  * def BM_CLICK
  815.  * brief Simulates the user clicking a button.
  816.  *
  817.  * An application sends a BM_CLICK message to simulate the user clicking a button.
  818.  *
  819.  * code
  820.  * BM_CLICK
  821.  *
  822.  * wParam = 0;
  823.  * lParam = 0;
  824.  * endcode
  825.  */
  826. #define BM_CLICK                0xF0F5
  827. /**
  828.  * def BM_GETIMAGE
  829.  * brief Retrieves the handle to the image.
  830.  *
  831.  * An application sends a BM_GETIMAGE message to 
  832.  * retrieve a handle to the image (icon or bitmap) associated with the button.
  833.  *
  834.  * code
  835.  * BM_GETIMAGE
  836.  * int image_type;
  837.  *
  838.  * wParam = (WPARAM)&image_type;
  839.  * lParam = 0;
  840.  * endcode
  841.  *
  842.  * param image_type The type of a button image will be returned through this buferr.
  843.  *        It can be one of the following values:
  844.  *      - BM_IMAGE_BITMAPn
  845.  *        Bitmap of a button.
  846.  *      - BM_IMAGE_ICONn
  847.  *        Icon of a button.
  848.  *
  849.  * return A handle of the bitmap or icon of the button, zero when error.
  850.  */
  851. #define BM_GETIMAGE             0xF0F6
  852. #define BM_IMAGE_BITMAP         1
  853. #define BM_IMAGE_ICON           2
  854.     
  855. /**
  856.  * def BM_SETIMAGE
  857.  * brief Associates a new image (icon or bitmap) with the button.
  858.  *
  859.  * An application sends a BM_SETIMAGE message to 
  860.  * associate a new image (icon or bitmap) with the button.
  861.  *
  862.  * Please use BM_IMAGE_BITMAP or BM_IMAGE_ICON as the first parameter of the message 
  863.  * to indicate the type of button control image:
  864.  *  - BM_IMAGE_BITMAPn
  865.  *          Specifies the type of image to associate with the button to be a bitmap.
  866.  *  - BM_IMAGE_ICONn
  867.  *          Specifies the type of image to associate with the button to be an icon.
  868.  */
  869. #define BM_SETIMAGE             0xF0F7
  870. #define BM_MSGMAX               0xF100
  871.     /** @} end of ctrl_button_msgs */
  872.     
  873.     /**
  874.      * defgroup ctrl_button_ncs Notification codes of button control
  875.      * @{
  876.      */
  877. /**
  878.  * def BN_CLICKED
  879.  * brief The BN_CLICKED notification message is sent when the user clicks a button.
  880.  */
  881. #define BN_CLICKED          0
  882. #define BN_PAINT            1   /* not supported */
  883. #define BN_HILITE           2
  884. #define BN_UNHILITE         3
  885. #define BN_DISABLE          4   /* not supported */
  886. #define BN_DOUBLECLICKED    5
  887. /**
  888.  * def BN_PUSHED
  889.  * brief The BN_PUSHED notification message is sent when the user pushes a button.
  890.  */
  891. #define BN_PUSHED           BN_HILITE
  892. /**
  893.  * def BN_UNPUSHED
  894.  * brief The BN_UNPUSHED notification message is sent when the user unpushes a button.
  895.  */
  896. #define BN_UNPUSHED         BN_UNHILITE
  897. /**
  898.  * def BN_DBLCLK
  899.  * brief The BN_DBLCLK notification message is sent when the user double-clicks a button.
  900.  */
  901. #define BN_DBLCLK           BN_DOUBLECLICKED
  902. /**
  903.  * def BN_SETFOCUS
  904.  * brief The BN_SETFOCUS notification message is sent when a button receives the keyboard focus.
  905.  */
  906. #define BN_SETFOCUS         6
  907. /**
  908.  * def BN_KILLFOCUS
  909.  * brief The BN_KILLFOCUS notification message is sent when a button loses the keyboard focus.
  910.  */
  911. #define BN_KILLFOCUS        7
  912.     /** @} end of ctrl_button_ncs */
  913.     /** @} end of ctrl_button */
  914. #endif /* _CTRL_BUTTON */
  915. /****** Edit and MEdit Control ***********************************************/
  916. #if defined (_CTRL_SIMEDIT) || defined(_CTRL_SLEDIT) || defined(_CTRL_MLEDIT)
  917.     /**
  918.      * defgroup ctrl_edit Edit/MEdit control
  919.      *
  920.      * bug You can not pass caption argument for multi-line edit control
  921.      *      when you create it, just use null string:
  922.      *
  923.      * code
  924.      *  CreateWindowEx (CTRL_MEDIT, ..., "", ...);
  925.      * endcode
  926.      *
  927.      * @{
  928.      */
  929. /**
  930.  * def CTRL_EDIT
  931.  * brief The class name of simple single-line editor box.
  932.  *
  933.  * This edit control uses the system default fixed logical font.
  934.  */
  935. #define CTRL_EDIT           ("edit")
  936. /**
  937.  * def CTRL_SLEDIT
  938.  * brief The class name of single-line editor box.
  939.  *
  940.  * This edit control uses the system logical font for control,
  941.  * which may be variable-width font..
  942.  */
  943. #define CTRL_SLEDIT         ("sledit")
  944. /**
  945.  * def CTRL_MLEDIT
  946.  * brief The class name of multiple-line editor box.
  947.  *
  948.  * This edit control uses the system logical font for control,
  949.  * which may be variable-width font..
  950.  */
  951. #define CTRL_MLEDIT         ("mledit")
  952. /**
  953.  * def CTRL_MEDIT
  954.  * brief Another class name of multiple-line editor box.
  955.  *
  956.  * This edit control uses the system logical font for control,
  957.  * which may be variable-width font..
  958.  */
  959. #define CTRL_MEDIT          ("medit")
  960. #define CTRL_OLDMEDIT       ("oldmedit")
  961.     /**
  962.      * defgroup ctrl_edit_styles Styles of edit control
  963.      * @{
  964.      */
  965. /**
  966.  * def ES_LEFT
  967.  * brief Left-aligns text.
  968.  */
  969. #define ES_LEFT             0x00000000L
  970. #define ES_CENTER           0x00000001L
  971. #define ES_RIGHT            0x00000002L
  972. #define ES_MULTILINE        0x00000004L
  973. /**
  974.  * def ES_UPPERCASE
  975.  * brief Converts all characters to uppercase as they are typed into the edit control.
  976.  */
  977. #define ES_UPPERCASE        0x00000008L
  978. /**
  979.  * def ES_LOWERCASE
  980.  * brief Converts all characters to lowercase as they are typed into the edit control.
  981.  */
  982. #define ES_LOWERCASE        0x00000010L
  983. /**
  984.  * def ES_PASSWORD
  985.  * brief Displays an asterisk (*) for each character typed into the edit control.
  986.  */
  987. #define ES_PASSWORD         0x00000020L
  988. #define ES_AUTOVSCROLL      0x00000040L
  989. #define ES_AUTOHSCROLL      0x00000080L
  990. /**
  991.  * def ES_NOHIDESEL
  992.  * brief Edit control with this style will remain selected when focus is lost
  993.  */
  994. #define ES_NOHIDESEL        0x00000100L
  995. /**
  996.  * def ES_AUTOSELECT
  997.  * brief Selects all text when getting focus
  998.  */
  999. #define ES_AUTOSELECT       0x00000400L
  1000. //#define ES_OEMCONVERT       0x00000400L
  1001. /**
  1002.  * def ES_READONLY
  1003.  * brief Prevents the user from typing or editing text in the edit control.
  1004.  */
  1005. #define ES_READONLY         0x00000800L
  1006. /**
  1007.  * def ES_BASELINE
  1008.  * brief Draws base line under input area instead of frame border.
  1009.  */
  1010. #define ES_BASELINE         0x00001000L
  1011. /**
  1012.  * def ES_AUTOWRAP
  1013.  * brief Automatically wraps against border when inputting.
  1014.  */
  1015. #define ES_AUTOWRAP         0x00002000L
  1016. /**
  1017.  * def ES_TITLE
  1018.  * brief Shows specified title texts.
  1019.  */
  1020. #define ES_TITLE            0x00004000L
  1021. /**
  1022.  * def ES_TIP
  1023.  * brief Shows specified tip texts.
  1024.  */
  1025. #define ES_TIP              0x00008000L
  1026.     /** @} end of ctrl_edit_styles */
  1027.     /**
  1028.      * defgroup ctrl_edit_msgs Messages of edit control
  1029.      * @{
  1030.      */
  1031. /**
  1032.  * def EM_GETSEL
  1033.  * brief Gets the selected string in the edit control.
  1034.  *
  1035.  * code
  1036.  * EM_GETSEL
  1037.  *
  1038.  * char *buffer;
  1039.  * int len;
  1040.  *
  1041.  * wParam = len;
  1042.  * lParam = (LPARAM)buffer;
  1043.  * endcode
  1044.  *
  1045.  * param len Length of buffer.
  1046.  * param buffer Pointer to the string buffer
  1047.  *
  1048.  * return length of the selected string
  1049.  */
  1050. #define EM_GETSEL               0xF0B0
  1051. /**
  1052.  * def EM_SETSEL
  1053.  * brief Sets the selected point in the edit control and makes
  1054.  *        the text between insertion point and selection point selected.
  1055.  *
  1056.  *        Generally, you should send EM_SETCARETPOS first to set insertion
  1057.  *        point before you use EM_SETSEL to select text.
  1058.  *
  1059.  * code
  1060.  * EM_SETSEL
  1061.  *
  1062.  * int line_pos;
  1063.  * int char_pos;
  1064.  *
  1065.  * wParam = (WPARAM)line_pos;
  1066.  * lParam = (LPARAM)char_pos;
  1067.  * endcode
  1068.  *
  1069.  * param line_pos line position of the selection point.
  1070.  *                 For single line editor, it is always zero.
  1071.  *                 Note : For multi-line editor, "line" means a text string ended with a line
  1072.  *                 seperator, not a single text line in wrap mode. So, char_pos
  1073.  *                 means the character position in a text string.
  1074.  * param char_pos character(wide character) position of the selection point.
  1075.  *
  1076.  * return length of the selected string
  1077.  */
  1078. #define EM_SETSEL               0xF0B1
  1079. #define EM_SETSELECTION         EM_SETSEL
  1080. /**
  1081.  * def EM_SELECTALL
  1082.  * brief Selects all the texts, the same meaning as ctrl+a
  1083.  *        
  1084.  * code
  1085.  * EM_SELECTALL
  1086.  *
  1087.  * wParam = 0;
  1088.  * lParam = 0;
  1089.  * endcode
  1090.  */
  1091. #define EM_SELECTALL              0xF0B2
  1092. /**
  1093.  * def EM_GETSELPOS
  1094.  * brief Gets the position of the selection point.
  1095.  *
  1096.  * code
  1097.  * EM_GETSELPOS
  1098.  * int* line_pos;
  1099.  * int* char_pos;
  1100.  *
  1101.  * wParam = (WPARAM)line_pos;
  1102.  * lParam = (LPARAM)char_pos;
  1103.  * endcode
  1104.  *
  1105.  * param line_pos Pointer to a integer buffer to save the selection line position.
  1106.  *                 For single line editor, it is always zero.
  1107.  *                 Note : Here "line" means a text string ended with a line
  1108.  *                 seperator, not a single text line in wrap mode. So, char_pos
  1109.  *                 means the character position in a text string.
  1110.  * param char_pos Pointer to a integer buffer to save the selection character position.
  1111.  *
  1112.  * return The string length of the text from the beginning to the selection point.
  1113.  */
  1114. #define EM_GETSELPOS              0xF0B3
  1115. /**
  1116.  * def EM_INSERTCBTEXT
  1117.  * brief Inserts the text in the clipboard to the current caret position
  1118.  *
  1119.  * code
  1120.  * EM_INSERTCBTEXT
  1121.  * int len;
  1122.  * const char *string;
  1123.  *
  1124.  * wParam = len;
  1125.  * lParam = (LPARAM)string;
  1126.  * endcode
  1127.  *
  1128.  * param len Length of string
  1129.  * param string Pointer to the text string
  1130.  */
  1131. #define EM_INSERTCBTEXT           0xF0B4
  1132. /**
  1133.  * def EM_COPYTOCB
  1134.  * brief Copies the currently selected text to the clipboard
  1135.  *
  1136.  * code
  1137.  * EM_COPYTOCB
  1138.  *
  1139.  * wParam = 0;
  1140.  * lParam = 0
  1141.  * endcode
  1142.  *
  1143.  * return Length of the text which is really copied to clipboard.
  1144.  */
  1145. #define EM_COPYTOCB               0xF0B5
  1146. /**
  1147.  * def EM_CUTTOCB
  1148.  * brief Cuts the currently selected text to the clipboard
  1149.  *
  1150.  * code
  1151.  * EM_CUTTOCB
  1152.  *
  1153.  * wParam = 0;
  1154.  * lParam = 0
  1155.  * endcode
  1156.  *
  1157.  * return Length of the text which is really copied to clipboard.
  1158.  */
  1159. #define EM_CUTTOCB               0xF0B6
  1160. /**
  1161.  * def EM_SETLFDISPCHAR
  1162.  * brief Sets the char used to represent the line seperator.
  1163.  *        
  1164.  * In default case, the line sperator will not be shown.
  1165.  * If the char used to represent the line seperator is not zero,
  1166.  *    this char will be shown in place of line seperator.
  1167.  *
  1168.  * code
  1169.  * EM_SETLFDISPCHAR
  1170.  * unsigned char ch;
  1171.  *
  1172.  * wParam = 0;
  1173.  * lParam = ch;
  1174.  * endcode
  1175.  *
  1176.  * param ch the char used to represent the line seperator
  1177.  */
  1178. #define EM_SETLFDISPCHAR          0xF0B7
  1179. /**
  1180.  * def EM_SETLINESEP
  1181.  * brief Sets the line seperator.
  1182.  *        
  1183.  * In default case, the line sperator is 'n'.
  1184.  *
  1185.  * code
  1186.  * EM_SETLINESEP
  1187.  * unsigned char ch;
  1188.  *
  1189.  * wParam = 0;
  1190.  * lParam = ch;
  1191.  * endcode
  1192.  *
  1193.  * param ch the new line seperator
  1194.  */
  1195. #define EM_SETLINESEP             0xF0B8
  1196. //#define EM_GETRECT              0xF0B2
  1197. //#define EM_SETRECT              0xF0B3
  1198. //#define EM_SETRECTNP            0xF0B4
  1199. //#define EM_SCROLL               0xF0B5
  1200. /**
  1201.  * def EM_GETCARETPOS
  1202.  * brief Gets the position of the caret.
  1203.  *
  1204.  * code
  1205.  * EM_GETCARETPOS
  1206.  * int* line_pos;
  1207.  * int* char_pos;
  1208.  *
  1209.  * wParam = (WPARAM)line_pos;
  1210.  * lParam = (LPARAM)char_pos;
  1211.  * endcode
  1212.  *
  1213.  * param line_pos Pointer to a integer buffer to save the caret line position.
  1214.  *                 For single line editor, it is always zero.
  1215.  *                 Note : Here "line" means a text string ended with a line
  1216.  *                 seperator, not a single text line in wrap mode. So, char_pos
  1217.  *                 means the character position in a text string.
  1218.  * param char_pos Pointer to a integer buffer to save the caret character position.
  1219.  *
  1220.  * return The string length of the text from the beginning to the caret pos.
  1221.  */
  1222. #define EM_GETCARETPOS          0xF0B9
  1223. /**
  1224.  * def EM_SETCARETPOS
  1225.  * brief Sets the position of the caret.
  1226.  *
  1227.  * code
  1228.  * EM_SETCARETPOS
  1229.  * int line_pos;
  1230.  * int char_pos;
  1231.  *
  1232.  * wParam = (WPARAM)line_pos;
  1233.  * lParam = (LPARAM)char_pos;
  1234.  * endcode
  1235.  *
  1236.  * param line_pos The new caret line position. For single line editor, it will be ignored.
  1237.  *                 Note : Here "line" means a text string ended with a line
  1238.  *                 seperator, not a single text line in wrap mode. So, char_pos
  1239.  *                 means the character position in a text string.
  1240.  * param char_pos The new caret character position.
  1241.  *
  1242.  * return length of the string from the beginning to the caret position 
  1243.  *         on success, otherwise -1.
  1244.  */
  1245. #define EM_SETCARETPOS          0xF0BA
  1246. #define EM_SETINSERTION         EM_SETCARETPOS
  1247. //#define EM_SCROLLCARET          0xF0B9
  1248. //#define EM_GETMODIFY            0xF0BA
  1249. //#define EM_SETMODIFY            0xF0BB
  1250. /**
  1251.  * def EM_GETLINECOUNT
  1252.  * brief Gets the line number.
  1253.  *
  1254.  * code
  1255.  * EM_GETLINECOUNT
  1256.  *
  1257.  * wParam = 0;
  1258.  * lParam = 0;
  1259.  * endcode
  1260.  *
  1261.  * return Line number on success, otherwise -1.
  1262.  * note Implemented for TextEdit control.
  1263.  */
  1264. #define EM_GETLINECOUNT         0xF0BC
  1265. /**
  1266.  * def EM_GETLINEHEIGHT
  1267.  * brief Gets the height of a line.
  1268.  *
  1269.  * code
  1270.  * EM_GETLINEHEIGHT
  1271.  *
  1272.  * wParam = 0;
  1273.  * lParam = 0;
  1274.  * endcode
  1275.  *
  1276.  * return Height value.
  1277.  * note Implemented for TextEdit control.
  1278.  */
  1279. #define EM_GETLINEHEIGHT        0xF0BD
  1280. /**
  1281.  * def EM_SETLINEHEIGHT
  1282.  * brief Sets the height of a line.
  1283.  *
  1284.  * code
  1285.  * EM_SETLINEHEIGHT
  1286.  *
  1287.  * wParam = height;
  1288.  * lParam = 0;
  1289.  * endcode
  1290.  *
  1291.  * return the old height value.
  1292.  * note Implemented for TextEdit control.
  1293.  */
  1294. #define EM_SETLINEHEIGHT        0xF0BE
  1295. //#define EM_LINEINDEX            0xF0BD
  1296. //#define EM_GETTHUMB             0xF0BE
  1297. /* internal used now */
  1298. #define EM_LINESCROLL           0xF0BF
  1299.  
  1300. #define EM_LINELENGTH           0xF0C1
  1301. #define EM_REPLACESEL           0xF0C2
  1302. #define EM_GETLINE              0xF0C4
  1303. /**
  1304.  * def EM_LIMITTEXT
  1305.  * brief Set text limit of an edit control.
  1306.  *
  1307.  * code
  1308.  * EM_LIMITTEXT
  1309.  * int newLimit;
  1310.  *
  1311.  * wParam = (WPARAM)newLimit;
  1312.  * lParam = 0;
  1313.  * endcode
  1314.  *
  1315.  * param newLimit The new text limit of an edit control.
  1316.  */
  1317. #define EM_LIMITTEXT            0xF0C5
  1318. /**
  1319.  * def EM_REDO
  1320.  * brief Redo operation.
  1321.  *
  1322.  * code
  1323.  *
  1324.  * wParam = 0;
  1325.  * lParam = 0;
  1326.  * endcode
  1327.  *
  1328.  */
  1329. #define EM_REDO                 0xF0C6
  1330. //#define EM_CANUNDO              0xF0C6
  1331.  
  1332. /**
  1333.  * def EM_UNDO
  1334.  * brief Undo operation.
  1335.  *
  1336.  * code
  1337.  *
  1338.  * wParam = 0;
  1339.  * lParam = 0;
  1340.  * endcode
  1341.  *
  1342.  */
  1343. #define EM_UNDO                 0xF0C7
  1344. #define EM_FMTLINES             0xF0C8
  1345. #define EM_LINEFROMCHAR         0xF0C9
  1346. #define EM_SETTABSTOPS          0xF0CB
  1347. /**
  1348.  * def EM_SETPASSWORDCHAR
  1349.  * brief Defines the character that edit control uses in conjunction with 
  1350.  * the ES_PASSWORD style.
  1351.  *
  1352.  * code
  1353.  * EM_SETPASSWORDCHAR
  1354.  * char passwdChar;
  1355.  *
  1356.  * wParam = (WPARAM)passwdChar;
  1357.  * lParam = 0;
  1358.  * endcode
  1359.  */
  1360. #define EM_SETPASSWORDCHAR      0xF0CC
  1361. #define EM_EMPTYUNDOBUFFER      0xF0CD
  1362. #define EM_GETFIRSTVISIBLELINE  0xF0CE
  1363. /**
  1364.  * def EM_SETREADONLY
  1365.  * brief Sets or removes the read-only style (ES_READONLY) in an edit control.
  1366.  *
  1367.  * code
  1368.  * EM_SETREADONLY
  1369.  * int readonly;
  1370.  *
  1371.  * wParam = (WPARAM)readonly;
  1372.  * lParam = 0;
  1373.  * endcode
  1374.  *
  1375.  * param readonly Indicates whether the edit control is read-only:
  1376.  *      - Zeron
  1377.  *        Not read-only.
  1378.  *      - Non zeron
  1379.  *        Read-only.
  1380.  */
  1381. #define EM_SETREADONLY          0xF0CF
  1382. #define EM_SETWORDBREAKPROC     0xF0D0
  1383. #define EM_GETWORDBREAKPROC     0xF0D1
  1384. /**
  1385.  * def EM_GETPASSWORDCHAR
  1386.  * brief Returns the character that edit controls uses in conjunction with 
  1387.  * the ES_PASSWORD style.
  1388.  *
  1389.  * code
  1390.  * EM_GETPASSWORDCHAR
  1391.  *
  1392.  * wParam = 0;
  1393.  * lParam = 0;
  1394.  * endcode
  1395.  *
  1396.  * return The currently used password character
  1397.  */
  1398. #define EM_GETPASSWORDCHAR      0xF0D2
  1399. #define EM_SETMARGINS           0xF0D3
  1400. #define EM_GETMARGINS           0xF0D4
  1401. #define EM_SETLIMITTEXT         EM_LIMITTEXT
  1402. #define EM_GETLIMITTEXT         0xF0D5
  1403. #define EM_POSFROMCHAR          0xF0D6
  1404. #define EM_CHARFROMPOS          0xF0D7
  1405. #define EM_SETIMESTATUS         0xF0D8
  1406. #define EM_GETIMESTATUS         0xF0D9
  1407. #define MEM_SCROLLCHANGE        0xF0DB
  1408. #define MED_STATE_YES           0x0
  1409. #define MED_STATE_NOUP          0x1
  1410. #define MED_STATE_NODN          0x2
  1411. #define MED_STATE_NO            0x3
  1412. /**
  1413.  * def EM_SETTITLETEXT
  1414.  * brief Sets the title text displayed before content text. 
  1415.  *
  1416.  * code
  1417.  * EM_SETTITLETEXT
  1418.  * const char *title;
  1419.  * int len;
  1420.  *
  1421.  * wParam = len;
  1422.  * lParam = (LPARAM)title;
  1423.  * endcode
  1424.  *
  1425.  * note Implemented for TextEdit control.
  1426.  */
  1427. #define EM_SETTITLETEXT         0xF0DC
  1428. /**
  1429.  * def EM_GETTITLETEXT
  1430.  * brief Gets the title text displayed before content text. 
  1431.  *
  1432.  * code
  1433.  * EM_GETTITLETEXT
  1434.  * const char *buffer;
  1435.  * int len;
  1436.  *
  1437.  * wParam = len;
  1438.  * lParam = (LPARAM)buffer;
  1439.  * endcode
  1440.  *
  1441.  * param len should be length of buffer minus 1, left space for ''
  1442.  * param buffer string buffer
  1443.  *
  1444.  *
  1445.  * return length of title
  1446.  * note Implemented for TextEdit control.
  1447.  */
  1448. #define EM_GETTITLETEXT         0xF0DD
  1449. /**
  1450.  * def EM_SETTIPTEXT
  1451.  * brief Sets the tip text displayed when content is empty. 
  1452.  *
  1453.  * code
  1454.  * EM_SETTIPTEXT
  1455.  * const char *buffer;
  1456.  * int len;
  1457.  *
  1458.  * wParam = len;
  1459.  * lParam = (LPARAM)buffer;
  1460.  * endcode
  1461.  *
  1462.  */
  1463. #define EM_SETTIPTEXT           0xF0DE
  1464. /**
  1465.  * def EM_GETTIPTEXT
  1466.  * brief Gets the tip text displayed when content is empty. 
  1467.  *
  1468.  * code
  1469.  * EM_GETTIPTEXT
  1470.  * const char *buffer;
  1471.  * int len;
  1472.  *
  1473.  * wParam = len;
  1474.  * lParam = (LPARAM)buffer;
  1475.  * endcode
  1476.  *
  1477.  * param len should be length of buffer minus 1, left space for ''
  1478.  * param buffer string buffer
  1479.  *
  1480.  * return length of tip text
  1481.  */
  1482. #define EM_GETTIPTEXT           0xF0DF
  1483. #define EM_MSGMAX               0xF0E0
  1484.     /** @} end of ctrl_edit_msgs */
  1485.     /**
  1486.      * defgroup ctrl_edit_ncs Notification codes of edit control
  1487.      * @{
  1488.      */
  1489. #define EN_ERRSPACE         255
  1490. /**
  1491.  * def EN_CLICKED
  1492.  * brief Notifies a click in an edit control.
  1493.  *
  1494.  * An edit control sends the EN_CLICKED notification code when the user clicks
  1495.  * in an edit control.
  1496.  */
  1497. #define EN_CLICKED          0x0001
  1498. /**
  1499.  * def EN_DBLCLK
  1500.  * brief Notifies a double click in an edit control.
  1501.  *
  1502.  * An edit control sends the EN_CLICKED notification code when the user 
  1503.  * double clicks in an edit control.
  1504.  */
  1505. #define EN_DBLCLK           0x0002
  1506. /**
  1507.  * def EN_SETFOCUS
  1508.  * brief Notifies the receipt of the input focus.
  1509.  *
  1510.  * The EN_SETFOCUS notification code is sent when an edit control receives 
  1511.  * the input focus.
  1512.  */
  1513. #define EN_SETFOCUS         0x0100
  1514. /**
  1515.  * def EN_KILLFOCUS
  1516.  * brief Notifies the lost of the input focus.
  1517.  *
  1518.  * The EN_KILLFOCUS notification code is sent when an edit control loses 
  1519.  * the input focus.
  1520.  */
  1521. #define EN_KILLFOCUS        0x0200
  1522. /**
  1523.  * def EN_CHANGE
  1524.  * brief Notifies that the text is altered.
  1525.  *
  1526.  * An edit control sends the EN_CHANGE notification code when the user takes 
  1527.  * an action that may have altered text in an edit control.
  1528.  */
  1529. #define EN_CHANGE           0x0300
  1530. #define EN_UPDATE           0x0400
  1531. /**
  1532.  * def EN_MAXTEXT
  1533.  * brief Notifies reach of maximum text limitation.
  1534.  *
  1535.  * The EN_MAXTEXT notification message is sent when the current text 
  1536.  * insertion has exceeded the specified number of characters for the edit control.
  1537.  */
  1538. #define EN_MAXTEXT          0x0501
  1539. #define EN_HSCROLL          0x0601
  1540. #define EN_VSCROLL          0x0602
  1541. /**
  1542.  * def EN_ENTER
  1543.  * brief Notifies the user has type the ENTER key in a single-line edit control.
  1544.  */
  1545. #define EN_ENTER            0x0700
  1546.     /** @} end of ctrl_edit_ncs */
  1547. /* Edit control EM_SETMARGIN parameters */
  1548. /**
  1549.  * def EC_LEFTMARGIN
  1550.  * brief Value of wParam. Specifies the margins to set.
  1551.  */
  1552. #define EC_LEFTMARGIN       0x0001
  1553. /**
  1554.  * def EC_RIGHTMARGIN
  1555.  * brief Value of wParam. Specifies the margins to set.
  1556.  */
  1557. #define EC_RIGHTMARGIN      0x0002
  1558. /**
  1559.  * def EC_USEFONTINFO
  1560.  * brief Value of wParam. Specifies the margins to set.
  1561.  */
  1562. #define EC_USEFONTINFO      0xffff
  1563. /* wParam of EM_GET/SETIMESTATUS  */
  1564. /**
  1565.  * def EMSIS_COMPOSITIONSTRING
  1566.  * brief Indicates the type of status to retrieve.
  1567.  */
  1568. #define EMSIS_COMPOSITIONSTRING        0x0001
  1569. /* lParam for EMSIS_COMPOSITIONSTRING  */
  1570. /**
  1571.  * def EIMES_GETCOMPSTRATONCE
  1572.  * brief lParam for EMSIS_COMPOSITIONSTRING.
  1573.  */
  1574. #define EIMES_GETCOMPSTRATONCE         0x0001
  1575. /**
  1576.  * def EIMES_CANCELCOMPSTRINFOCUS
  1577.  * brief lParam for EMSIS_COMPOSITIONSTRING.
  1578.  */
  1579. #define EIMES_CANCELCOMPSTRINFOCUS     0x0002
  1580. /**
  1581.  * def EIMES_COMPLETECOMPSTRKILLFOCUS
  1582.  * brief lParam for EMSIS_COMPOSITIONSTRING.
  1583.  */
  1584. #define EIMES_COMPLETECOMPSTRKILLFOCUS 0x0004
  1585.     /** @} end of ctrl_edit */
  1586. #endif /* _CTRL_EDIT || _CTRL_MEDIT */
  1587. /****** Progress Bar Control *************************************************/
  1588. #ifdef _CTRL_PROGRESSBAR
  1589.     /**
  1590.      * defgroup ctrl_progbar ProgressBar control
  1591.      * @{
  1592.      */
  1593. /**
  1594.  * def CTRL_PROGRESSBAR
  1595.  * brief The class name of progressbar control.
  1596.  */
  1597. #define CTRL_PROGRESSBAR        ("progressbar")
  1598. #define PB_OKAY                 0
  1599. #define PB_ERR                  -1
  1600.     /**
  1601.      * defgroup ctrl_progbar_styles Styles of progressbar control
  1602.      * @{
  1603.      */
  1604. /**
  1605.  * def PBS_NOTIFY
  1606.  * brief Notifies the parent window.
  1607.  * 
  1608.  * Sends the parent window notification messages when 
  1609.  * the user clicks or double-clicks the control.
  1610.  */
  1611. #define PBS_NOTIFY              0x0001L
  1612. /**
  1613.  * def PBS_VERTICAL
  1614.  * brief Creates progressbar vertically.
  1615.  */
  1616. #define PBS_VERTICAL            0x0002L
  1617.     /** @} end of ctrl_progbar_styles */
  1618.     /**
  1619.      * defgroup ctrl_progbar_msgs Messages of progressbar control
  1620.      * @{
  1621.      */
  1622. /**
  1623.  * def PBM_SETRANGE
  1624.  * brief Sets the limits of the range.
  1625.  *
  1626.  * Sets the upper and lower limits of the progress bar control's range, 
  1627.  * and redraws the bar to reflect the new ranges.
  1628.  *
  1629.  * code
  1630.  * PBM_SETRANGE
  1631.  * int min, max;
  1632.  *
  1633.  * wParam = (WPARAM)min;
  1634.  * lParam = (LPARAM)max;
  1635.  * endcode
  1636.  *
  1637.  * param min The lower limit of the progress bar.
  1638.  * param max The upper limit of the progress bar.
  1639.  *
  1640.  * return PB_OKAY on success, else PB_ERR.
  1641.  */
  1642. #define PBM_SETRANGE            0xF0A0
  1643. /**
  1644.  * def PBM_SETSTEP
  1645.  * brief Specifies the step increment for a progress bar control.
  1646.  *
  1647.  * code
  1648.  * PBM_SETSTEP
  1649.  * int stepinc;
  1650.  *
  1651.  * wParam = (WPARAM)stepinc;
  1652.  * lParam = 0;
  1653.  * endcode
  1654.  *
  1655.  * param stepinc Step increment for a progress bar control.
  1656.  * return PB_OKAY on success, else PB_ERR.
  1657.  */
  1658. #define PBM_SETSTEP             0xF0A1
  1659. /**
  1660.  * def PBM_SETPOS
  1661.  * brief Sets the progress bar control's current position.
  1662.  *
  1663.  * Sets the progress bar control's current position as specified by nPos, 
  1664.  * and redraw the bar to reflect the new position.
  1665.  *
  1666.  * code
  1667.  * PBM_SETPOS
  1668.  * int nPos;
  1669.  *
  1670.  * wParam = (WPARAM)nPos;
  1671.  * lParam = 0;
  1672.  * endcode
  1673.  *
  1674.  * param nPos The progress bar control's current position.
  1675.  * return Always be PB_OKAY.
  1676.  */
  1677. #define PBM_SETPOS              0xF0A2
  1678. /**
  1679.  * def PBM_DELTAPOS
  1680.  * brief Advances the progress bar control's current position. 
  1681.  *
  1682.  * Advances the progress bar control's current position as specified by posInc, 
  1683.  * and redraw the bar to reflect the new position.
  1684.  *
  1685.  * code
  1686.  * PBM_DELTAPOS
  1687.  * int posInc;
  1688.  *
  1689.  * wParam = (WPARAM)posInc;
  1690.  * lParam = 0;
  1691.  * endcode
  1692.  *
  1693.  * param posInc The progress bar control's position increment.
  1694.  * return Always be PB_OKAY.
  1695.  */
  1696. #define PBM_DELTAPOS            0xF0A3
  1697. /**
  1698.  * def PBM_STEPIT
  1699.  * brief Advances the current position by the step increment.
  1700.  *
  1701.  * Advances the current position for a progress bar control by 
  1702.  * the step increment, and redraw the bar to reflect the new position.
  1703.  *
  1704.  * code
  1705.  * PBM_STEPIT
  1706.  *
  1707.  * wParam = 0;
  1708.  * lParam = 0;
  1709.  * endcode
  1710.  *
  1711.  * return Always be PB_OKAY.
  1712.  */
  1713. #define PBM_STEPIT              0xF0A4
  1714. #define PBM_MSGMAX              0xF0B0
  1715.     /** @} end of ctrl_progbar_msgs */
  1716.     /**
  1717.      * defgroup ctrl_progbar_ncs Notification codes of progressbar control
  1718.      * @{
  1719.      */
  1720. /**
  1721.  * def PBN_REACHMAX
  1722.  * brief Notifies reach of maximum limit.
  1723.  *
  1724.  * The PBN_REACHMAX notification code is sent when the progressbar reachs its maximum limit.
  1725.  */
  1726. #define PBN_REACHMAX            1
  1727. /**
  1728.  * def PBN_REACHMIN
  1729.  * brief Notifies reach of minimum limit.
  1730.  *
  1731.  * The PBN_REACHMIN notification code is sent when the progressbar reachs its minimum limit.
  1732.  */
  1733. #define PBN_REACHMIN            2
  1734.     /** @} end of ctrl_progbar_ncs */
  1735.     /** @} end of ctrl_progbar */
  1736. #endif /* _CTRL_PROGRESSBAR */
  1737. /****** List Box Control *****************************************************/
  1738. #ifdef _CTRL_LISTBOX
  1739.     /**
  1740.      * defgroup ctrl_listbox ListBox control
  1741.      *
  1742.      *
  1743.      * @{
  1744.      */
  1745. /**
  1746.  * def CTRL_LISTBOX
  1747.  * brief The class name of listbox control.
  1748.  */
  1749. #define CTRL_LISTBOX        ("listbox")
  1750. /* Listbox return value */
  1751. #define LB_OKAY                 0
  1752. #define LB_ERR                  (-1)
  1753. #define LB_ERRSPACE             (-2)
  1754. #define CMFLAG_BLANK            0x0000
  1755. #define CMFLAG_CHECKED          0x0001
  1756. #define CMFLAG_PARTCHECKED      0x0002
  1757. #define CMFLAG_MASK             0x000F
  1758. #define IMGFLAG_BITMAP          0x0010
  1759. /** Structrue of the listbox item info */
  1760. typedef struct _LISTBOXITEMINFO
  1761. {
  1762.     /** Item string */
  1763.     char* string;
  1764.     /** 
  1765.      * Check mark and image flag. It can be one of the following values:
  1766.      * - CMFLAG_BLANK
  1767.      *   The item is blank.
  1768.      * - CMFLAG_CHECKED
  1769.      *   The item is checked.
  1770.      * - CMFLAG_PARTCHECKED
  1771.      *   The item is partly checked.
  1772.      *
  1773.      * For LBS_ICON list box, if you want to display bitmap other than icon, 
  1774.      * you can OR'd a cmFlag whit a IMGFLAG_BITMAP.
  1775.      */
  1776.     DWORD   cmFlag;         /* check mark flag */
  1777.     /** Handle to the icon (or pointer to bitmap object) of the item */
  1778.     HICON   hIcon;          /* handle to icon */
  1779. } LISTBOXITEMINFO;
  1780. /** 
  1781.  * var typedef LISTBOXITEMINFO* PLISTBOXITEMINFO;
  1782.  * brief Data type of the pointer to a LISTBOXITEMINFO.
  1783.  */
  1784. typedef LISTBOXITEMINFO* PLISTBOXITEMINFO;
  1785.     /**
  1786.      * defgroup ctrl_listbox_styles Styles of listbox control
  1787.      * @{
  1788.      */
  1789. /**
  1790.  * def LBS_NOTIFY
  1791.  * brief Notifies the parent window.
  1792.  *
  1793.  * Causes the list box to notify the list box parent window 
  1794.  * with a notification message when the user clicks or doubleclicks an item.
  1795.  */
  1796. #define LBS_NOTIFY              0x0001L
  1797. /**
  1798.  * def LBS_SORT
  1799.  * brief Sorts strings alphabetically.
  1800.  *
  1801.  * Causes the list box to sort strings alphabetically that are 
  1802.  * added to the list box with an LB_ADDSTRING message.
  1803.  */
  1804. #define LBS_SORT                0x0002L
  1805. /**
  1806.  * def LBS_MULTIPLESEL
  1807.  * brief Causes the list box to allow the user to select multiple items.
  1808.  */
  1809. #define LBS_MULTIPLESEL         0x0008L
  1810. /**
  1811.  * def LBS_CHECKBOX
  1812.  * brief Displays a check box in an item.
  1813.  */
  1814. #define LBS_CHECKBOX            0x1000L
  1815. /**
  1816.  * def LBS_USEICON
  1817.  * brief Displays an icon or bitmap in an item.
  1818.  */
  1819. #define LBS_USEICON             0x2000L
  1820. /**
  1821.  * def LBS_AUTOCHECK
  1822.  * brief If the list box has LBS_CHECKBOX style, this
  1823.  *        style tell the box to auto-switch the check box between 
  1824.  *        checked or un-checked when the user click the check mark box of an item.
  1825.  */
  1826. #define LBS_AUTOCHECK           0x4000L
  1827. #define LBS_AUTOCHECKBOX        (LBS_CHECKBOX | LBS_AUTOCHECK)
  1828. /**
  1829.  * def LBS_SBALWAYS
  1830.  * brief The list box with LBS_SBALWAYS style will always show vertical scrollbar.
  1831.  */
  1832. #define LBS_SBALWAYS            0x8000L
  1833. #define LBS_OWNERDRAWFIXED      0x0010L
  1834. #define LBS_OWNERDRAWVARIABLE   0x0020L
  1835. #define LBS_USETABSTOPS         0x0080L
  1836. #define LBS_MULTICOLUMN         0x0200L
  1837. #define LBS_WANTKEYBOARDINPUT   0x0400L
  1838. #define LBS_NOREDRAW            0x0004L
  1839. #define LBS_HASSTRINGS          0x0040L
  1840. #define LBS_NOINTEGRALHEIGHT    0x0100L
  1841. #define LBS_EXTENDEDSEL         0x0800L
  1842.     /** @} end of ctrl_listbox_styles */
  1843.     /**
  1844.      * defgroup ctrl_listbox_msgs Messages of listbox control
  1845.      * @{
  1846.      */
  1847. /**
  1848.  * def LB_ADDSTRING
  1849.  * brief Appends the specified string.
  1850.  *
  1851.  * An application sends an LB_ADDSTRING message to append an item
  1852.  * specified in the lParam parameter to a list box.
  1853.  *
  1854.  * For a text-only list box:
  1855.  *
  1856.  * code
  1857.  * LB_ADDSTRING
  1858.  * const char* text;
  1859.  *
  1860.  * wParam = 0;
  1861.  * lParam = (LPARAM)text;
  1862.  * endcode
  1863.  *
  1864.  * param text Pointer to the string of the item to be added.
  1865.  *
  1866.  * For a list box with check box or icon 
  1867.  * (with LBS_CHECKBOX or LBS_USEICON styles):
  1868.  *
  1869.  * code
  1870.  * LB_ADDSTRING
  1871.  * PLISTBOXITEMINFO plbii;
  1872.  *
  1873.  * wParam = 0;
  1874.  * lParam = (LPARAM)plbii;
  1875.  * endcode
  1876.  *
  1877.  * param plbii Pointer to the listbox item info to be added.
  1878.  *
  1879.  * return The index of the new item on success, else the one of
  1880.  *         the following error codes:
  1881.  *
  1882.  *         - LB_ERRSPACE    No memory can be allocated for new item.
  1883.  *         - LB_ERR         Invalid passed arguments.
  1884.  *
  1885.  */
  1886. #define LB_ADDSTRING            0xF180
  1887. /**
  1888.  * def LB_INSERTSTRING
  1889.  * brief Inserts an item to the list box.
  1890.  *
  1891.  * An application sends an LB_INSERTSTRING message to insert an item 
  1892.  * into a list box. Unlike LB_ADDSTRING message, the LB_INSERTSTRING
  1893.  * message do not cause the list to be sorted.
  1894.  *
  1895.  * For a text-only list box:
  1896.  *
  1897.  * code
  1898.  * LB_INSERTSTRING
  1899.  * const char* text;
  1900.  *
  1901.  * wParam = index;
  1902.  * lParam = (LPARAM)text;
  1903.  * endcode
  1904.  *
  1905.  * param index Specifies the index of the position at which to insert the item.
  1906.  * param text Pointer to the string of the item to be inserted.
  1907.  *
  1908.  * For a list box with check box or icon 
  1909.  * (with LBS_CHECKBOX or LBS_USEICON styles):
  1910.  *
  1911.  * code
  1912.  * LB_INSERTSTRING
  1913.  * int index;
  1914.  * PLISTBOXITEMINFO plbii;
  1915.  *
  1916.  * wParam = (WPARAM)index;
  1917.  * lParam = (LPARAM)plbii;
  1918.  * endcode
  1919.  * 
  1920.  * param index Specifies the index of the position at which to insert the item.
  1921.  * param plbii Pointer to the listbox item info to be inserted.
  1922.  *
  1923.  * return The index of the new item on success, else the one of
  1924.  *         the following error codes:
  1925.  *
  1926.  *         - LB_ERRSPACE    No memory can be allocated for new item.
  1927.  *         - LB_ERR         Invalid passed arguments.
  1928.  *
  1929.  */
  1930. #define LB_INSERTSTRING         0xF181
  1931. /**
  1932.  * def LB_DELETESTRING
  1933.  * brief Removes an item from the list box.
  1934.  *
  1935.  * An application sends an LB_DELETESTRING message to a list box 
  1936.  * to remove from the list box.
  1937.  *
  1938.  * code
  1939.  * LB_DELETESTRING
  1940.  * int delete;
  1941.  *
  1942.  * wParam = (WPARAM)delete;
  1943.  * lParam = 0;
  1944.  * endcode
  1945.  *
  1946.  * param delete The index of the listbox item to be deleted.
  1947.  *
  1948.  * return LB_OKAY on success, else LB_ERR to indicate you passed an invalid index.
  1949.  */
  1950. #define LB_DELETESTRING         0xF182
  1951. #define LB_SELITEMRANGEEX       0xF183
  1952. /**
  1953.  * def LB_RESETCONTENT
  1954.  * brief Removes the contents of a list box.
  1955.  *
  1956.  * An application sends an LB_RESETCONTENT message to remove the all items
  1957.  * in a list box.
  1958.  *
  1959.  * code
  1960.  * LB_RESETCONTENT
  1961.  *
  1962.  * wParam = 0;
  1963.  * lParam = 0;
  1964.  * endcode
  1965.  *
  1966.  * return Always be zero.
  1967.  */
  1968. #define LB_RESETCONTENT         0xF184
  1969. /**
  1970.  * def LB_GETSEL
  1971.  * brief Gets the selected state for an specified item.
  1972.  *
  1973.  * An application sends an LB_GETSEL message to a list box to get the selected 
  1974.  * state for an item specified in the wParam parameter.
  1975.  *
  1976.  * code
  1977.  * LB_GETSEL
  1978.  * int index;
  1979.  *
  1980.  * wParam = (WPARAM)index;
  1981.  * lParam = 0;
  1982.  * endcode
  1983.  *
  1984.  * param index The index of the specified item.
  1985.  *
  1986.  * return The state of the specified item:
  1987.  *         - 0n        Not selected.
  1988.  *         - >0n       Selected.
  1989.  *         - LB_ERRn   Invalid index.
  1990.  */
  1991. #define LB_GETSEL               0xF187
  1992. /**
  1993.  * def LB_SETSEL
  1994.  * brief Selects an item in a multiple-selection list box.
  1995.  *
  1996.  * An application sends an LB_SETSEL message to select an item 
  1997.  * in a multiple-selection list box and scroll it into view if necessary.
  1998.  *
  1999.  * code
  2000.  * LB_SETSEL
  2001.  * int index, sel
  2002.  *
  2003.  * wParam = (WPARAM)sel;
  2004.  * lParam = (LPARAM)index;
  2005.  * endcode
  2006.  *
  2007.  * param sel Indicates the changes to be made to the listbox item, 
  2008.  *        can be one of the following values:
  2009.  *             - -1n      If the item has been selected, makes it unselected, vice versa.
  2010.  *             - 0n       Makes the item unselected. 
  2011.  *             - othern   Makes the item selected. 
  2012.  * param index The index of the item.
  2013.  *
  2014.  * return LB_OKAY on success, else LB_ERR to indicate you passed an invalid index
  2015.  *         or the list box has no LBS_MULTIPLESEL style.
  2016.  */
  2017. #define LB_SETSEL               0xF185
  2018. /**
  2019.  * def LB_GETCURSEL
  2020.  * brief Gets the index of the currently selected or highlighted item.
  2021.  *
  2022.  * An application sends an LB_GETCURSEL message to a list box to get the index of 
  2023.  * the currently selected item, if there is one, in a single-selection list box.
  2024.  * For multiple-selection list box, appliction send an LB_GETCURSEL message to a 
  2025.  * list box to get the index of the current highlighted item.
  2026.  *
  2027.  * code
  2028.  * LB_GETCURSEL
  2029.  *
  2030.  * wParam = 0;
  2031.  * lParam = 0;
  2032.  * endcode
  2033.  *
  2034.  * return The index of the currently selected item for single-selection list box;
  2035.  *         Eles the index of the highlighted item for multiple-selection list box.
  2036.  */
  2037. #define LB_GETCURSEL            0xF188
  2038. /**
  2039.  * def LB_SETCURSEL
  2040.  * brief Selects an item.
  2041.  *
  2042.  * An application sends an LB_SETCURSEL message to a list box to 
  2043.  * select an item and scroll it into view, if necessary.
  2044.  *
  2045.  * code
  2046.  * LB_SETCURSEL
  2047.  * int cursel;
  2048.  *
  2049.  * wParam = (WPARAM)cursel;
  2050.  * lParam = 0;
  2051.  * endcode
  2052.  *
  2053.  * param cursel The index of the item to be selected and hilighted.
  2054.  *
  2055.  * return The old index of the item selected on error, else LB_ERR to
  2056.  *         indicate an error occurred.
  2057.  */
  2058. #define LB_SETCURSEL            0xF186
  2059. /**
  2060.  * def LB_GETTEXT
  2061.  * brief Retrieves the text of an item in list box.
  2062.  *
  2063.  * An application sends an LB_GETTEXT message to a list box to retrieve the text
  2064.  * of an item.
  2065.  *
  2066.  * code
  2067.  * LB_GETTEXT
  2068.  * int index;
  2069.  * char *string;
  2070.  *
  2071.  * wParam = (WPARAM)index;
  2072.  * lParam = (LPARAM)string;
  2073.  * endcode
  2074.  *
  2075.  * param index The index of the selected item.
  2076.  * param string Pointer to the string buffer. The buffer should be large enough
  2077.  *        to contain the text of the item.
  2078.  *
  2079.  * return One of the following values:
  2080.  *         - LB_OKAYn  Success.
  2081.  *         - LB_ERRn   Invalid item index.
  2082.  *
  2083.  * sa LB_GETTEXTLEN
  2084.  */
  2085. #define LB_GETTEXT              0xF189
  2086. /**
  2087.  * def LB_GETTEXTLEN
  2088.  * brief Gets the length of text of item specified in a list box.
  2089.  *
  2090.  * An application sends an LB_GETTEXTLEN message to a list box to get the length 
  2091.  * of text of the item specified in the a wParam parameter.
  2092.  *
  2093.  * code
  2094.  * LB_GETTEXTLEN
  2095.  * int index;
  2096.  *
  2097.  * wParam = (WPARAM)index;
  2098.  * lParam = 0;
  2099.  * endcode
  2100.  *
  2101.  * param index The index of the specified item.
  2102.  *
  2103.  * return The length of the strings on success, else LB_ERR to indicate invalid index.
  2104.  */
  2105. #define LB_GETTEXTLEN           0xF18A
  2106. /**
  2107.  * def LB_GETCOUNT
  2108.  * brief Gets the number of items in the list box.
  2109.  *
  2110.  * An application sends an LB_GETCOUNT message to a list box to get the number 
  2111.  * of items in the list box.
  2112.  *
  2113.  * code
  2114.  * LB_GETCOUNT
  2115.  *
  2116.  * wParam = 0;
  2117.  * lParam = 0;
  2118.  * endcode
  2119.  *
  2120.  * return The number of items in the listbox.
  2121.  */
  2122. #define LB_GETCOUNT             0xF18B
  2123. #define LB_SELECTSTRING         0xF18C
  2124. #define LB_DIR                  0xF18D
  2125. /**
  2126.  * def LB_GETTOPINDEX
  2127.  * brief Gets the index to the first visible item in the list box.
  2128.  *
  2129.  * An application sends an LB_GETTOPINDEX message to get the index to the first 
  2130.  * visible item in the list box. Initially, the first visible item is item 0, but 
  2131.  * this changes as the list box is scrolled. 
  2132.  *
  2133.  * code
  2134.  * LB_GETTOPINDEX
  2135.  *
  2136.  * wParam = 0;
  2137.  * lParam = 0;
  2138.  * endcode
  2139.  *
  2140.  * return The index of the first visible item in the listbox.
  2141.  */
  2142. #define LB_GETTOPINDEX          0xF18E
  2143. /**
  2144.  * def LB_FINDSTRING
  2145.  * brief Searchs a specified string.
  2146.  *
  2147.  * An application sends an LB_FINDSTRING message to search a list box for an item 
  2148.  * that begins with the characters specified in the lParam parameter. The wParam 
  2149.  * parameter specifies the zero-based index of the item before the first item to 
  2150.  * be searched; The lParam parameter specifies a pointer to a null-terminated 
  2151.  * string that contains the prefix to search for.
  2152.  *
  2153.  * code
  2154.  * LB_FINDSTRING
  2155.  * int index;
  2156.  * char *string;
  2157.  *
  2158.  * wParam = (WPARAM)index;
  2159.  * lParam = (LPARAM)string;
  2160.  * endcode
  2161.  *
  2162.  * param index The index of the item to be searched.
  2163.  * param string The string of the item to be searched.
  2164.  *
  2165.  * return The index of the matched item; LB_ERR for not found.
  2166.  */
  2167. #define LB_FINDSTRING           0xF18F
  2168. /**
  2169.  * def LB_GETSELCOUNT
  2170.  * brief Gets the number of selected items in a multiple-selection list box.
  2171.  *
  2172.  * An application sends an LB_GETSELCOUNT message to a list box to get the number 
  2173.  * of selected items in a multiple-selection list box.
  2174.  *
  2175.  * code
  2176.  * LB_GETSELCOUNT
  2177.  *
  2178.  * wParam = 0;
  2179.  * lParam = 0;
  2180.  * endcode
  2181.  *
  2182.  * return The number of selected items in the multiple-selection listbox.
  2183.  */
  2184. #define LB_GETSELCOUNT          0xF190
  2185. /**
  2186.  * def LB_GETSELITEMS
  2187.  * brief Gets the numbers of selected items.
  2188.  *
  2189.  * An application sends an LB_GETSELITEMS message to a list box to fill a buffer 
  2190.  * with an array of integers that specify the item numbers of selected items in 
  2191.  * a multiple-selection list box.
  2192.  *
  2193.  * code
  2194.  * LB_GETSELITEMS
  2195.  * int nItem;
  2196.  * int *pInt;
  2197.  *
  2198.  * wParam = (WPARAM)nItem;
  2199.  * lParam = (LPARAM)pInt;
  2200.  * endcode
  2201.  *
  2202.  * param nItem The maximum integer numbers wanted.
  2203.  * param pInt The buffer of an array of integers to save the indices of selected items.
  2204.  *
  2205.  * return The number of selected items.
  2206.  */
  2207. #define LB_GETSELITEMS          0xF191
  2208. #define LB_SETTABSTOPS          0xF192
  2209. #define LB_GETHORIZONTALEXTENT  0xF193
  2210. #define LB_SETHORIZONTALEXTENT  0xF194
  2211. #define LB_SETCOLUMNWIDTH       0xF195
  2212. #define LB_ADDFILE              0xF196
  2213. /**
  2214.  * def LB_SETTOPINDEX
  2215.  * brief Ensures that a particular item in it is visible.
  2216.  *
  2217.  * An application sends an LB_SETTOPINDEX message to a list box to ensure that a 
  2218.  * particular item in it is visible. The item is specified in the wParam parameter. 
  2219.  * The list box scrolls so that either the specified item appears at the top of 
  2220.  * the list box or the maximum scroll range has been reached.
  2221.  * 
  2222.  * code
  2223.  * LB_SETTOPINDEX
  2224.  * int index;
  2225.  *
  2226.  * wParam = (WPARAM)index;
  2227.  * lParam = 0;
  2228.  * endcode
  2229.  *
  2230.  * param index The index of the particular item to be set.
  2231.  *
  2232.  * return Always be zero.
  2233.  */
  2234. #define LB_SETTOPINDEX          0xF197
  2235. /**
  2236.  * def LB_GETITEMRECT
  2237.  * brief Retrieves the dimensions of the rectangle.
  2238.  *
  2239.  * An application sends an LB_GETITEMRECT message to a list box to retrieve 
  2240.  * the dimensions of the rectangle that bounds an item as it is currently 
  2241.  * displayed in the list box window. The item is specified in the wParam 
  2242.  * parameter, and a pointer to a RECT structure is given in the lParam parameter.
  2243.  *
  2244.  * code
  2245.  * LB_GETITEMRECT
  2246.  * int index;
  2247.  * RECT *rcItem;
  2248.  *
  2249.  * wParam = (WPARAM)index;
  2250.  * lParam = (LPARAM)rcItem;
  2251.  * endcode
  2252.  *
  2253.  * param index The index of the specified item.
  2254.  * param rcItem Pointer to the buffer used for storing the item rect;
  2255.  *
  2256.  * return LB_OKAY on success; LB_ERR on error.
  2257.  */
  2258. #define LB_GETITEMRECT          0xF198
  2259. /**
  2260.  * def LB_GETITEMDATA
  2261.  * brief Gets item data in a list box if the box has LBS_CHECKBOX
  2262.  *          and/or LBS_USEICON styles.
  2263.  * 
  2264.  * An application sends LB_GETITEMDATA message to a list box to retrive the
  2265.  * check box flag and the handle of icon. Note that the text of the item
  2266.  * will not be returned, i.e., the field of a string of LISTBOXITEMINFO
  2267.  * structure will be ignored.
  2268.  *
  2269.  * code
  2270.  * LB_GETITEMDATA
  2271.  * int index;
  2272.  * PLISTBOXITEMINFO plbii;
  2273.  *
  2274.  * wParam = (WPARAM)index;
  2275.  * lParam = (LPARAM)plbii;
  2276.  * endcode
  2277.  *
  2278.  * param index The index of the specified item.
  2279.  * param plbii Pointer to the buffer used for storing the item data of the 
  2280.  *         specified item.
  2281.  *
  2282.  * return LB_OKAY on success; LB_ERR on error.
  2283.  *
  2284.  * sa LISTBOXITEMINFO
  2285.  */
  2286. #define LB_GETITEMDATA          0xF199
  2287. /**
  2288.  * def LB_SETITEMDATA
  2289.  * brief Sets item data in a list box if the box has LBS_CHECKBOX
  2290.  *          and/or LBS_USEICON styles.
  2291.  * 
  2292.  * An application sends LB_SETITEMDATA message to a list box to set the
  2293.  * check box flag and the handle of icon. Note that the text of the item
  2294.  * will not be changed, i.e., the field of a string of LISTBOXITEMINFO
  2295.  * structure will be ignored.
  2296.  *
  2297.  * code
  2298.  * LB_SETITEMDATA
  2299.  * int index;
  2300.  * PLISTBOXITEMINFO plbii;
  2301.  *
  2302.  * wParam = (WPARAM)index;
  2303.  * lParam = (LPARAM)plbii;
  2304.  * endcode
  2305.  *
  2306.  * param index The index of the specified item.
  2307.  * param plbii Pointer to the buffer used for setting the item info of the 
  2308.  *         specified item.
  2309.  *
  2310.  * return LB_OKAY on success; LB_ERR on error.
  2311.  *
  2312.  * sa LISTBOXITEMINFO
  2313.  */
  2314. #define LB_SETITEMDATA          0xF19A
  2315. #define LB_SELITEMRANGE         0xF19B
  2316. #define LB_SETANCHORINDEX       0xF19C
  2317. #define LB_GETANCHORINDEX       0xF19D
  2318. /**
  2319.  * def LB_SETCARETINDEX
  2320.  * brief Sets the focus rectangle to the item at the specified index.
  2321.  * 
  2322.  * An application sends an LB_SETCARETINDEX message to set the focus rectangle 
  2323.  * to the item at the specified index in a multiple-selection list box.
  2324.  *
  2325.  * code
  2326.  * LB_SETCARETINDEX
  2327.  * int index;
  2328.  *
  2329.  * wParam = (WPARAM)index;
  2330.  * lParam = 0;
  2331.  * endcode
  2332.  */
  2333. #define LB_SETCARETINDEX        0xF19E
  2334. /**
  2335.  * def LB_GETCARETINDEX
  2336.  * brief Determines the index of the item that has the focus rectangle.
  2337.  * 
  2338.  * An application sends an LB_GETCARETINDEX message to a list box to determine 
  2339.  * the index of the item that has the focus rectangle in a multiple-selection 
  2340.  * list box.
  2341.  *
  2342.  * code
  2343.  * LB_GETCARETINDEX
  2344.  *
  2345.  * wParam = 0;
  2346.  * lParam = 0;
  2347.  * endcode
  2348.  *
  2349.  * return The index of the item that has the focus rectangle.
  2350.  */
  2351. #define LB_GETCARETINDEX        0xF19F
  2352. /**
  2353.  * def LB_SETITEMHEIGHT
  2354.  * brief Sets the height of all items.
  2355.  * 
  2356.  * An application sends an LB_SETITEMHEIGHT message to set the height of 
  2357.  * all items in a list box. 
  2358.  *
  2359.  * code
  2360.  * LB_SETITEMHEIGHT
  2361.  * int itemHeight;
  2362.  *
  2363.  * wParam = 0;
  2364.  * lParam = (LPARAM)itemHeight;
  2365.  * endcode
  2366.  *
  2367.  * param itemHeight New height of item.
  2368.  *
  2369.  * return The effective height of item.
  2370.  */
  2371. #define LB_SETITEMHEIGHT        0xF1A0
  2372. /**
  2373.  * def LB_GETITEMHEIGHT
  2374.  * brief Gets the height in pixels of an item specified in the wParam parameter.
  2375.  * 
  2376.  * An application sends an LB_GETITEMHEIGHT message to a list box to get the 
  2377.  * height in pixels of an item specified in the wParam parameter.
  2378.  *
  2379.  * code
  2380.  * LB_GETITEMHEIGHT
  2381.  *
  2382.  * wParam = 0;
  2383.  * lParam = 0;
  2384.  * endcode
  2385.  *
  2386.  * return The height of item in the listbox.
  2387.  */
  2388. #define LB_GETITEMHEIGHT        0xF1A1
  2389. /**
  2390.  * def LB_FINDSTRINGEXACT
  2391.  * brief Searchs for an item that exactly matches the characters specified.
  2392.  * 
  2393.  * An application sends an LB_FINDSTRINGEXACT message to a list box to search 
  2394.  * it for an item that exactly matches the characters specified in the lParam parameter.
  2395.  *
  2396.  * code
  2397.  * LB_FINDSTRINGEXACT
  2398.  * int index;
  2399.  * const char *string;
  2400.  *
  2401.  * wParam = (WPARAM)index;
  2402.  * lParam = (LPARAM)string;
  2403.  * endcode
  2404.  *
  2405.  * param index The index of the specified item.
  2406.  * param string The string of the item to be searched for.
  2407.  *
  2408.  * return The index of the found item on success, else LB_ERR.
  2409.  */
  2410. #define LB_FINDSTRINGEXACT      0xF1A2
  2411. #define LB_SETLOCALE            0xF1A5
  2412. #define LB_GETLOCALE            0xF1A6
  2413. #define LB_SETCOUNT             0xF1A7
  2414. #define LB_INITSTORAGE          0xF1A8
  2415. #define LB_ITEMFROMPOINT        0xF1A9
  2416. /**
  2417.  * def LB_SETTEXT
  2418.  * brief Sets text of the specified item.
  2419.  *
  2420.  * code
  2421.  * LB_SETTEXT
  2422.  * int index;
  2423.  * const char *string;
  2424.  *
  2425.  * wParam = (WPARAM)index;
  2426.  * lParam = (LPARAM)string;
  2427.  * endcode
  2428.  *
  2429.  * param index The index of the specified item.
  2430.  * param string The string of the item to be set.
  2431.  *
  2432.  * return One of the following values:
  2433.  *          - LB_OKAYn Success
  2434.  *          - LB_ERRn  Invalid item index or memory allocation error.
  2435.  */
  2436. #define LB_SETTEXT              0xF1AA
  2437. /**
  2438.  * def LB_GETCHECKMARK
  2439.  * brief Gets check mark status of an item.
  2440.  *
  2441.  * code
  2442.  * LB_GETCHECKMARK
  2443.  * int index;
  2444.  *
  2445.  * wParam = (WPARAM)index;
  2446.  * lParam = 0;
  2447.  * endcode
  2448.  *
  2449.  * param index The index of the specified item.
  2450.  *
  2451.  * return The check mark status of specified item on success; LB_ERR on error.
  2452.  *
  2453.  * retval LB_ERR               Invalid item index or the list box have no LBS_CHECKBOX style.
  2454.  * retval CMFLAG_CHECKED       The item is checked.
  2455.  * retval CMFLAG_PARTCHECKED   The item is partly checked.
  2456.  * retval CMFLAG_BLANK         The item is not checked.
  2457.  */
  2458. #define LB_GETCHECKMARK         0xF1AB
  2459. /**
  2460.  * def LB_SETCHECKMARK
  2461.  * brief Sets check mark status of an item.
  2462.  *
  2463.  * code
  2464.  * LB_SETCHECKMARK
  2465.  * int index, status;
  2466.  *
  2467.  * wParam = (WPARAM)index;
  2468.  * lParam = (LPARAM)status;
  2469.  * endcode
  2470.  *
  2471.  * param index The index of the specified item.
  2472.  * param status The new check mark status, can be one of the followings.
  2473.  *             - CMFLAG_CHECKEDn The item is checked.
  2474.  *             - CMFLAG_PARTCHECKEDn The item is partly checked.
  2475.  *
  2476.  * return One of the following values:
  2477.  *          - LB_OKAYn
  2478.  *              Success
  2479.  *          - LB_ERRn
  2480.  *              Invalid item index or this list box have no LBS_CHECKBOX style.
  2481.  */
  2482. #define LB_SETCHECKMARK         0xF1AC
  2483. /**
  2484.  * def LB_GETITEMADDDATA
  2485.  * brief Gets the 32-bit data value associated with an item.
  2486.  * 
  2487.  * An application sends an LB_GETITEMADDDATA message to a list box to get the 
  2488.  * 32-bit data value the list box has stored for the item with index of 
  2489.  * a wParam; By default this is zero. An application must set the 
  2490.  * item data value by sending an LB_SETITEMADDDATA message to the list box for 
  2491.  * this value to have meaning.
  2492.  *
  2493.  * code
  2494.  * LB_GETITEMADDDATA
  2495.  * int index;
  2496.  *
  2497.  * wParam = (WPARAM)index;
  2498.  * lParam = 0;
  2499.  * endcode
  2500.  *
  2501.  * param index The index of the specified item.
  2502.  *
  2503.  * return The 32-bit data value associated with an item on success, otherwise
  2504.  *         LB_ERR to indicate an error.
  2505.  */
  2506. #define LB_GETITEMADDDATA       0xF1AD
  2507. /**
  2508.  * def LB_SETITEMADDDATA
  2509.  * brief Associates a 32-bit data value with an item.
  2510.  *
  2511.  * An application sends an LB_SETITEMADDDATA message to associate a 32-bit data 
  2512.  * value specified in the a lParam parameter with an item in the list box.
  2513.  *
  2514.  * code
  2515.  * LB_SETITEMADDDATA
  2516.  * int index;
  2517.  * DWORD addData;
  2518.  *
  2519.  * wParam = (WPARAM)index;
  2520.  * lParam = (LPARAM)addData;
  2521.  * endcode
  2522.  *
  2523.  * param index The index of the specified item.
  2524.  * param addData the 32-bit data value which will associated with the item.
  2525.  *
  2526.  * return One of the following values:
  2527.  *          - LB_OKAYn         Success
  2528.  *          - LB_ERRn          Invalid item index
  2529.  */
  2530. #define LB_SETITEMADDDATA       0xF1AE
  2531. /**
  2532.  * def LB_SETSTRCMPFUNC
  2533.  * brief Sets the STRCMP function used to sort items.
  2534.  *
  2535.  * An application sends an LB_SETSTRCMPFUNC message to set a 
  2536.  * new STRCMP function to sort items.
  2537.  *
  2538.  * Note that you should send this message before adding 
  2539.  * any item to the list box control.
  2540.  *
  2541.  * code
  2542.  * static int my_strcmp (const char* s1, const char* s2, size_t n)
  2543.  * {
  2544.  *      ...
  2545.  *      return 0;
  2546.  * }
  2547.  *
  2548.  * LB_SETSTRCMPFUNC
  2549.  *
  2550.  * wParam = 0;
  2551.  * lParam = (LPARAM)my_strcmp;
  2552.  * endcode
  2553.  *
  2554.  * param my_strcmp Your own function to compare two strings.
  2555.  *
  2556.  * return One of the following values:
  2557.  *          - LB_OKAYn         Success
  2558.  *          - LB_ERRn          Not an empty list box.
  2559.  */
  2560. #define LB_SETSTRCMPFUNC        0xF1AF
  2561. #define LB_MSGMAX               0xF1B0
  2562.     /** @} end of ctrl_listbox_msgs */
  2563.     /**
  2564.      * defgroup ctrl_listbox_ncs Notification codes of listbox control
  2565.      * @{
  2566.      */
  2567. /**
  2568.  * def LBN_ERRSPACE
  2569.  * brief Indicates that memory is not enough.
  2570.  * 
  2571.  * A list box sends an LBN_ERRSPACE notification message to its parent window 
  2572.  * when it cannot allocate enough memory to complete the current operation.
  2573.  */
  2574. #define LBN_ERRSPACE            255
  2575. /**
  2576.  * def LBN_SELCHANGE
  2577.  * brief Indicates change due to mouse or keyboard user input.
  2578.  * 
  2579.  * A list box created with the LBS_NOTIFY style sends an LBN_SELCHANGE 
  2580.  * notification message to its parent window when the selection is about to 
  2581.  * change due to mouse or keyboard user input.
  2582.  */
  2583. #define LBN_SELCHANGE           1
  2584. /**
  2585.  * def LBN_DBLCLK
  2586.  * brief Indicates double click on an item.
  2587.  * 
  2588.  * A list box created with the LBS_NOTIFY style sends an LBN_DBLCLK notification 
  2589.  * message to its parent window when the user double-clicks a string in it.
  2590.  */
  2591. #define LBN_DBLCLK              2
  2592. /**
  2593.  * def LBN_SELCANCEL
  2594.  * brief Indicates cancel of the selection in the list box.
  2595.  * 
  2596.  * A list box created with the LBS_NOTIFY style sends an LBN_SELCANCEL 
  2597.  * notification message to its parent window when the user cancels the selection 
  2598.  * in the list box.
  2599.  */
  2600. #define LBN_SELCANCEL           3
  2601. /**
  2602.  * def LBN_SETFOCUS
  2603.  * brief Indicates gain of input focus.
  2604.  * 
  2605.  * A list box sends an LBN_SETFOCUS notification message to its parent window 
  2606.  * when the list box gains the input focus.
  2607.  */
  2608. #define LBN_SETFOCUS            4
  2609. /**
  2610.  * def LBN_KILLFOCUS
  2611.  * brief Indicates loss of input focus.
  2612.  * 
  2613.  * A list box sends an LBN_KILLFOCUS notification message to its parent window 
  2614.  * when the list box loses the input focus.
  2615.  */
  2616. #define LBN_KILLFOCUS           5
  2617. /**
  2618.  * def LBN_CLICKCHECKMARK
  2619.  * brief Indicates click on the check mark.
  2620.  */
  2621. #define LBN_CLICKCHECKMARK      6
  2622. /**
  2623.  * def LBN_CLICKED
  2624.  * brief Indicates click on the string.
  2625.  */
  2626. #define LBN_CLICKED             7
  2627. /**
  2628.  * def LBN_ENTER
  2629.  * brief Indicates the user has pressed the ENTER key.
  2630.  */
  2631. #define LBN_ENTER               8
  2632.     /** @} end of ctrl_listbox_ncs */
  2633.     /** @} end of ctrl_listbox */
  2634. #endif /* _CTRL_LISTBOX */
  2635. /****** Property Sheet Control ***********************************************/
  2636. #ifdef _CTRL_PROPSHEET
  2637.     /**
  2638.      * defgroup ctrl_propsheet PropertySheet control
  2639.      * @{
  2640.      */
  2641. /**
  2642.  * def CTRL_PROPSHEET
  2643.  * brief The class name of propsheet control.
  2644.  */
  2645. #define CTRL_PROPSHEET       ("propsheet")
  2646.     /**
  2647.      * defgroup ctrl_propsheet_styles Styles of propertysheet control
  2648.      * @{
  2649.      */
  2650. /**
  2651.  * def PSS_SIMPLE
  2652.  * brief A simple property sheet control. All tabs of the control
  2653.  *        will have the same width.
  2654.  */
  2655. #define PSS_SIMPLE                0x0000L
  2656. /**
  2657.  * def PSS_COMPACTTAB
  2658.  * brief Compact tab style. The width of a tab is adaptive to the tab title.
  2659.  */
  2660. #define PSS_COMPACTTAB            0x0001L
  2661.     /** @} end of ctrl_propsheet_styles */
  2662.     /**
  2663.      * defgroup ctrl_propsheet_msgs Messages of propertysheet control
  2664.      * @{
  2665.      */
  2666. #define PS_OKAY         0
  2667. #define PS_ERR          (-1)
  2668. /**
  2669.  * def PSM_GETACTIVEPAGE
  2670.  * brief Gets the handle of current active page.
  2671.  *
  2672.  * Sends this message to retreive the propsheet window's active page.
  2673.  *
  2674.  * code
  2675.  * PSM_GETACTIVEPAGE
  2676.  *
  2677.  * wParam = 0;
  2678.  * lParam = 0;
  2679.  * endcode
  2680.  *
  2681.  * return The handle to the active page; HWND_INVALID if no such a page.
  2682.  */
  2683. #define PSM_GETACTIVEPAGE         0xF1C0L
  2684. /**
  2685.  * def PSM_SETACTIVEINDEX
  2686.  * brief Changes the active page by index.
  2687.  *
  2688.  * Sends this message to change the propsheet window's active page.
  2689.  *
  2690.  * code
  2691.  * PSM_SETACTIVEINDEX
  2692.  * int page;
  2693.  *
  2694.  * wParam = (WPARAM)page;
  2695.  * lParam = 0;
  2696.  * endcode
  2697.  *
  2698.  * param page Index of the page to set.
  2699.  *
  2700.  * return PS_OKAY on success, otherwise PS_ERR.
  2701.  */
  2702. #define PSM_SETACTIVEINDEX         0xF1C2L
  2703. /**
  2704.  * def PSM_GETPAGE
  2705.  * brief Gets the handle of a page by index.
  2706.  *
  2707.  * Sends this message to retreive the handle to a page by index.
  2708.  *
  2709.  * code
  2710.  * PSM_GETPAGE
  2711.  * int index;
  2712.  *
  2713.  * wParam = index;
  2714.  * lParam = 0;
  2715.  * endcode
  2716.  *
  2717.  * param index The index of the page.
  2718.  *
  2719.  * return The handle to the page; HWND_INVALID if no such a page.
  2720.  */
  2721. #define PSM_GETPAGE               0xF1C3L
  2722. /**
  2723.  * def PSM_GETACTIVEINDEX
  2724.  * brief Gets the index of the current active page.
  2725.  *
  2726.  * Sends this message to retreive the index of the propsheet window's active page.
  2727.  *
  2728.  * code
  2729.  * PSM_GETACTIVEINDEX
  2730.  *
  2731.  * wParam = 0;
  2732.  * lParam = 0;
  2733.  * endcode
  2734.  *
  2735.  * return The index number of the active page.
  2736.  */
  2737. #define PSM_GETACTIVEINDEX        0xF1C4L
  2738. /**
  2739.  * def PSM_GETPAGEINDEX
  2740.  * brief Gets the index of a page by handle.
  2741.  *
  2742.  * Sends this message to retreive the index to a page by handle.
  2743.  *
  2744.  * code
  2745.  * PSM_GETPAGEINDEX
  2746.  * HWND hwnd;
  2747.  *
  2748.  * wParam = hwnd;
  2749.  * lParam = 0;
  2750.  * endcode
  2751.  *
  2752.  * param hwnd The handle of the page.
  2753.  *
  2754.  * return The index of the page; PS_ERR if no such a page.
  2755.  */
  2756. #define PSM_GETPAGEINDEX          0xF1C5L
  2757. /**
  2758.  * def PSM_GETPAGECOUNT
  2759.  * brief Gets the number of pages of the propsheet.
  2760.  *
  2761.  * Sends this message to retreive the number of pages currently in the propsheet.
  2762.  *
  2763.  * code
  2764.  * PSM_GETPAGECOUNT
  2765.  *
  2766.  * wParam = 0;
  2767.  * lParam = 0;
  2768.  * endcode
  2769.  *
  2770.  * return The number of pages in the propsheet.
  2771.  */
  2772. #define PSM_GETPAGECOUNT          0xF1C6L
  2773. /**
  2774.  * def PSM_GETTITLELENGTH
  2775.  * brief Gets the length of a page title.
  2776.  *
  2777.  * Sends this message to retreive the title length of a page.
  2778.  *
  2779.  * code
  2780.  * PSM_GETTITLELENGTH
  2781.  * int index;
  2782.  *
  2783.  * wParam = (WPARAM)index;
  2784.  * lParam = 0;
  2785.  * endcode
  2786.  *
  2787.  * param index The index number of the page in the propsheet.
  2788.  *
  2789.  * return The length of the page in the propsheet; PS_ERR if no such a page.
  2790.  */
  2791. #define PSM_GETTITLELENGTH        0xF1C7L
  2792. /**
  2793.  * def PSM_GETTITLE
  2794.  * brief Gets a page title.
  2795.  *
  2796.  * Sends this message to retreive the title of a page.
  2797.  *
  2798.  * code
  2799.  * PSM_GETTITLE
  2800.  * int index;
  2801.  * char *buffer;
  2802.  *
  2803.  * wParam = (WPARAM)index;
  2804.  * lParam = (LPARAM)buffer;
  2805.  * endcode
  2806.  *
  2807.  * param index The index number of the page in the propsheet.
  2808.  * param buffer The buffer storing the title string.
  2809.  *
  2810.  * return PS_OKAY on success; PS_ERR if no such a page.
  2811.  */
  2812. #define PSM_GETTITLE              0xF1C8L
  2813. /**
  2814.  * def PSM_SETTITLE
  2815.  * brief Sets a page title.
  2816.  *
  2817.  * Sends this message to specify the title of a page.
  2818.  *
  2819.  * code
  2820.  * PSM_SETTITLE
  2821.  * int index;
  2822.  * char *buffer;
  2823.  *
  2824.  * wParam = (WPARAM)index;
  2825.  * lParam = (LPARAM)buffer;
  2826.  * endcode
  2827.  *
  2828.  * param index The index number of the page in the propsheet.
  2829.  * param buffer The string buffer storing the title.
  2830.  *
  2831.  * return PS_OKAY on success; PS_ERR if no such a page.
  2832.  */
  2833. #define PSM_SETTITLE              0xF1C9L
  2834. /**
  2835.  * def PSM_ADDPAGE
  2836.  * brief Adds a page to the propsheet.
  2837.  *
  2838.  * Sends this message to add a page to the propsheet.
  2839.  *
  2840.  * code
  2841.  * PSM_ADDPAGE
  2842.  * DLGTEMPLATE *dlg_tmpl;
  2843.  * WNDPROC proc;
  2844.  *
  2845.  * wParam = (WPARAM)dlg_tmpl;
  2846.  * lParam = (LPARAM)proc;
  2847.  * endcode
  2848.  *
  2849.  * param hdlg The handle of the page window to be added in the propsheet.
  2850.  * param proc The window callback procedure of the page window.
  2851.  *        Note that the procedure should call DefaultPageProc function
  2852.  *        by default.
  2853.  *
  2854.  * return The index of the page added on success; PS_ERR on error.
  2855.  */
  2856. #define PSM_ADDPAGE               0xF1D0L
  2857. /**
  2858.  * def PSM_REMOVEPAGE
  2859.  * brief Removes a page from the propsheet.
  2860.  *
  2861.  * Sends this message to remove a page from the propsheet and destroys the 
  2862.  * associated controls.
  2863.  *
  2864.  * code
  2865.  * PSM_REMOVEPAGE
  2866.  * int index;
  2867.  *
  2868.  * wParam = (WPARAM)index;
  2869.  * lParam = 0;
  2870.  * endcode
  2871.  *
  2872.  * param index The index number of the page to be removed from the propsheet.
  2873.  *
  2874.  * return If success, return PS_OKAY, otherwise PS_ERR.
  2875.  */
  2876. #define PSM_REMOVEPAGE            0xF1D1L
  2877. /**
  2878.  * def PSM_SHEETCMD
  2879.  * brief Sends a MSG_SHEETCMD message to all pages in the propsheet.
  2880.  *
  2881.  * If you send MSG_SHEETCMD message to the propsheet control, the control
  2882.  * will broadcast the message to all pages it contains. The page callback 
  2883.  * procedure will receive the message and handle it. If one page return non-zero
  2884.  * value, the broadcast will be broken and the message will return a value 
  2885.  * indicating which page returned error. The value will be equal to the page index 
  2886.  * plus one.
  2887.  *
  2888.  * The PSM_SHEETCMD can be used by property sheet window, i.e., the container
  2889.  * of the property pages. The sheet can create three buttons, like
  2890.  * "Ok", "Cancel", and "Apply". When the user clicked the "Apply" or "Ok"
  2891.  * button, it can send a PSM_SHEETCMD message to the propsheet control, the
  2892.  * control will then send the message to all pages to notify pages to apply
  2893.  * the changes made by the user. If there are some errors, the page can return