- The usual bugfixes.
- Better unicode support (only defines, currently)
- Drag & drop implemented.
- LPSTR_TEXTCALLBACK should work now.
- First start at custom draw code.
diff --git a/include/commctrl.h b/include/commctrl.h
index baa8015..dd6d821 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -184,7 +184,13 @@
#define STATUSCLASSNAME16 "msctls_statusbar"
#define STATUSCLASSNAME32A "msctls_statusbar32"
-#define STATUSCLASSNAME32W L"msctls_statusbar32"
+/* Does not work. gcc creates 4 byte wide strings.
+ * #define STATUSCLASSNAME32W L"msctls_statusbar32"
+ */
+static const WCHAR _scn32w[] = {
+'m','s','c','t','l','s','_','s','t','a','t','u','s','b','a','r','3','2',0
+};
+#define STATUSCLASSNAME32W _scn32w
#define STATUSCLASSNAME WINELIB_NAME_AW(STATUSCLASSNAME)
#define SBT_NOBORDERS 0x0100
@@ -1755,7 +1761,7 @@
INT32 iSelectedImage;
INT32 cChildren;
LPARAM lParam;
-} TVITEMA, *LPTVITEMA;
+} TVITEM32A, *LPTVITEM32A;
typedef struct {
UINT32 mask;
@@ -1763,15 +1769,15 @@
UINT32 state;
UINT32 stateMask;
LPWSTR pszText;
- int cchTextMax;
- int iImage;
- int iSelectedImage;
- int cChildren;
+ INT32 cchTextMax;
+ INT32 iImage;
+ INT32 iSelectedImage;
+ INT32 cChildren;
LPARAM lParam;
-} TVITEMW, *LPTVITEMW;
+} TVITEM32W, *LPTVITEM32W;
-#define LPTV_ITEM LPTVITEMA
-#define TV_ITEM TVITEMA
+#define TV_ITEM WINELIB_NAME(TV_ITEM)
+#define LPTV_ITEM WINELIB_NAME(LPTV_ITEM)
typedef struct {
UINT32 mask;
@@ -1784,8 +1790,8 @@
INT32 iSelectedImage;
INT32 cChildren;
LPARAM lParam;
- int iIntegral;
-} TVITEMEXA, *LPTVITEMEXA;
+ INT32 iIntegral;
+} TVITEMEX32A, *LPTVITEMEX32A;
typedef struct {
UINT32 mask;
@@ -1793,63 +1799,78 @@
UINT32 state;
UINT32 stateMask;
LPWSTR pszText;
- int cchTextMax;
- int iImage;
- int iSelectedImage;
- int cChildren;
+ INT32 cchTextMax;
+ INT32 iImage;
+ INT32 iSelectedImage;
+ INT32 cChildren;
LPARAM lParam;
- int iIntegral;
-} TVITEMEXW, *LPTV_ITEMEXW;
+ INT32 iIntegral;
+} TVITEMEX32W, *LPTV_ITEMEX32W;
-#define TV_ITEMEX TVITEMEXA
-#define LPTV_ITEMEXA LPTVITEMEXA
+#define TV_ITEMEX WINELIB_NAME(TV_ITEM)
+#define LPTV_ITEMEX WINELIB_NAME(LPTV_ITEM)
-typedef struct tagTVINSERTSTRUCTA {
+
+typedef struct tagTVINSERTSTRUCT32A {
HTREEITEM hParent;
HTREEITEM hInsertAfter;
- TVITEMA item;
-} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;
+ union {
+ TVITEMEX32A itemex;
+ TVITEM32A item;
+ } DUMMYUNIONNAME;
+} TVINSERTSTRUCT32A, *LPTVINSERTSTRUCT32A;
-typedef struct tagTVINSERTSTRUCTW {
+typedef struct tagTVINSERTSTRUCT32W {
HTREEITEM hParent;
HTREEITEM hInsertAfter;
- TVITEMW item;
-} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;
+ union {
+ TVITEMEX32W itemex;
+ TVITEM32W item;
+ } DUMMYUNIONNAME;
+} TVINSERTSTRUCT32W, *LPTVINSERTSTRUCT32W;
-#define TV_INSERTSTRUCT TVINSERTSTRUCTA
-#define LPTV_INSERTSTRUCT LPTVINSERTSTRUCTA
+#define TV_INSERTSTRUCT WINELIB_NAME(TVINSERTSTRUCT)
+#define LPTV_INSERTSTRUCT WINELIB_NAME(LPTVINSERTSTRUCT)
-typedef struct tagNMTREEVIEWA {
+#define TVINSERTSTRUCT_V1_SIZE32A CCSIZEOF_STRUCT(TVINSERTSTRUCT32A, item)
+#define TVINSERTSTRUCT_V1_SIZE32W CCSIZEOF_STRUCT(TVINSERTSTRUCT32W, item)
+#define TVINSERTSTRUCT_V1_SIZE WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE)
+
+
+
+
+typedef struct tagNMTREEVIEW32A {
NMHDR hdr;
UINT32 action;
- TVITEMA itemOld;
- TVITEMA itemNew;
+ TVITEM32A itemOld;
+ TVITEM32A itemNew;
POINT32 ptDrag;
-} NMTREEVIEWA, *LPNMTREEVIEWA;
+} NMTREEVIEW32A, *LPNMTREEVIEW32A;
-typedef struct tagNMTREEVIEWW {
+typedef struct tagNMTREEVIEW32W {
NMHDR hdr;
UINT32 action;
- TVITEMW itemOld;
- TVITEMW itemNew;
+ TVITEM32W itemOld;
+ TVITEM32W itemNew;
POINT32 ptDrag;
-} NMTREEVIEWW, *LPNMTREEVIEWW;
+} NMTREEVIEW32W, *LPNMTREEVIEW32W;
-#define NM_TREEVIEW NMTREEVIEWA
-#define LPNM_TREEVIEW LPNMTREEVIEWA
+#define NMTREEVIEW WINELIB_NAME_AW(NMTREEVIEW)
+#define LPNMTREEVIEW WINELIB_NAME_AW(LPNMTREEVIEW)
-typedef struct tagTVDISPINFOA {
+typedef struct tagTVDISPINFO32A {
NMHDR hdr;
- TVITEMA item;
-} NMTVDISPINFOA, *LPNMTVDISPINFOA;
+ TVITEM32A item;
+} NMTVDISPINFO32A, *LPNMTVDISPINFO32A;
-typedef struct tagTVDISPINFOW {
+typedef struct tagTVDISPINFO32W {
NMHDR hdr;
- TVITEMW item;
-} NMTVDISPINFOW, *LPNMTVDISPINFOW;
+ TVITEM32W item;
+} NMTVDISPINFO32W, *LPNMTVDISPINFO32W;
-#define NMTVDISPINFO NMTVDISPINFOA
-#define LPNMTVDISPINFO LPNMTVDISPINFOA
+#define NMTVDISPINFO WINELIB_NAME_AW(NMTVDISPINFO)
+#define LPNMTVDISPINFO WINELIB_NAME_AW(LPNMTVDISPINFO)
+#define TV_DISPINFO NMTVDISPINFO
typedef INT32 (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);
@@ -1871,9 +1892,51 @@
#define TV_HITTESTINFO TVHITTESTINFO
+
+/* Custom Draw Treeview */
+
+#define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk)
+
+#define TVCDRF_NOIMAGES 0x00010000
+
+typedef struct tagNMTVCUSTOMDRAW
+{
+ NMCUSTOMDRAW nmcd;
+ COLORREF clrText;
+ COLORREF clrTextBk;
+ INT32 iLevel; /* IE>0x0400 */
+} NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;
+
+/* Treeview tooltips */
+
+typedef struct tagNMTVGETINFOTIP32A
+{
+ NMHDR hdr;
+ LPSTR pszText;
+ INT32 cchTextMax;
+ HTREEITEM hItem;
+ LPARAM lParam;
+} NMTVGETINFOTIP32A, *LPNMTVGETINFOTIP32A;
+
+typedef struct tagNMTVGETINFOTIP32W
+{
+ NMHDR hdr;
+ LPWSTR pszText;
+ INT32 cchTextMax;
+ HTREEITEM hItem;
+ LPARAM lParam;
+} NMTVGETINFOTIP32W, *LPNMTVGETINFOTIP32W;
+
+
+#define NMTVGETINFOTIP WINELIB_NAME(NMTVGETINFOTIP)
+
+
+
+
+
#define TreeView_InsertItem32A(hwnd, phdi) \
(INT32)SendMessage32A((hwnd), TVM_INSERTITEM32A, 0, \
- (LPARAM)(LPTVINSERTSTRUCTA)(phdi))
+ (LPARAM)(LPTVINSERTSTRUCT32A)(phdi))
#define TreeView_DeleteItem(hwnd, hItem) \
(BOOL32)SendMessage32A((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
#define TreeView_DeleteAllItems(hwnd) \
@@ -1945,10 +2008,10 @@
*/
#define TreeView_GetItem32A(hwnd, pitem) \
- (BOOL32)SendMessage32A((hwnd), TVM_GETITEM32A, 0, (LPARAM) (TVITEMA *)(pitem))
+ (BOOL32)SendMessage32A((hwnd), TVM_GETITEM32A, 0, (LPARAM) (TVITEM32A *)(pitem))
#define TreeView_SetItem32A(hwnd, pitem) \
- (BOOL32)SendMessage32A((hwnd), TVM_SETITEM32A, 0, (LPARAM)(const TVITEMA *)(pitem))
+ (BOOL32)SendMessage32A((hwnd), TVM_SETITEM32A, 0, (LPARAM)(const TVITEM32A *)(pitem))
#define TreeView_EditLabel(hwnd, hitem) \
(HWND)SendMessage32A((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
@@ -2432,6 +2495,7 @@
#define TCS_BOTTOM 0x0002
#define TCS_RIGHT 0x0002
#define TCS_MULTISELECT 0x0004 /* allow multi-select in button mode */
+#define TCS_FLATBUTTONS 0x0008
#define TCS_FORCEICONLEFT 0x0010
#define TCS_FORCELABELLEFT 0x0020
#define TCS_HOTTRACK 0x0040
@@ -2447,6 +2511,9 @@
#define TCS_OWNERDRAWFIXED 0x2000
#define TCS_TOOLTIPS 0x4000
#define TCS_FOCUSNEVER 0x8000
+#define TCS_EX_FLATSEPARATORS 0x00000001 /* to be used with */
+#define TCS_EX_REGISTERDROP 0x00000002 /* TCM_SETEXTENDEDSTYLE */
+
#define TCM_FIRST 0x1300
@@ -2493,6 +2560,17 @@
#define TCIF_PARAM 0x0008
#define TCIF_STATE 0x0010
+#define TCIS_BUTTONPRESSED 0x0001
+#define TCIS_HIGHLIGHTED 0x0002
+
+
+/* constants for TCHITTESTINFO */
+
+#define TCHT_NOWHERE 0x01
+#define TCHT_ONITEMICON 0x02
+#define TCHT_ONITEMLABEL 0x04
+#define TCHT_ONITEM (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
+
typedef struct tagTCITEM32A {
UINT32 mask;