Files
MiniGUI/include/ctrl/listview.h
2017-05-29 12:20:05 +08:00

1280 lines
31 KiB
C

/**
* \file listview.h
* \author Wei Yongming <ymwei@minigui.org>
* \date 2002/01/06
*
\verbatim
Copyright (C) 2002-2008 Feynman Software
Copyright (C) 1998-2002 Wei Yongming
All rights reserved by Feynman Software.
This file is part of MiniGUI, a compact cross-platform Graphics
User Interface (GUI) support system for real-time embedded systems.
\endverbatim
*/
/*
* $Id: listview.h 11677 2009-05-23 08:07:19Z dongjunjie $
*
* MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks,
* pSOS, ThreadX, NuCleus, OSE, and Win32.
*
* Copyright (C) 2002-2008 Feynman Software.
* Copyright (C) 1998-2002 Wei Yongming.
*/
#ifndef EXT_LISTVIEW_H
#define EXT_LISTVIEW_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* \addtogroup controls
* @{
*/
/**
* \defgroup mgext_ctrl_listview ListView control
* @{
*/
/**
* \def CTRL_LISTVIEW
* \brief The class name of listview control.
*/
#define CTRL_LISTVIEW ("ListView")
/** Listview return value */
#define LV_OKAY 0
/** Listview return value */
#define LV_ERR (-1)
/** Listview return value */
#define LV_ERRSPACE (-2)
/**
* \var typedef GHANDLE HLVITEM
* \brief List view item handle
*/
typedef GHANDLE HLVITEM;
/**
* \def LVIF_FOLD
* \brief listview item flags, is used inside minigui.
*/
#define LVIF_FOLD 0x0001L
/**
* Structure of the listview item info, contains information about an item.
* This structure is used for creating or retrieving an item.
*/
typedef struct _LVITEM
{
/**
* The rows of the item
*/
int nItem;
/** Height of the item */
int nItemHeight;
/** Attached additional data of this item */
DWORD itemData;
/**
* State flags of the item, can be OR'ed by the following values:
*
* - LVIF_FOLD\n
* The item is folded.
*
* When adding an item to the listview control, only LVIF_FOLD
* flag is valid.
*/
DWORD dwFlags;
} LVITEM;
/** Data type of the pointer to a LVITEM */
typedef LVITEM *PLVITEM;
/** Listview bitmap flags */
#define LVFLAG_BITMAP 0x0001
/** Listview icon flags */
#define LVFLAG_ICON 0x0002
/**
* Struct of the listview subitem info, contains information about a subitem.
* This structure is used for creating or retrieving a subitem.
*/
typedef struct _LVSUBITEM
{
/** Flags of the subitem, can be OR'ed by the following values:
*
* - LVFLAG_BITMAP
* The sub item has a bitmap icon.
* - LVFLAG_ICON
* The sub item has an icon.
*/
DWORD flags;
/** The Subitem vertical position(rows) */
int nItem;
/** The Subitem horizontal position(columns) */
int subItem;
/** Text content of this subitem */
char *pszText;
/** Max text len */
int nTextMax;
/** Text color of the subitem */
int nTextColor;
/** Image of the subitem, can be bitmap or icon, determined by flags */
DWORD image;
} LVSUBITEM;
/** Data type of the pointer to a LVSUBITEM */
typedef LVSUBITEM *PLVSUBITEM;
/** Contains information for sorting listview */
typedef struct _LVSORTDATA
{
/** Sorting column index */
int ncol;
/** Low sorted or high sorted */
int losorted;
/** Listview handle */
HWND hLV;
} LVSORTDATA;
/** Data type of pointer to a LVSORTDATA */
typedef LVSORTDATA *PLVSORTDATA;
/** Type of listview comparision fuction */
typedef int (*PFNLVCOMPARE) (HLVITEM nItem1, HLVITEM nItem2, PLVSORTDATA sortData);
typedef GHANDLE HLVHDR;
typedef GHANDLE HLVHDRITEM;
/** Type of listview header background drawing function */
/* hlvhdr is reserved for extension */
typedef void (*PFN_LVHDR_BKDRAWFUNC) (HWND hWnd, HLVHDR hlvhdr, HDC hdc, RECT *rcDraw);
/** Type of listview header item drawing function */
typedef void (*PFN_LVHDR_ITEMDRAWFUNC) (HWND hWnd, int idx, HDC hdc, RECT *rcDraw);
/** Contains function pointers for customized drawing */
typedef struct _LVCUSTOMDRAWFUNCS
{
/** Colunm header background drawing function */
PFN_LVHDR_BKDRAWFUNC pfnDrawHdrBk;
/** Colunm header item drawing function */
PFN_LVHDR_ITEMDRAWFUNC pfnDrawHdrItem;
} LVCUSTOMDRAWFUNCS;
/** Column flags */
/** Column text left align, default */
#define LVCF_LEFTALIGN 0x0000
/** Column text right align */
#define LVCF_RIGHTALIGN 0x0001
/** Column text center align */
#define LVCF_CENTERALIGN 0x0002
/** Column treeview style */
#define LVCF_TREEVIEW 0x0004
/** Header flags */
/** Header text left align, default */
#define LVHF_LEFTALIGN 0x0000
/** Header text right align */
#define LVHF_RIGHTALIGN 0x0004
/** Header text center align */
#define LVHF_CENTERALIGN 0x0008
/**
* Struct of the listview column info, contains information about a column.
* This structure is used for creating or retrieving a column.
*/
typedef struct _LVCOLUMN
{
/** The horizontal position */
int nCols;
/** Column's width */
int width;
/** The title of this column */
char *pszHeadText;
/** Max text len */
int nTextMax;
/** Image of the column header, can be bitmap or icon */
DWORD image;
/** Comparision function associated with the column */
PFNLVCOMPARE pfnCompare;
/** Column and header flags */
DWORD colFlags;
} LVCOLUMN;
/** Data type of pointer to a LVCOLUMN */
typedef LVCOLUMN *PLVCOLUMN;
/** Listview search flags */
/** Search by text */
#define LVFF_TEXT 0x0001
/** Search by addtional data */
#define LVFF_ADDDATA 0x0002
/** Contains information for finding a certain item info */
typedef struct _LVFINDINFO
{
/**
* Type of search to perform.
* This member can be set to one or more of the following values:
* - LVFF_TEXT
* Searches based on the item(subitems) text.
* - LVFF_ADDDATA
* Searches based on the attached additional item data.
*/
DWORD flags;
/** Search index to begin with, 0 from the beginning */
int iStart;
/** PszInfo containing nCols columns' text */
int nCols;
/** All the subitem's content of this item */
char **pszInfo;
/** The additional item data */
DWORD addData;
/** The found item's row, reserved */
int nItem;
/** The found subitem's column, reserved */
int nSubitem;
} LVFINDINFO;
/** Data type of pointer to a LVFINDINFO */
typedef LVFINDINFO *PLVFINDINFO;
/** Contains listview general notification information */
typedef struct _LVNM_NORMAL
{
/** wParam parameter of the message */
WPARAM wParam;
/** lParam parameter of the message */
LPARAM lParam;
} LVNM_NORMAL;
/** Data type of pointer to a LVNM_NORMAL */
typedef LVNM_NORMAL *PLVNM_NORMAL;
/** Keydown notification information */
typedef LVNM_NORMAL LVNM_KEYDOWN;
/** Data type of pointer to a LVNM_KEYDOWN */
typedef LVNM_KEYDOWN *PLVNM_KEYDOWN;
/** Contains listview notification information when mouse down on the header */
typedef LVNM_NORMAL LVNM_HEADRDOWN;
/** Data type of pointer to a LVNM_HEADRDOWN */
typedef LVNM_HEADRDOWN *PLVNM_HEADRDOWN;
/** Contains listview notification information when mouse up on the header */
typedef LVNM_NORMAL LVNM_HEADRUP;
/** Data type of pointer to a LVNM_HEADRUP */
typedef LVNM_HEADRUP *PLVNM_HEADUP;
/** Contains listview notification information when mouse down on the item area */
typedef LVNM_NORMAL LVNM_ITEMRDOWN;
/** Data type of pointer to a LVNM_ITEMRDOWN */
typedef LVNM_ITEMRDOWN *PLVNM_ITEMRDOWN;
/** Contains listview notification information when mouse up on the item area */
typedef LVNM_NORMAL LVNM_ITEMRUP;
/** Data type of pointer to a LVNM_ITEMRUP */
typedef LVNM_ITEMRUP *PLVNM_ITEMRUP;
/**
* \defgroup mgext_ctrl_listview_styles Styles of listview control
* @{
*/
/**
* \def LVS_UPNOTIFY
* \brief Notifies the parent window when mouse is up (default is down).
*
* Causes the listview to notify the listview parent window
* with a notification message when the user make actions, such as clicks, doubleclicks, ...,etc.
*/
#define LVS_UPNOTIFY 0x0001L /* must be the same with SVS_UPNOTIFY */
#define LVS_NOTIFY LVS_UPNOTIFY
/**
* \def LVS_SORT
* \brief Sorts strings automatically.
*
* Causes the listview to sort strings automatically.
*/
#define LVS_SORT 0x0002L
/**
* \def LVS_MULTIPLESEL
* \brief Causes the listview to allow the user to select multiple items.
*/
#define LVS_MULTIPLESEL 0x0008L /* reserved */
/**
* \def LVS_CHECKBOX
* \brief Displays a check box in an item.
*/
#define LVS_CHECKBOX 0x1000L /* reserved */
/**
* \def LVS_AUTOCHECK
* \brief If the list view has LVS_CHECKBOX style, this
* style tell the list view to auto-switch the check box between
* checked or un-checked when the user click the check mark box of an item.
*/
#define LVS_AUTOCHECK 0x2000L /* reserved */
/**
* \def LVS_AUTOCHECKBOX
* \brief If the list view has LVS_AUTOCHECKBOX style, this style tell the list view
* use LVS_CHECKBOX and LVS_AUTOCHECK style.
* */
#define LVS_AUTOCHECKBOX (LVS_CHECKBOX | LVS_AUTOCHECK) /* reserved */
/**
* \def LVS_TREEVIEW
* \brief Uses listview in a treeview style.
*/
#define LVS_TREEVIEW 0x4000L
#define LVS_WITHGRID 0x8000L
/** @} end of mgext_ctrl_listview_styles */
/**
* \defgroup mgext_ctrl_listview_msgs Messages of ListView control
* @{
*/
/**
* \def LVM_ADDITEM
* \brief Adds a item to listview, this item is also called a row.
*
* \code
* LVM_ADDITEM
* PLVITEM p
* HLVITEM parent;
*
* wParam = (WPARAM)parent;
* p =(LPARAM)lParam;
* \endcode
*
* \param p Pointes to a LVITEM structure that contains the information of
* the new item to be added. nItem member of the LVITEM struct speficied
* the item position in its parent item, beginning with zero.
* \param parent Handle of the parent item into which the new item is about to insert.
* If parent equals zero, the parent item will be the root of listview.
*
* \return Returns the handle of the new item if successful, or 0 otherwise.
*/
#define LVM_ADDITEM 0xF110
/**
* \def LVM_FILLSUBITEM
* \brief Sets the content of a subitem, indentified by rows and columns.
*
* \code
* LVM_FILLSUBITEM
* PLVSUBITEM p;
* HLVITEM pi;
*
* lParam = (LPARAM)p;
* wParam = (WPARAM)pi;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to set. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_FILLSUBITEM 0xF111
/**
* \def LVM_ADDCOLUMN
* \brief Adds a new column to listview, identified by column.
*
* \code
* LVM_ADDCOLUMN
* PLVCOLUMN p;
*
* wParam = 0;
* lParam =(LPARAM)p;
* \endcode
*
* \param p Pointes to a LVCOLUMN structure that contains the information about the new
* column to be added.
*/
#define LVM_ADDCOLUMN 0xF112
/**
* \def LVM_DELITEM
* \brief Deletes an item form listview.
*
* \code
* LVM_DELITEM
* int nRow;
* HLVITEM pi;
*
* wParam = (WPARAM)nRow;
* lParam = (LPARAM)pi;
* \endcode
*
* \param nRow If pi is zero, nRow specified the row index of the target item to delete.
* \param pi Handle of the target item.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_DELITEM 0xF113
/**
* \def LVM_CLEARSUBITEM
* \brief Clears the content of a subitem.
*
* \code
* LVM_CLEARSUBITEM
* PLVSUBITEM p;
* HLVITEM pi;
*
* lParam = (LPARAM)p;
* wParam = (WPARAM)pi;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to clear. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_CLEARSUBITEM 0xF114
/**
* \def LVM_DELCOLUMN
* \brief Deletes a column from listview, all subitem in this column will be removed.
*
* \code
* LVM_DELCOLUMN
* int nCols;
*
* wParam = (WPARAM)nCol;
* lParam = 0;
* \endcode
*
* \param nCol The index of the column to be removed.
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_DELCOLUMN 0xF115
/**
* \def LVM_COLSORT
* \brief Sorts all subitems according to a certain column.
*
* \code
* LVM_COLSORT
* int ncol;
*
* wParam = (WPARAM)ncol;
* lParam = 0;
* \endcode
*
* \param ncol Index of the column.
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_COLSORT 0xF116
/**
* \def LVM_SETSUBITEMCOLOR
* \brief Sets the text color of a subitem.
*
* \code
* LVM_SETSUBITEMCOLOR
* PLVSUBITEM p;
* HLVITEM pi;
*
* lParam = (LPARAM)p;
* wParam = (WPARAM)pi;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to set. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Always returns 0;
*/
#define LVM_SETSUBITEMCOLOR 0xF117
/**
* \def LVM_FINDITEM
* \brief Searchs a item
* \code
* LVM_FINDITEM
* PLVFINDINFO plvfi;
* HLVITEM parent;
* wParam = (WPARAM)parent;
* lParam = (LPARAM)plvfi;
* \endcode
* \param parent Handle of the item to search in.
* \param plvfi Points to a LVFINDINFO structure containing information for searching.
* If parent is zero, iStart member of plvfi specifieds the start position
* on search.
*
* \return Returns the handle of the found item if successful, or 0 otherwise.
*/
#define LVM_FINDITEM 0xF118
/**
*
* \def LVM_GETSUBITEMTEXT
* \brief Retrieves the text of a listview subitem.
*
* \code
* LVM_GETSUBITEMTEXT
* PLVSUBITEM p;
* HLVITEM pi;
*
* lParam = (LPARAM)p;
* wParam = (WPARAM)pi;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to set. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Returns len of the text if successful, -1 otherwise.
*/
#define LVM_GETSUBITEMTEXT 0xF119
/**
* \def LVM_GETITEMCOUNT
* \brief Gets the number of all the items(rows) in a listview.
*
* \code
* LVM_GETITEMCOUNT
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return The number of the items.
*/
#define LVM_GETITEMCOUNT 0xF11A
/**
* \def LVM_GETCOLUMNCOUNT
* \brief Gets the number of all the columns in listview.
*
* \code
* LVM_GETCOLUMNCOUNT
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return Returns the number of all the columns in listview.
*/
#define LVM_GETCOLUMNCOUNT 0xF11B
/**
* \def LVM_GETSELECTEDITEM
* \brief Gets the current selected item.
*
* \code
* LVM_GETSELECTEDITEM
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return Returns the handle of the current selected item.
*/
#define LVM_GETSELECTEDITEM 0xF11C
/**
* \def LVM_DELALLITEM
* \brief Removes all the items in listview.
*
* \code
* LVM_DEALLITEM
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return Returns TRUE if successful, or FALSE otherwise.
*/
#define LVM_DELALLITEM 0xF11D
/**
* \def LVM_MODIFYHEAD
* \brief Changes the title of a column.
*
* \code
* LVM_MODIFYHEAD
* PLVCOLUMN pcol;
*
* wParam = 0;
* lParam = (LPARAM)pcol;
* \endcode
*
* \param pcol Pointer to a LVCOLUMN struct.
* \return Returns LV_OKAY if successfull, or LV_ERR otherwise.
*/
#define LVM_MODIFYHEAD 0xF11E
/**
* \def LVM_SELECTITEM
* \brief Selects an item.
*
* \code
* LVM_SELECTITEM
* int nRow;
* HLVITEM pi;
*
* wParam = (WPARAM)nRow;
* lParam = (LPARAM)pi;
* \endcode
*
* \param nRow If pi is zero, nRow specified the row index of the target item to select.
* \param pi Handle of the target item.
*
* \return Always returns 0.
*/
#define LVM_SELECTITEM 0xF11F
/**
* \def LVM_SHOWITEM
* \brief Makes the item is entirely visible in the list view.
*
* \code
* LVM_SHOWITEM
* int nRow;
* HLVITEM pi;
*
* wParam = (WPARAM)nRow;
* lParam = (LPARAM)pi;
* \endcode
*
* \param nRow If pi is zero, nRow specified the row index of the target item to show.
* \param pi Handle of the target item.
*
* \return Always returns 0.
*/
#define LVM_SHOWITEM 0xF120
/**
* \def LVM_GETSUBITEMLEN
* \brief Gets the text length of the subitem.
*
* \code
* LVM_GETSUBITEMLEN
* PLVSUBITEM p;
* HLVITEM pi;
*
* lParam = (LPARAM)p;
* wParam = (WPARAM)pi;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to set. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Returns the text length if successful, or LV_ERR otherwise.
*/
#define LVM_GETSUBITEMLEN 0xF121
/**
* \def LVM_SETCOLUMN
* \brief Sets the attributes of a list view column.
*
* \code
* LVM_SETCOLUMN
* PLVCOLUMN pcol;
*
* wParam = 0;
* lParam = (LPARAM)pcol;
* \endcode
*
* \param pcol Points to a LVCOLUMN structure containing the new column information.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_SETCOLUMN 0xF122
/**
* \def LVM_SETSUBITEMTEXT
* \brief Sets the text of a subitem.
*
* \code
* LVM_SETSUBITEMTEXT
* PLVSUBITEM p;
* HLVITEM pi;
*
* wParam = (WPARAM)pi;
* lParam = (LPARAM)p;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to set. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_SETSUBITEMTEXT 0xF123
/**
* \def LVM_SETSUBITEM
* \brief Sets the attributes of a subitem.
*
* \code
* LVM_SETSUBITEM
* PLVSUBITEM p;
* HLVITEM pi;
*
* lParam = (LPARAM)p;
* wParam = (WPARAM)pi;
* \endcode
*
* \param p Pointes to a PLVSUBITEM structure that contains the information of
* the subitem to set. If pi is not zero, nItem member of this struct
* has no meaning.
* \param pi Handle of the target item.
* If pi equals zero, the row position of the target item is
* specified by nItem member of p structure.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_SETSUBITEM 0xF124
/**
* \def LVM_GETCOLUMN
* \brief Retrieves the information about a listview column.
*
* \code
* LVM_GETCOLUMN
* int nCol;
* PLVCOLUMN pcol;
*
* wParam = (WPARAM)nCol;
* lParam = (LPARAM)pcol;
* \endcode
*
* \param nCol Index of the column.
* \param pcol Points to a LVCOLUMN structure for retrieving the information
* about the column.
*
* \return Returns TRUE if successful, or FALSE otherwise.
*/
#define LVM_GETCOLUMN 0xF125
/**
* \def LVM_GETCOLUMNWIDTH
* \brief Retrieves the width of a listview column.
*
* \code
* LVM_GETCOLUMNWIDTH
* int nCol;
*
* wParam = (WPARAM)nCol;
* lParam = (LPARAM)0;
* \endcode
*
* \param nCol Index of the column.
*
* \return Returns the column width if successful, or -1 otherwise.
*/
#define LVM_GETCOLUMNWIDTH 0xF126
/**
* \def LVM_GETITEM
* \brief Retrieves the item's attributes.
*
* \code
* LVM_GETITEM
* HLVITEM pi;
* LVITEM item_info;
*
* wParam = (WPARAM)pi;
* lParam = (LPARAM)&item_info;
* \endcode
*
* \param pi Handle of the target item.
* \param item_info Used for storing the target item's attributes.
If pi is zero, nItem field of item_info specified the row index
of the target item to get.
*
* \return Returns LV_OKAY if successful, or LV_ERR otherwise.
*/
#define LVM_GETITEM 0xF127
/**
* \def LVM_GETITEMSTATE
* \brief Retrieves the state of a listview item.
*
* \code
* LVM_GETITEMSTATE
* UINT mask;
* HLVITEM pi;
*
* wParam = (WPARAM)pi;
* lParam = (LPARAM)mask;
* \endcode
*
* \param pi Handle of the target item.
* \param mask Contains state information to retrieve, can be the combination
* of the following values.
*
* \return Returns the current state of the specified item.
*/
#define LVM_GETITEMSTATE 0xF128
/**
* \def LVM_GETSELECTEDCOLUMN
* \brief Retrieves the index of the currently selected column of a listview.
*
* \code
* LVM_GETSELECTEDCOLUMN
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return Returns the index of the selected column.
*/
#define LVM_GETSELECTEDCOLUMN 0xF129
/**
* \def LVM_GETSELECTEDCOUNT
* \brief Retrieves the number of the selected items in a listview.
*
* \code
* LVM_GETSELECTEDCOUNT
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return Returns the number of the selected items.
*/
#define LVM_GETSELECTEDCOUNT 0xF130
/**
* \def LVM_GETTOPVISIBLE
* \brief Retrieves the index of the topmost visible item in a listview.
*
* \code
* LVM_GETTOPVISIBLE
*
* wParam = 0;
* lParam = 0;
* \endcode
*
* \return Returns the index of the topmost visible item if successful, or zero.
*/
#define LVM_GETTOPVISIBLE 0xF131
/**
* \def LVM_NULL
* \brief reserved.
*/
#define LVM_NULL 0xF132
/**
* \def LVM_SETITEMSTATE
* \brief reserved.
*/
#define LVM_SETITEMSTATE 0xF133
/**
* \def LVM_SORTITEMS
* \brief Uses an application-defined comparision function to sort the items.
*
* \code
* LVM_SORTITEMS
* PLVSORTDATA sortData;
* PFNLVCOMPARE pfnCompare;
*
* wParam = (WPARAM)sortData;
* lParam = (LPARAM)pfnCompare;
* \endcode
*
* \param sortData Sorting datas passed to the comparision function.
* \param pfnCompare Pointer to the application-defined comparision function. The
* comparision function is called during the sort operation
* each time the relative order of the two items needs to be
* compared.
*
* The comparison function must return a negative value if the
* first item precedes the second, a positive value if
* the first item follows the second, or zero if the two
* items are equivalent.
*
* The comparision function has the following form:
*
* int CompareFunction(int nItem1, int nItem2, PLVSORTDATA sortData);
*
* nItem1 is the handle of the first item, nItem2 is the handle
* of the second item, and sortData is passed to CompareFunction
* as the third parameter.
*
* \return Returns TRUE if successful, or FALSE otherwise.
*/
#define LVM_SORTITEMS 0xF134
/**
* \def LVM_SETITEMHEIGHT
* \brief Changes the height of a item.
*
* \code
* LVM_SETITEMHEIGHT
* int height;
* HLVITEM pi;
*
* wParam = (WPARAM)pi;
* lParam = (LPARAM)height;
* \endcode
*
* \param height The new height of the item.
* \param pi Handle of the target item.
*
* \return Returns TRUE if successful, or FALSE otherwise.
*/
#define LVM_SETITEMHEIGHT 0xF135
/**
* \def LVM_SETHEADHEIGHT
* \brief Changes the height of the header.
*
* \code
* LVM_SETHEADHEIGHT
* int height;
*
* wParam = (WPARAM)height;
* lParam = 0;
* \endcode
*
* \param height The new height of the header.
* \return Returns TRUE if successful, or FALSE otherwise.
*/
#define LVM_SETHEADHEIGHT 0xF136
/**
* \def LVM_GETITEMADDDATA
* \brief Gets the 32-bit data value associated with an item.
*
* An application sends an LVM_GETITEMADDDATA message to a listview to get the
* 32-bit data value stored for the item with index of \a wParam;
* By default this is zero. An application must set the
* item data value by sending an LVM_SETITEMADDDATA message to the listview for
* this value to have meaning.
*
* \code
* LVM_GETITEMADDDATA
* int index;
* HLVITEM pi;
*
* wParam = (WPARAM)index;
* lParam = (LPARAM)pi;
* \endcode
*
* \param pi Handle of the target item.
* \param index The index of the specified item. If pi is not zero, use pi instead.
*
* \return The 32-bit data value associated with an item on success, otherwise
* -1 to indicate an error.
*/
#define LVM_GETITEMADDDATA 0xF137
/**
* \def LVM_SETITEMADDDATA
* \brief Associates a 32-bit data value with an item.
*
* An application sends an LVM_SETITEMADDDATA message to associate a 32-bit data
* value specified in the \a lParam parameter with an item in the listview.
*
* \code
* LVM_SETITEMADDDATA
* HLVITEM pi;
* DWORD addData;
*
* wParam = (WPARAM)pi;
* lParam = (LPARAM)addData;
* \endcode
*
* \param pi Handle of the target item.
* \param addData The 32-bit data value which will associated with the item.
*
* \return One of the following values:
* - LV_OKAY\n Success
* - LV_ERR\n Invalid item index
*
*/
#define LVM_SETITEMADDDATA 0xF138
/**
* \def LVM_CHOOSEITEM
* \brief Selects and shows an item.
*
* \code
* LVM_CHOOSEITEM
* int nRow;
* HLVITEM pi;
*
* wParam = (WPARAM)nRow;
* lParam = (LPARAM)pi;
* \endcode
*
* \param nRow If pi is zero, nRow specified the row index of the target item to choose.
* \param pi Handle of the target item.
*
* \return Always returns 0.
*/
#define LVM_CHOOSEITEM 0xF139
/**
* \def LVM_SETSTRCMPFUNC
* \brief Sets the STRCMP function used to sort items.
*
* An application sends a LVM_SETSTRCMPFUNC message to set a
* new STRCMP function to sort items in the Listview control.
*
* Note that you should send this message before adding
* any item to the Listview control.
*
* \code
* static int my_strcmp (const char* s1, const char* s2, size_t n)
* {
* ...
* return 0;
* }
*
* LVM_SETSTRCMPFUNC
*
* wParam = 0;
* lParam = (LPARAM) my_strcmp;
* \endcode
*
* \param my_strcmp Your own function to compare two strings.
*
* \return One of the following values:
* - 0\n Success
* - -1\n Not an empty TreeView control
*/
#define LVM_SETSTRCMPFUNC 0xF140
#define LVIR_PARENT 1
#define LVIR_FIRSTCHILD 2
#define LVIR_NEXTSIBLING 3
#define LVIR_PREVSIBLING 4
/**
* \def LVM_GETRELATEDITEM
* \brief Retrives related item of specific item.
*
* \code
* LVM_GETRELATEDITEM
* int related;
* GHANDLE item;
*
* wParam = (WPARAM)related;
* lParam = (LPARAM)item;
* \endcode
*
* \param related A integer which indicates the relationship between
* the item to retrive and the specified item, can be one of the following values:
* - TVIR_PARENT\n
* To retrive the parent item of the specified item.
* - TVIR_FIRSTCHILD\n
* To retrive the first child item of the specified item.
* - TVIR_NEXTSIBLING\n
* To retrive the next sibling item of the specified item.
* - TVIR_PREVSIBLING\n
* To retrive the previous sibling item of the specified item.
*
* \param item The handle to the known item.
*
* \return The handle of the related item on success, otherwise 0.
*/
#define LVM_GETRELATEDITEM 0xF141
/**
* \def LVM_FOLDITEM
* \brief Folds or unfolds an item.
*
* \code
* LVM_FOLDITEM
* int bFold;
* HLVITEM pi;
*
* wParam = (WPARAM)bFold;
* lParam = (LPARAM)pi;
* \endcode
*
* \param bFold To fold or to unfold, TRUE is to fold.
* \param pi Handle of the target item.
*
* \return Always returns 0.
*/
#define LVM_FOLDITEM 0xF142
/**
* \def LVM_SETCUSTOMDRAW
* \brief Sets the customized drawing functions of listview.
*
* \code
* LVM_SETCUSTOMDRAW
* LVCUSTOMDRAWFUNCS myFuncs;
*
* wParam = (WPARAM)0;
* lParam = (LPARAM)&myFuncs;
* \endcode
*
* \param myFuncs Pointer to a customized drawing functions structure.
*
* \return Always returns 0.
*/
#define LVM_SETCUSTOMDRAW 0xF143
/**
* \def LVM_GETSELECTEDITEMRECT
* \brief Get the selected item's Rectangle
*
* \code
* LVM_GETSELECTEDITEMRECT
* RECT * prcItem
*
* wPram = (WPARAM)0
* lParam = (LPARAM)prcItem
* \endcode
*
* \param prcItem Pointer to a RECT which recieve the Item Rectangle
*
* \return If got, return TRUE, otherwise return FALSE
*/
#define LVM_GETSELECTEDITEMRECT 0xF144
/** @} end of mgext_ctrl_listview_msgs */
/**
* \defgroup mgext_ctrl_listview_ncs Notification code of ListView control
* @{
*/
/**
* \def LVN_CLICKED
* \brief This notification code informs parent window the mouse clicked
*/
#define LVN_CLICKED 1 /* must be the same as SVN_CLICKED */
/**
* \def LVN_SELCHANGE
* \brief This notification code informs parent window the current selected item
* has changed.
*/
#define LVN_SELCHANGE 2 /* must be the same as SVN_SELCHANGED */
/**
* \def LVN_ITEMRDOWN
* \brief This notification code informs parent window the right mouse button down
* on a listview item.
*/
#define LVN_ITEMRDOWN 4
/**
* \def LVN_ITEMRUP
* \brief This notification code informs parent window the right mouse button up
* on a listview item.
*/
#define LVN_ITEMRUP 5
/**
* \def LVN_HEADRDOWN
* \brief This notification code informs parent window the right mouse button down
* on the listview header.
*/
#define LVN_HEADRDOWN 6
/**
* \def LVN_HEADRUP
* \brief This notification code informs parent window the right mouse button up
* on the listview header.
*/
#define LVN_HEADRUP 7
/**
* \def LVN_KEYDOWN
* \brief This notification code informs parent window that a key has been pressed.
*/
#define LVN_KEYDOWN 8
/**
*
* \def LVN_ITEMDBCLK
* \brief This notification code informs parent window the current selected item
* has be double clicked.
*/
#define LVN_ITEMDBCLK 9
/**
* \def LVN_ITEMCLK
* \brief This notification code informs parent window the current selected item
* has been clicked.
*/
#define LVN_ITEMCLK 10
/**
* \def LVN_COLCHANGE
* \brief This notification code informs parent window the current selected column
* has changed.
*/
#define LVN_COLCHANGE 11
/**
* \def LVN_FOLDED
* \brief This notification code informs that user folds an item by mouse
* clicking.
*/
#define LVN_FOLDED 12
/**
* \def LVN_UNFOLDED
* \brief This notification code informs that user unfolds an item by mouse
* clicking.
*/
#define LVN_UNFOLDED 13
/** @} end of mgext_ctrl_listview_ncs */
/** @} end of mgext_ctrl_listview */
/** @} end of controls */
#ifdef __cplusplus
}
#endif
#endif /* EXT_LISTVIEW_H */