- Sync comctl32 with Wine 1.1.27 (without imagelist.c)

- Sync comdlg32 with Wine 1.1.27

svn path=/trunk/; revision=42706
This commit is contained in:
Dmitry Chapyshev 2009-08-15 16:15:43 +00:00
parent 88aad4cf0b
commit f23c70c56e
18 changed files with 2566 additions and 1814 deletions

View file

@ -174,7 +174,7 @@ static void COMBOEX_DumpInput (COMBOBOXEXITEMW const *input)
} }
static inline CBE_ITEMDATA *get_item_data(COMBOEX_INFO *infoPtr, INT index) static inline CBE_ITEMDATA *get_item_data(const COMBOEX_INFO *infoPtr, INT index)
{ {
return (CBE_ITEMDATA *)SendMessageW (infoPtr->hwndCombo, CB_GETITEMDATA, return (CBE_ITEMDATA *)SendMessageW (infoPtr->hwndCombo, CB_GETITEMDATA,
(WPARAM)index, 0); (WPARAM)index, 0);
@ -185,7 +185,7 @@ static inline cmp_func_t get_cmp_func(COMBOEX_INFO const *infoPtr)
return infoPtr->dwExtStyle & CBES_EX_CASESENSITIVE ? lstrcmpW : lstrcmpiW; return infoPtr->dwExtStyle & CBES_EX_CASESENSITIVE ? lstrcmpW : lstrcmpiW;
} }
static INT COMBOEX_Notify (COMBOEX_INFO *infoPtr, INT code, NMHDR *hdr) static INT COMBOEX_Notify (const COMBOEX_INFO *infoPtr, INT code, NMHDR *hdr)
{ {
hdr->idFrom = GetDlgCtrlID (infoPtr->hwndSelf); hdr->idFrom = GetDlgCtrlID (infoPtr->hwndSelf);
hdr->hwndFrom = infoPtr->hwndSelf; hdr->hwndFrom = infoPtr->hwndSelf;
@ -198,7 +198,7 @@ static INT COMBOEX_Notify (COMBOEX_INFO *infoPtr, INT code, NMHDR *hdr)
static INT static INT
COMBOEX_NotifyItem (COMBOEX_INFO *infoPtr, UINT code, NMCOMBOBOXEXW *hdr) COMBOEX_NotifyItem (const COMBOEX_INFO *infoPtr, UINT code, NMCOMBOBOXEXW *hdr)
{ {
/* Change the Text item from Unicode to ANSI if necessary for NOTIFY */ /* Change the Text item from Unicode to ANSI if necessary for NOTIFY */
if (infoPtr->NtfUnicode) if (infoPtr->NtfUnicode)
@ -234,7 +234,7 @@ COMBOEX_NotifyItem (COMBOEX_INFO *infoPtr, UINT code, NMCOMBOBOXEXW *hdr)
} }
static INT COMBOEX_NotifyEndEdit (COMBOEX_INFO *infoPtr, NMCBEENDEDITW *neew, LPCWSTR wstr) static INT COMBOEX_NotifyEndEdit (const COMBOEX_INFO *infoPtr, NMCBEENDEDITW *neew, LPCWSTR wstr)
{ {
/* Change the Text item from Unicode to ANSI if necessary for NOTIFY */ /* Change the Text item from Unicode to ANSI if necessary for NOTIFY */
if (infoPtr->NtfUnicode) { if (infoPtr->NtfUnicode) {
@ -254,7 +254,7 @@ static INT COMBOEX_NotifyEndEdit (COMBOEX_INFO *infoPtr, NMCBEENDEDITW *neew, LP
} }
static void COMBOEX_NotifyDragBegin(COMBOEX_INFO *infoPtr, LPCWSTR wstr) static void COMBOEX_NotifyDragBegin(const COMBOEX_INFO *infoPtr, LPCWSTR wstr)
{ {
/* Change the Text item from Unicode to ANSI if necessary for NOTIFY */ /* Change the Text item from Unicode to ANSI if necessary for NOTIFY */
if (infoPtr->NtfUnicode) { if (infoPtr->NtfUnicode) {
@ -303,7 +303,7 @@ static INT COMBOEX_GetIndex(COMBOEX_INFO const *infoPtr, CBE_ITEMDATA const *ite
} }
static LPCWSTR COMBOEX_GetText(COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item) static LPCWSTR COMBOEX_GetText(const COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item)
{ {
NMCOMBOBOXEXW nmce; NMCOMBOBOXEXW nmce;
LPWSTR text, buf; LPWSTR text, buf;
@ -340,7 +340,7 @@ static LPCWSTR COMBOEX_GetText(COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item)
} }
static void COMBOEX_GetComboFontSize (COMBOEX_INFO *infoPtr, SIZE *size) static void COMBOEX_GetComboFontSize (const COMBOEX_INFO *infoPtr, SIZE *size)
{ {
static const WCHAR strA[] = { 'A', 0 }; static const WCHAR strA[] = { 'A', 0 };
HFONT nfont, ofont; HFONT nfont, ofont;
@ -356,7 +356,7 @@ static void COMBOEX_GetComboFontSize (COMBOEX_INFO *infoPtr, SIZE *size)
} }
static void COMBOEX_CopyItem (CBE_ITEMDATA *item, COMBOBOXEXITEMW *cit) static void COMBOEX_CopyItem (const CBE_ITEMDATA *item, COMBOBOXEXITEMW *cit)
{ {
if (cit->mask & CBEIF_TEXT) { if (cit->mask & CBEIF_TEXT) {
/* /*
@ -385,7 +385,7 @@ static void COMBOEX_CopyItem (CBE_ITEMDATA *item, COMBOBOXEXITEMW *cit)
} }
static void COMBOEX_AdjustEditPos (COMBOEX_INFO *infoPtr) static void COMBOEX_AdjustEditPos (const COMBOEX_INFO *infoPtr)
{ {
SIZE mysize; SIZE mysize;
INT x, y, w, h, xioff; INT x, y, w, h, xioff;
@ -419,7 +419,7 @@ static void COMBOEX_AdjustEditPos (COMBOEX_INFO *infoPtr)
} }
static void COMBOEX_ReSize (COMBOEX_INFO *infoPtr) static void COMBOEX_ReSize (const COMBOEX_INFO *infoPtr)
{ {
SIZE mysize; SIZE mysize;
LONG cy; LONG cy;
@ -452,7 +452,7 @@ static void COMBOEX_ReSize (COMBOEX_INFO *infoPtr)
} }
static void COMBOEX_SetEditText (COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item) static void COMBOEX_SetEditText (const COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item)
{ {
if (!infoPtr->hwndEdit) return; if (!infoPtr->hwndEdit) return;
/* native issues the following messages to the {Edit} control */ /* native issues the following messages to the {Edit} control */
@ -467,7 +467,7 @@ static void COMBOEX_SetEditText (COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item)
} }
static CBE_ITEMDATA * COMBOEX_FindItem(COMBOEX_INFO *infoPtr, INT_PTR index) static CBE_ITEMDATA * COMBOEX_FindItem(const COMBOEX_INFO *infoPtr, INT_PTR index)
{ {
CBE_ITEMDATA *item; CBE_ITEMDATA *item;
INT i; INT i;
@ -500,7 +500,7 @@ static inline BOOL COMBOEX_HasEdit(COMBOEX_INFO const *infoPtr)
/* *** CBEM_xxx message support *** */ /* *** CBEM_xxx message support *** */
static UINT COMBOEX_GetListboxText(COMBOEX_INFO *infoPtr, INT_PTR n, LPWSTR buf) static UINT COMBOEX_GetListboxText(const COMBOEX_INFO *infoPtr, INT_PTR n, LPWSTR buf)
{ {
CBE_ITEMDATA *item; CBE_ITEMDATA *item;
LPCWSTR str; LPCWSTR str;
@ -527,7 +527,7 @@ static UINT COMBOEX_GetListboxText(COMBOEX_INFO *infoPtr, INT_PTR n, LPWSTR buf)
} }
static INT COMBOEX_DeleteItem (COMBOEX_INFO *infoPtr, INT_PTR index) static INT COMBOEX_DeleteItem (const COMBOEX_INFO *infoPtr, INT_PTR index)
{ {
TRACE("(index=%ld)\n", index); TRACE("(index=%ld)\n", index);
@ -542,7 +542,7 @@ static INT COMBOEX_DeleteItem (COMBOEX_INFO *infoPtr, INT_PTR index)
} }
static BOOL COMBOEX_GetItemW (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit) static BOOL COMBOEX_GetItemW (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
{ {
INT_PTR index = cit->iItem; INT_PTR index = cit->iItem;
CBE_ITEMDATA *item; CBE_ITEMDATA *item;
@ -563,7 +563,7 @@ static BOOL COMBOEX_GetItemW (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
} }
static BOOL COMBOEX_GetItemA (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA *cit) static BOOL COMBOEX_GetItemA (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA *cit)
{ {
COMBOBOXEXITEMW tmpcit; COMBOBOXEXITEMW tmpcit;
@ -763,7 +763,7 @@ static HIMAGELIST COMBOEX_SetImageList (COMBOEX_INFO *infoPtr, HIMAGELIST himl)
return himlTemp; return himlTemp;
} }
static BOOL COMBOEX_SetItemW (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit) static BOOL COMBOEX_SetItemW (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
{ {
INT_PTR index = cit->iItem; INT_PTR index = cit->iItem;
CBE_ITEMDATA *item; CBE_ITEMDATA *item;
@ -814,7 +814,7 @@ static BOOL COMBOEX_SetItemW (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
return TRUE; return TRUE;
} }
static BOOL COMBOEX_SetItemA (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA const *cit) static BOOL COMBOEX_SetItemA (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA const *cit)
{ {
COMBOBOXEXITEMW citW; COMBOBOXEXITEMW citW;
LPWSTR wstr = NULL; LPWSTR wstr = NULL;
@ -851,7 +851,7 @@ static BOOL COMBOEX_SetUnicodeFormat (COMBOEX_INFO *infoPtr, BOOL value)
/* *** CB_xxx message support *** */ /* *** CB_xxx message support *** */
static INT static INT
COMBOEX_FindStringExact (COMBOEX_INFO *infoPtr, INT start, LPCWSTR str) COMBOEX_FindStringExact (const COMBOEX_INFO *infoPtr, INT start, LPCWSTR str)
{ {
INT i; INT i;
cmp_func_t cmptext = get_cmp_func(infoPtr); cmp_func_t cmptext = get_cmp_func(infoPtr);
@ -860,17 +860,19 @@ COMBOEX_FindStringExact (COMBOEX_INFO *infoPtr, INT start, LPCWSTR str)
/* now search from after starting loc and wrapping back to start */ /* now search from after starting loc and wrapping back to start */
for(i=start+1; i<count; i++) { for(i=start+1; i<count; i++) {
CBE_ITEMDATA *item = get_item_data(infoPtr, i); CBE_ITEMDATA *item = get_item_data(infoPtr, i);
if ((LRESULT)item == CB_ERR) continue;
if (cmptext(COMBOEX_GetText(infoPtr, item), str) == 0) return i; if (cmptext(COMBOEX_GetText(infoPtr, item), str) == 0) return i;
} }
for(i=0; i<=start; i++) { for(i=0; i<=start; i++) {
CBE_ITEMDATA *item = get_item_data(infoPtr, i); CBE_ITEMDATA *item = get_item_data(infoPtr, i);
if ((LRESULT)item == CB_ERR) continue;
if (cmptext(COMBOEX_GetText(infoPtr, item), str) == 0) return i; if (cmptext(COMBOEX_GetText(infoPtr, item), str) == 0) return i;
} }
return CB_ERR; return CB_ERR;
} }
static DWORD_PTR COMBOEX_GetItemData (COMBOEX_INFO *infoPtr, INT_PTR index) static DWORD_PTR COMBOEX_GetItemData (const COMBOEX_INFO *infoPtr, INT_PTR index)
{ {
CBE_ITEMDATA const *item1; CBE_ITEMDATA const *item1;
CBE_ITEMDATA const *item2; CBE_ITEMDATA const *item2;
@ -910,7 +912,7 @@ static INT COMBOEX_SetCursel (COMBOEX_INFO *infoPtr, INT_PTR index)
} }
static DWORD_PTR COMBOEX_SetItemData (COMBOEX_INFO *infoPtr, INT_PTR index, DWORD_PTR data) static DWORD_PTR COMBOEX_SetItemData (const COMBOEX_INFO *infoPtr, INT_PTR index, DWORD_PTR data)
{ {
CBE_ITEMDATA *item1; CBE_ITEMDATA *item1;
CBE_ITEMDATA const *item2; CBE_ITEMDATA const *item2;
@ -1332,7 +1334,7 @@ static BOOL COMBOEX_WM_DeleteItem (COMBOEX_INFO *infoPtr, DELETEITEMSTRUCT const
} }
static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *dis) static LRESULT COMBOEX_DrawItem (const COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *dis)
{ {
static const WCHAR nil[] = { 0 }; static const WCHAR nil[] = { 0 };
CBE_ITEMDATA *item = 0; CBE_ITEMDATA *item = 0;
@ -1669,7 +1671,7 @@ static LRESULT COMBOEX_Size (COMBOEX_INFO *infoPtr, INT width, INT height)
} }
static LRESULT COMBOEX_SetRedraw(COMBOEX_INFO *infoPtr, WPARAM wParam, LPARAM lParam) static LRESULT COMBOEX_SetRedraw(const COMBOEX_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{ {
LRESULT ret = DefWindowProcW( infoPtr->hwndSelf, WM_SETREDRAW, wParam, lParam ); LRESULT ret = DefWindowProcW( infoPtr->hwndSelf, WM_SETREDRAW, wParam, lParam );
if (wParam) RedrawWindow( infoPtr->hwndSelf, NULL, 0, RDW_INVALIDATE|RDW_ERASE|RDW_ALLCHILDREN ); if (wParam) RedrawWindow( infoPtr->hwndSelf, NULL, 0, RDW_INVALIDATE|RDW_ERASE|RDW_ALLCHILDREN );
@ -1677,7 +1679,7 @@ static LRESULT COMBOEX_SetRedraw(COMBOEX_INFO *infoPtr, WPARAM wParam, LPARAM lP
} }
static LRESULT COMBOEX_WindowPosChanging (COMBOEX_INFO *infoPtr, WINDOWPOS *wp) static LRESULT COMBOEX_WindowPosChanging (const COMBOEX_INFO *infoPtr, WINDOWPOS *wp)
{ {
RECT cbx_wrect, cbx_crect, cb_wrect; RECT cbx_wrect, cbx_crect, cb_wrect;
INT width, height; INT width, height;

View file

@ -183,15 +183,15 @@ DWORD WINAPI GetSize (LPVOID);
INT WINAPI Str_GetPtrA (LPCSTR, LPSTR, INT); INT WINAPI Str_GetPtrA (LPCSTR, LPSTR, INT);
INT WINAPI Str_GetPtrW (LPCWSTR, LPWSTR, INT); INT WINAPI Str_GetPtrW (LPCWSTR, LPWSTR, INT);
INT WINAPI DPA_GetPtrIndex (const HDPA, LPVOID); INT WINAPI DPA_GetPtrIndex (HDPA, LPCVOID);
BOOL WINAPI DPA_Grow (const HDPA, INT); BOOL WINAPI DPA_Grow (HDPA, INT);
#define DPAM_NOSORT 0x0001 #define DPAM_NOSORT 0x0001
#define DPAM_INSERT 0x0004 #define DPAM_INSERT 0x0004
#define DPAM_DELETE 0x0008 #define DPAM_DELETE 0x0008
typedef PVOID (CALLBACK *PFNDPAMERGE)(DWORD,PVOID,PVOID,LPARAM); typedef PVOID (CALLBACK *PFNDPAMERGE)(DWORD,PVOID,PVOID,LPARAM);
BOOL WINAPI DPA_Merge (const HDPA, const HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM); BOOL WINAPI DPA_Merge (HDPA, HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM);
#define DPA_GetPtrCount(hdpa) (*(INT*)(hdpa)) #define DPA_GetPtrCount(hdpa) (*(INT*)(hdpa))

View file

@ -385,7 +385,7 @@ INT WINAPI FindMRUData (HANDLE hList, LPCVOID lpData, DWORD cbData,
UINT i; UINT i;
LPSTR dataA = NULL; LPSTR dataA = NULL;
if (!mp->extview.lpfnCompare) if (!mp || !mp->extview.lpfnCompare)
return -1; return -1;
if(!(mp->extview.dwFlags & MRUF_BINARY_LIST) && !mp->isUnicode) { if(!(mp->extview.dwFlags & MRUF_BINARY_LIST) && !mp->isUnicode) {
@ -834,6 +834,7 @@ INT WINAPI EnumMRUListW (HANDLE hList, INT nItemPos, LPVOID lpBuffer,
const WINEMRUITEM *witem; const WINEMRUITEM *witem;
INT desired, datasize; INT desired, datasize;
if (!mp) return -1;
if ((nItemPos < 0) || !lpBuffer) return mp->cursize; if ((nItemPos < 0) || !lpBuffer) return mp->cursize;
if (nItemPos >= mp->cursize) return -1; if (nItemPos >= mp->cursize) return -1;
desired = mp->realMRU[nItemPos]; desired = mp->realMRU[nItemPos];
@ -860,6 +861,7 @@ INT WINAPI EnumMRUListA (HANDLE hList, INT nItemPos, LPVOID lpBuffer,
INT desired, datasize; INT desired, datasize;
DWORD lenA; DWORD lenA;
if (!mp) return -1;
if ((nItemPos < 0) || !lpBuffer) return mp->cursize; if ((nItemPos < 0) || !lpBuffer) return mp->cursize;
if (nItemPos >= mp->cursize) return -1; if (nItemPos >= mp->cursize) return -1;
desired = mp->realMRU[nItemPos]; desired = mp->realMRU[nItemPos];

View file

@ -217,7 +217,7 @@ HRESULT WINAPI DPA_SaveStream (const HDPA hDpa, DPALOADPROC loadProc,
* NOTES * NOTES
* No more information available yet! * No more information available yet!
*/ */
BOOL WINAPI DPA_Merge (const HDPA hdpa1, const HDPA hdpa2, DWORD dwFlags, BOOL WINAPI DPA_Merge (HDPA hdpa1, HDPA hdpa2, DWORD dwFlags,
PFNDPACOMPARE pfnCompare, PFNDPAMERGE pfnMerge, PFNDPACOMPARE pfnCompare, PFNDPAMERGE pfnMerge,
LPARAM lParam) LPARAM lParam)
{ {
@ -381,7 +381,7 @@ BOOL WINAPI DPA_Destroy (const HDPA hdpa)
* Success: TRUE * Success: TRUE
* Failure: FALSE * Failure: FALSE
*/ */
BOOL WINAPI DPA_Grow (const HDPA hdpa, INT nGrow) BOOL WINAPI DPA_Grow (HDPA hdpa, INT nGrow)
{ {
TRACE("(%p %d)\n", hdpa, nGrow); TRACE("(%p %d)\n", hdpa, nGrow);
@ -504,7 +504,7 @@ LPVOID WINAPI DPA_GetPtr (const HDPA hdpa, INT nIndex)
* Success: index of the specified pointer * Success: index of the specified pointer
* Failure: -1 * Failure: -1
*/ */
INT WINAPI DPA_GetPtrIndex (const HDPA hdpa, LPVOID p) INT WINAPI DPA_GetPtrIndex (HDPA hdpa, LPCVOID p)
{ {
INT i; INT i;
@ -802,7 +802,8 @@ INT WINAPI DPA_Search (const HDPA hdpa, LPVOID pFind, INT nStart,
INT l, r, x, n; INT l, r, x, n;
LPVOID *lpPtr; LPVOID *lpPtr;
l = (nStart == -1) ? 0 : nStart; /* for binary search ignore start index */
l = 0;
r = hdpa->nItemCount - 1; r = hdpa->nItemCount - 1;
lpPtr = hdpa->ptrs; lpPtr = hdpa->ptrs;
while (r >= l) { while (r >= l) {

View file

@ -247,8 +247,7 @@ HEADER_SetItemBounds (HEADER_INFO *infoPtr)
static LRESULT static LRESULT
HEADER_Size (HEADER_INFO *infoPtr) HEADER_Size (HEADER_INFO *infoPtr)
{ {
infoPtr->bRectsValid = FALSE; HEADER_SetItemBounds(infoPtr);
return 0; return 0;
} }
@ -329,18 +328,21 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
} }
else { else {
HBRUSH hbr; HBRUSH hbr;
if (infoPtr->dwStyle & HDS_BUTTONS) { if (!(infoPtr->dwStyle & HDS_FLAT))
if (phdi->bDown) { {
DrawEdge (hdc, &r, BDR_RAISEDOUTER, if (infoPtr->dwStyle & HDS_BUTTONS) {
BF_RECT | BF_FLAT | BF_MIDDLE | BF_ADJUST); if (phdi->bDown) {
DrawEdge (hdc, &r, BDR_RAISEDOUTER,
BF_RECT | BF_FLAT | BF_MIDDLE | BF_ADJUST);
}
else
DrawEdge (hdc, &r, EDGE_RAISED,
BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST);
} }
else else
DrawEdge (hdc, &r, EDGE_RAISED, DrawEdge (hdc, &r, EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST);
BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST);
} }
else
DrawEdge (hdc, &r, EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST);
hbr = CreateSolidBrush(GetBkColor(hdc)); hbr = CreateSolidBrush(GetBkColor(hdc));
FillRect(hdc, &r, hbr); FillRect(hdc, &r, hbr);
@ -547,14 +549,19 @@ HEADER_Refresh (HEADER_INFO *infoPtr, HDC hdc)
if (theme != NULL) { if (theme != NULL) {
DrawThemeBackground(theme, hdc, HP_HEADERITEM, HIS_NORMAL, &rcRest, NULL); DrawThemeBackground(theme, hdc, HP_HEADERITEM, HIS_NORMAL, &rcRest, NULL);
} }
else { else if (infoPtr->dwStyle & HDS_FLAT) {
hbrBk = GetSysColorBrush(COLOR_3DFACE);
FillRect(hdc, &rcRest, hbrBk);
}
else
{
if (infoPtr->dwStyle & HDS_BUTTONS) if (infoPtr->dwStyle & HDS_BUTTONS)
DrawEdge (hdc, &rcRest, EDGE_RAISED, BF_TOP|BF_LEFT|BF_BOTTOM|BF_SOFT|BF_MIDDLE); DrawEdge (hdc, &rcRest, EDGE_RAISED, BF_TOP|BF_LEFT|BF_BOTTOM|BF_SOFT|BF_MIDDLE);
else else
DrawEdge (hdc, &rcRest, EDGE_ETCHED, BF_BOTTOM|BF_MIDDLE); DrawEdge (hdc, &rcRest, EDGE_ETCHED, BF_BOTTOM|BF_MIDDLE);
} }
} }
if (infoPtr->iHotDivider != -1) if (infoPtr->iHotDivider != -1)
HEADER_DrawHotDivider(infoPtr, hdc); HEADER_DrawHotDivider(infoPtr, hdc);
@ -1189,7 +1196,7 @@ HEADER_GetOrderArray(const HEADER_INFO *infoPtr, INT size, LPINT order)
} }
static LRESULT static LRESULT
HEADER_SetOrderArray(HEADER_INFO *infoPtr, INT size, LPINT order) HEADER_SetOrderArray(HEADER_INFO *infoPtr, INT size, const INT *order)
{ {
INT i; INT i;
HEADER_ITEM *lpItem; HEADER_ITEM *lpItem;
@ -1202,7 +1209,7 @@ HEADER_SetOrderArray(HEADER_INFO *infoPtr, INT size, LPINT order)
lpItem = &infoPtr->items[*order++]; lpItem = &infoPtr->items[*order++];
lpItem->iOrder=i; lpItem->iOrder=i;
} }
infoPtr->bRectsValid=0; HEADER_SetItemBounds(infoPtr);
InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
return TRUE; return TRUE;
} }
@ -1217,10 +1224,12 @@ HEADER_GetUnicodeFormat (const HEADER_INFO *infoPtr)
static LRESULT static LRESULT
HEADER_HitTest (const HEADER_INFO *infoPtr, LPHDHITTESTINFO phti) HEADER_HitTest (const HEADER_INFO *infoPtr, LPHDHITTESTINFO phti)
{ {
UINT outside = HHT_NOWHERE | HHT_ABOVE | HHT_BELOW | HHT_TOLEFT | HHT_TORIGHT;
HEADER_InternalHitTest (infoPtr, &phti->pt, &phti->flags, &phti->iItem); HEADER_InternalHitTest (infoPtr, &phti->pt, &phti->flags, &phti->iItem);
if (phti->flags == HHT_NOWHERE) if (phti->flags & outside)
return -1; return phti->iItem = -1;
else else
return phti->iItem; return phti->iItem;
} }
@ -1400,7 +1409,7 @@ HEADER_SetUnicodeFormat (HEADER_INFO *infoPtr, WPARAM wParam)
static LRESULT static LRESULT
HEADER_Create (HWND hwnd, LPCREATESTRUCTW lpcs) HEADER_Create (HWND hwnd, const CREATESTRUCTW *lpcs)
{ {
HEADER_INFO *infoPtr; HEADER_INFO *infoPtr;
TEXTMETRICW tm; TEXTMETRICW tm;
@ -1496,7 +1505,7 @@ HEADER_IsDragDistance(const HEADER_INFO *infoPtr, const POINT *pt)
} }
static LRESULT static LRESULT
HEADER_LButtonDblClk (HEADER_INFO *infoPtr, INT x, INT y) HEADER_LButtonDblClk (const HEADER_INFO *infoPtr, INT x, INT y)
{ {
POINT pt; POINT pt;
UINT flags; UINT flags;
@ -1582,6 +1591,9 @@ HEADER_LButtonUp (HEADER_INFO *infoPtr, INT x, INT y)
HEADER_InternalHitTest (infoPtr, &pt, &flags, &nItem); HEADER_InternalHitTest (infoPtr, &pt, &flags, &nItem);
if (infoPtr->bPressed) { if (infoPtr->bPressed) {
infoPtr->items[infoPtr->iMoveItem].bDown = FALSE;
if (infoPtr->bDragging) if (infoPtr->bDragging)
{ {
HEADER_ITEM *lpItem = &infoPtr->items[infoPtr->iMoveItem]; HEADER_ITEM *lpItem = &infoPtr->items[infoPtr->iMoveItem];
@ -1589,8 +1601,7 @@ HEADER_LButtonUp (HEADER_INFO *infoPtr, INT x, INT y)
ImageList_DragShowNolock(FALSE); ImageList_DragShowNolock(FALSE);
ImageList_EndDrag(); ImageList_EndDrag();
lpItem->bDown=FALSE;
if (infoPtr->iHotDivider == -1) if (infoPtr->iHotDivider == -1)
iNewOrder = -1; iNewOrder = -1;
else if (infoPtr->iHotDivider == infoPtr->uNumItem) else if (infoPtr->iHotDivider == infoPtr->uNumItem)
@ -1615,14 +1626,14 @@ HEADER_LButtonUp (HEADER_INFO *infoPtr, INT x, INT y)
infoPtr->bDragging = FALSE; infoPtr->bDragging = FALSE;
HEADER_SetHotDivider(infoPtr, FALSE, -1); HEADER_SetHotDivider(infoPtr, FALSE, -1);
} }
else if (!(infoPtr->dwStyle & HDS_DRAGDROP) || !HEADER_IsDragDistance(infoPtr, &pt)) else
{ {
infoPtr->items[infoPtr->iMoveItem].bDown = FALSE;
hdc = GetDC (infoPtr->hwndSelf); hdc = GetDC (infoPtr->hwndSelf);
HEADER_RefreshItem (infoPtr, infoPtr->iMoveItem); HEADER_RefreshItem (infoPtr, infoPtr->iMoveItem);
ReleaseDC (infoPtr->hwndSelf, hdc); ReleaseDC (infoPtr->hwndSelf, hdc);
HEADER_SendNotifyWithHDItemT(infoPtr, HDN_ITEMCLICKW, infoPtr->iMoveItem, NULL); if (!(infoPtr->dwStyle & HDS_DRAGDROP) || !HEADER_IsDragDistance(infoPtr, &pt))
HEADER_SendNotifyWithHDItemT(infoPtr, HDN_ITEMCLICKW, infoPtr->iMoveItem, NULL);
} }
TRACE("Released item %d!\n", infoPtr->iMoveItem); TRACE("Released item %d!\n", infoPtr->iMoveItem);
@ -1923,7 +1934,7 @@ static LRESULT HEADER_SetRedraw(HEADER_INFO *infoPtr, WPARAM wParam, LPARAM lPar
} }
static INT HEADER_StyleChanged(HEADER_INFO *infoPtr, WPARAM wStyleType, static INT HEADER_StyleChanged(HEADER_INFO *infoPtr, WPARAM wStyleType,
const LPSTYLESTRUCT lpss) const STYLESTRUCT *lpss)
{ {
TRACE("(styletype=%lx, styleOld=0x%08x, styleNew=0x%08x)\n", TRACE("(styletype=%lx, styleOld=0x%08x, styleNew=0x%08x)\n",
wStyleType, lpss->styleOld, lpss->styleNew); wStyleType, lpss->styleOld, lpss->styleNew);

View file

@ -239,10 +239,9 @@ HOTKEY_Create (HOTKEY_INFO *infoPtr, const CREATESTRUCTW *lpcs)
static LRESULT static LRESULT
HOTKEY_Destroy (HOTKEY_INFO *infoPtr) HOTKEY_Destroy (HOTKEY_INFO *infoPtr)
{ {
HWND hwnd = infoPtr->hwndSelf;
/* free hotkey info data */ /* free hotkey info data */
SetWindowLongPtrW (infoPtr->hwndSelf, 0, 0);
Free (infoPtr); Free (infoPtr);
SetWindowLongPtrW (hwnd, 0, 0);
return 0; return 0;
} }

File diff suppressed because it is too large Load diff

View file

@ -27,6 +27,16 @@
* the specification mentioned above. * the specification mentioned above.
* If you discover missing features, or bugs, please note them below. * If you discover missing features, or bugs, please note them below.
* *
* TODO:
*
* Messages:
* -- PBM_GETSTEP
* -- PBM_SETSTATE
* -- PBM_GETSTATE
*
* Styles:
* -- PBS_SMOOTHREVERSE
*
*/ */
#include <stdarg.h> #include <stdarg.h>
@ -253,38 +263,22 @@ static const ProgressDrawProc drawProcClassic[8] = {
static void draw_theme_bar_H (const ProgressDrawInfo* di, int start, int end) static void draw_theme_bar_H (const ProgressDrawInfo* di, int start, int end)
{ {
RECT r; RECT r;
int right = di->rect.left + end;
r.left = di->rect.left + start; r.left = di->rect.left + start;
r.top = di->rect.top; r.top = di->rect.top;
r.bottom = di->rect.bottom; r.bottom = di->rect.bottom;
while (r.left < right) r.right = di->rect.left + end;
{ DrawThemeBackground (di->theme, di->hdc, PP_CHUNK, 0, &r, NULL);
r.right = min (r.left + di->ledW, right);
DrawThemeBackground (di->theme, di->hdc, PP_CHUNK, 0, &r, NULL);
r.left = r.right;
r.right = min (r.left + di->ledGap, right);
DrawThemeBackground (di->theme, di->hdc, PP_BAR, 0, &di->bgRect, &r);
r.left = r.right;
}
} }
/* draw themed horizontal bar from 'start' to 'end' */ /* draw themed vertical bar from 'start' to 'end' */
static void draw_theme_bar_V (const ProgressDrawInfo* di, int start, int end) static void draw_theme_bar_V (const ProgressDrawInfo* di, int start, int end)
{ {
RECT r; RECT r;
int top = di->rect.bottom - end;
r.left = di->rect.left; r.left = di->rect.left;
r.right = di->rect.right; r.right = di->rect.right;
r.bottom = di->rect.bottom - start; r.bottom = di->rect.bottom - start;
while (r.bottom > top) r.top = di->rect.bottom - end;
{ DrawThemeBackground (di->theme, di->hdc, PP_CHUNKVERT, 0, &r, NULL);
r.top = max (r.bottom - di->ledW, top);
DrawThemeBackground (di->theme, di->hdc, PP_CHUNKVERT, 0, &r, NULL);
r.bottom = r.top;
r.top = max (r.bottom - di->ledGap, top);
DrawThemeBackground (di->theme, di->hdc, PP_BARVERT, 0, &di->bgRect, &r);
r.bottom = r.top;
}
} }
/* draw themed horizontal background from 'start' to 'end' */ /* draw themed horizontal background from 'start' to 'end' */
@ -703,11 +697,17 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
InvalidateRect(hwnd, NULL, TRUE); InvalidateRect(hwnd, NULL, TRUE);
return 0; return 0;
case PBM_GETBARCOLOR:
return infoPtr->ColorBar;
case PBM_SETBKCOLOR: case PBM_SETBKCOLOR:
infoPtr->ColorBk = (COLORREF)lParam; infoPtr->ColorBk = (COLORREF)lParam;
InvalidateRect(hwnd, NULL, TRUE); InvalidateRect(hwnd, NULL, TRUE);
return 0; return 0;
case PBM_GETBKCOLOR:
return infoPtr->ColorBk;
case PBM_SETMARQUEE: case PBM_SETMARQUEE:
if(wParam != 0) if(wParam != 0)
{ {

View file

@ -452,7 +452,7 @@ static int get_rect_cy(const REBAR_INFO *infoPtr, const RECT *lpRect)
return lpRect->bottom - lpRect->top; return lpRect->bottom - lpRect->top;
} }
static int round_child_height(REBAR_BAND *lpBand, int cyHeight) static int round_child_height(const REBAR_BAND *lpBand, int cyHeight)
{ {
int cy = 0; int cy = 0;
if (lpBand->cyIntegral == 0) if (lpBand->cyIntegral == 0)
@ -1699,11 +1699,11 @@ REBAR_CommonSetupBand(HWND hwnd, const REBARBANDINFOW *lprbbi, REBAR_BAND *lpBan
if( (lprbbi->fMask & RBBIM_CHILDSIZE) && if( (lprbbi->fMask & RBBIM_CHILDSIZE) &&
( (lpBand->cxMinChild != lprbbi->cxMinChild) || ( (lpBand->cxMinChild != lprbbi->cxMinChild) ||
(lpBand->cyMinChild != lprbbi->cyMinChild ) || (lpBand->cyMinChild != lprbbi->cyMinChild ) ||
( (lprbbi->cbSize >= sizeof (REBARBANDINFOA) && (lpBand->fStyle & RBBS_VARIABLEHEIGHT)) && ( (lprbbi->cbSize >= REBARBANDINFOA_V6_SIZE && (lpBand->fStyle & RBBS_VARIABLEHEIGHT)) &&
( (lpBand->cyChild != lprbbi->cyChild ) || ( (lpBand->cyChild != lprbbi->cyChild ) ||
(lpBand->cyMaxChild != lprbbi->cyMaxChild ) || (lpBand->cyMaxChild != lprbbi->cyMaxChild ) ||
(lpBand->cyIntegral != lprbbi->cyIntegral ) ) ) || (lpBand->cyIntegral != lprbbi->cyIntegral ) ) ) ||
( (lprbbi->cbSize < sizeof (REBARBANDINFOA)) && ( (lprbbi->cbSize < REBARBANDINFOA_V6_SIZE) &&
( (lpBand->cyChild || ( (lpBand->cyChild ||
lpBand->cyMaxChild || lpBand->cyMaxChild ||
lpBand->cyIntegral ) ) ) ) ) lpBand->cyIntegral ) ) ) ) )
@ -1711,7 +1711,7 @@ REBAR_CommonSetupBand(HWND hwnd, const REBARBANDINFOW *lprbbi, REBAR_BAND *lpBan
lpBand->cxMinChild = lprbbi->cxMinChild; lpBand->cxMinChild = lprbbi->cxMinChild;
lpBand->cyMinChild = lprbbi->cyMinChild; lpBand->cyMinChild = lprbbi->cyMinChild;
/* These fields where added in WIN32_IE == 0x400 and are set only for RBBS_VARIABLEHEIGHT bands */ /* These fields where added in WIN32_IE == 0x400 and are set only for RBBS_VARIABLEHEIGHT bands */
if (lprbbi->cbSize >= sizeof (REBARBANDINFOA) && (lpBand->fStyle & RBBS_VARIABLEHEIGHT)) { if (lprbbi->cbSize >= REBARBANDINFOA_V6_SIZE && (lpBand->fStyle & RBBS_VARIABLEHEIGHT)) {
lpBand->cyMaxChild = lprbbi->cyMaxChild; lpBand->cyMaxChild = lprbbi->cyMaxChild;
lpBand->cyIntegral = lprbbi->cyIntegral; lpBand->cyIntegral = lprbbi->cyIntegral;
@ -1747,7 +1747,7 @@ REBAR_CommonSetupBand(HWND hwnd, const REBARBANDINFOW *lprbbi, REBAR_BAND *lpBan
} }
/* check for additional data */ /* check for additional data */
if (lprbbi->cbSize >= sizeof (REBARBANDINFOA)) { if (lprbbi->cbSize >= REBARBANDINFOA_V6_SIZE) {
if( (lprbbi->fMask & RBBIM_IDEALSIZE) && if( (lprbbi->fMask & RBBIM_IDEALSIZE) &&
( lpBand->cxIdeal != lprbbi->cxIdeal ) ) ( lpBand->cxIdeal != lprbbi->cxIdeal ) )
{ {
@ -2167,7 +2167,7 @@ REBAR_GetBandInfoT(const REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL
lprbbi->cyMinChild = lpBand->cyMinChild; lprbbi->cyMinChild = lpBand->cyMinChild;
/* to make tests pass we follow Windows behaviour and allow to read these fields only /* to make tests pass we follow Windows behaviour and allow to read these fields only
* for RBBS_VARIABLEHEIGHTS bands */ * for RBBS_VARIABLEHEIGHTS bands */
if (lprbbi->cbSize >= sizeof (REBARBANDINFOA) && (lpBand->fStyle & RBBS_VARIABLEHEIGHT)) { if (lprbbi->cbSize >= REBARBANDINFOW_V6_SIZE && (lpBand->fStyle & RBBS_VARIABLEHEIGHT)) {
lprbbi->cyChild = lpBand->cyChild; lprbbi->cyChild = lpBand->cyChild;
lprbbi->cyMaxChild = lpBand->cyMaxChild; lprbbi->cyMaxChild = lpBand->cyMaxChild;
lprbbi->cyIntegral = lpBand->cyIntegral; lprbbi->cyIntegral = lpBand->cyIntegral;
@ -2184,7 +2184,7 @@ REBAR_GetBandInfoT(const REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL
lprbbi->wID = lpBand->wID; lprbbi->wID = lpBand->wID;
/* check for additional data */ /* check for additional data */
if (lprbbi->cbSize >= sizeof (REBARBANDINFOA)) { if (lprbbi->cbSize >= REBARBANDINFOW_V6_SIZE) {
if (lprbbi->fMask & RBBIM_IDEALSIZE) if (lprbbi->fMask & RBBIM_IDEALSIZE)
lprbbi->cxIdeal = lpBand->cxIdeal; lprbbi->cxIdeal = lpBand->cxIdeal;
@ -2424,7 +2424,7 @@ REBAR_InsertBandT(REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL bUnico
REBAR_CommonSetupBand(infoPtr->hwndSelf, lprbbi, lpBand); REBAR_CommonSetupBand(infoPtr->hwndSelf, lprbbi, lpBand);
/* Make sure the defaults for these are correct */ /* Make sure the defaults for these are correct */
if (lprbbi->cbSize < sizeof (REBARBANDINFOA) || !(lpBand->fStyle & RBBS_VARIABLEHEIGHT)) { if (lprbbi->cbSize < REBARBANDINFOA_V6_SIZE || !(lpBand->fStyle & RBBS_VARIABLEHEIGHT)) {
lpBand->cyChild = lpBand->cyMinChild; lpBand->cyChild = lpBand->cyMinChild;
lpBand->cyMaxChild = 0x7fffffff; lpBand->cyMaxChild = 0x7fffffff;
lpBand->cyIntegral = 0; lpBand->cyIntegral = 0;

View file

@ -333,7 +333,7 @@ STATUSBAR_Refresh (STATUS_INFO *infoPtr, HDC hdc)
static int static int
STATUSBAR_InternalHitTest(const STATUS_INFO *infoPtr, const LPPOINT pt) STATUSBAR_InternalHitTest(const STATUS_INFO *infoPtr, const POINT *pt)
{ {
int i; int i;
if (infoPtr->simple) if (infoPtr->simple)

View file

@ -1329,10 +1329,8 @@ static LRESULT SYSLINK_SetFocus (SYSLINK_INFO *infoPtr)
if(Focus != NULL) if(Focus != NULL)
{ {
SYSLINK_SetFocusLink(infoPtr, Focus); SYSLINK_SetFocusLink(infoPtr, Focus);
SYSLINK_RepaintLink(infoPtr, Focus);
} }
SYSLINK_RepaintLink(infoPtr, Focus);
return 0; return 0;
} }
@ -1476,7 +1474,7 @@ static BOOL SYSKEY_SelectNextPrevLink (const SYSLINK_INFO *infoPtr, BOOL Prev)
{ {
OldFocus = SYSLINK_SetFocusLink(infoPtr, NewFocus); OldFocus = SYSLINK_SetFocusLink(infoPtr, NewFocus);
if(OldFocus != NewFocus) if(OldFocus && OldFocus != NewFocus)
{ {
SYSLINK_RepaintLink(infoPtr, OldFocus); SYSLINK_RepaintLink(infoPtr, OldFocus);
} }

View file

@ -1445,7 +1445,7 @@ static void TAB_SetItemBounds (TAB_INFO *infoPtr)
static void static void
TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect) TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, const RECT *drawRect)
{ {
LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE);
HBRUSH hbr = CreateSolidBrush (comctl32_color.clrBtnFace); HBRUSH hbr = CreateSolidBrush (comctl32_color.clrBtnFace);
@ -3223,7 +3223,7 @@ TAB_SetExtendedStyle (TAB_INFO *infoPtr, DWORD exMask, DWORD exStyle)
} }
static inline LRESULT static inline LRESULT
TAB_GetExtendedStyle (TAB_INFO *infoPtr) TAB_GetExtendedStyle (const TAB_INFO *infoPtr)
{ {
return infoPtr->exStyle; return infoPtr->exStyle;
} }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -119,6 +119,7 @@ typedef struct tagTREEVIEW_INFO
HTREEITEM selectedItem; /* handle to selected item or 0 if none */ HTREEITEM selectedItem; /* handle to selected item or 0 if none */
HTREEITEM hotItem; /* handle currently under cursor, 0 if none */ HTREEITEM hotItem; /* handle currently under cursor, 0 if none */
HTREEITEM focusedItem; /* item that was under the cursor when WM_LBUTTONDOWN was received */ HTREEITEM focusedItem; /* item that was under the cursor when WM_LBUTTONDOWN was received */
HTREEITEM editItem; /* item being edited with builtin edit box */
HTREEITEM firstVisible; /* handle to first visible item */ HTREEITEM firstVisible; /* handle to first visible item */
LONG maxVisibleOrder; LONG maxVisibleOrder;
@ -710,7 +711,7 @@ static void
TREEVIEW_UpdateDispInfo(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, TREEVIEW_UpdateDispInfo(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem,
UINT mask) UINT mask)
{ {
NMTVDISPINFOW callback; NMTVDISPINFOEXW callback;
HWND hwnd = infoPtr->hwnd; HWND hwnd = infoPtr->hwnd;
TRACE("mask %x callbackMask %x\n", mask, wineItem->callbackMask); TRACE("mask %x callbackMask %x\n", mask, wineItem->callbackMask);
@ -1255,6 +1256,7 @@ TREEVIEW_InsertItemT(TREEVIEW_INFO *infoPtr, const TVINSERTSTRUCTW *ptdi, BOOL i
newItem->parent = parentItem; newItem->parent = parentItem;
newItem->iIntegral = 1; newItem->iIntegral = 1;
newItem->visibleOrder = -1;
if (!TREEVIEW_DoSetItemT(infoPtr, newItem, tvItem, isW)) if (!TREEVIEW_DoSetItemT(infoPtr, newItem, tvItem, isW))
return 0; return 0;
@ -1367,6 +1369,8 @@ TREEVIEW_InsertItemT(TREEVIEW_INFO *infoPtr, const TVINSERTSTRUCTW *ptdi, BOOL i
TREEVIEW_VerifyTree(infoPtr); TREEVIEW_VerifyTree(infoPtr);
if (!infoPtr->bRedraw) return (LRESULT)newItem;
if (parentItem == infoPtr->root || if (parentItem == infoPtr->root ||
(ISVISIBLE(parentItem) && parentItem->state & TVIS_EXPANDED)) (ISVISIBLE(parentItem) && parentItem->state & TVIS_EXPANDED))
{ {
@ -1392,8 +1396,6 @@ TREEVIEW_InsertItemT(TREEVIEW_INFO *infoPtr, const TVINSERTSTRUCTW *ptdi, BOOL i
} }
else else
{ {
newItem->visibleOrder = -1;
/* refresh treeview if newItem is the first item inserted under parentItem */ /* refresh treeview if newItem is the first item inserted under parentItem */
if (ISVISIBLE(parentItem) && newItem->prevSibling == newItem->nextSibling) if (ISVISIBLE(parentItem) && newItem->prevSibling == newItem->nextSibling)
{ {
@ -1564,6 +1566,7 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
TREEVIEW_VerifyTree(infoPtr); TREEVIEW_VerifyTree(infoPtr);
if (!infoPtr->bRedraw) return TRUE;
if (visible) if (visible)
{ {
@ -1586,12 +1589,16 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
static LRESULT static LRESULT
TREEVIEW_SetRedraw(TREEVIEW_INFO* infoPtr, WPARAM wParam) TREEVIEW_SetRedraw(TREEVIEW_INFO* infoPtr, WPARAM wParam)
{ {
if(wParam) infoPtr->bRedraw = wParam ? TRUE : FALSE;
infoPtr->bRedraw = TRUE;
else
infoPtr->bRedraw = FALSE;
return 0; if (infoPtr->bRedraw)
{
TREEVIEW_UpdateSubTree(infoPtr, infoPtr->root);
TREEVIEW_RecalculateVisibleOrder(infoPtr, NULL);
TREEVIEW_UpdateScrollBars(infoPtr);
TREEVIEW_Invalidate(infoPtr, NULL);
}
return 0;
} }
static LRESULT static LRESULT
@ -3545,6 +3552,14 @@ TREEVIEW_Edit_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TRUE; return TRUE;
break; break;
case WM_DESTROY:
{
WNDPROC editProc = infoPtr->wpEditOrig;
infoPtr->wpEditOrig = 0;
SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (DWORD_PTR)editProc);
return CallWindowProcW(editProc, hwnd, uMsg, wParam, lParam);
}
case WM_GETDLGCODE: case WM_GETDLGCODE:
return DLGC_WANTARROWS | DLGC_WANTALLKEYS; return DLGC_WANTARROWS | DLGC_WANTALLKEYS;
@ -3580,7 +3595,7 @@ TREEVIEW_Edit_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static LRESULT static LRESULT
TREEVIEW_Command(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam) TREEVIEW_Command(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{ {
TRACE("%lx %ld\n", wParam, lParam); TRACE("code=%x, id=%x, handle=%lx\n", HIWORD(wParam), LOWORD(wParam), lParam);
switch (HIWORD(wParam)) switch (HIWORD(wParam))
{ {
@ -3590,11 +3605,15 @@ TREEVIEW_Command(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
* Adjust the edit window size * Adjust the edit window size
*/ */
WCHAR buffer[1024]; WCHAR buffer[1024];
TREEVIEW_ITEM *editItem = infoPtr->selectedItem; TREEVIEW_ITEM *editItem = infoPtr->editItem;
HDC hdc = GetDC(infoPtr->hwndEdit); HDC hdc = GetDC(infoPtr->hwndEdit);
SIZE sz; SIZE sz;
HFONT hFont, hOldFont = 0; HFONT hFont, hOldFont = 0;
TRACE("edit=%p\n", infoPtr->hwndEdit);
if (!IsWindow(infoPtr->hwndEdit) || !hdc) return FALSE;
infoPtr->bLabelChanged = TRUE; infoPtr->bLabelChanged = TRUE;
GetWindowTextW(infoPtr->hwndEdit, buffer, sizeof(buffer)/sizeof(buffer[0])); GetWindowTextW(infoPtr->hwndEdit, buffer, sizeof(buffer)/sizeof(buffer[0]));
@ -3636,6 +3655,12 @@ TREEVIEW_Command(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
ReleaseDC(infoPtr->hwnd, hdc); ReleaseDC(infoPtr->hwnd, hdc);
break; break;
} }
case EN_KILLFOCUS:
/* apparently we should respect passed handle value */
if (infoPtr->hwndEdit != (HWND)lParam) return FALSE;
TREEVIEW_EndEditLabelNow(infoPtr, FALSE);
break;
default: default:
return SendMessageW(infoPtr->hwndNotify, WM_COMMAND, wParam, lParam); return SendMessageW(infoPtr->hwndNotify, WM_COMMAND, wParam, lParam);
@ -3650,7 +3675,6 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
HWND hwnd = infoPtr->hwnd; HWND hwnd = infoPtr->hwnd;
HWND hwndEdit; HWND hwndEdit;
SIZE sz; SIZE sz;
TREEVIEW_ITEM *editItem = hItem;
HINSTANCE hinst = (HINSTANCE)GetWindowLongPtrW(hwnd, GWLP_HINSTANCE); HINSTANCE hinst = (HINSTANCE)GetWindowLongPtrW(hwnd, GWLP_HINSTANCE);
HDC hdc; HDC hdc;
HFONT hOldFont=0; HFONT hOldFont=0;
@ -3658,7 +3682,7 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
static const WCHAR EditW[] = {'E','d','i','t',0}; static const WCHAR EditW[] = {'E','d','i','t',0};
TRACE("%p %p\n", hwnd, hItem); TRACE("%p %p\n", hwnd, hItem);
if (!TREEVIEW_ValidItem(infoPtr, editItem)) if (!TREEVIEW_ValidItem(infoPtr, hItem))
return NULL; return NULL;
if (infoPtr->hwndEdit) if (infoPtr->hwndEdit)
@ -3666,11 +3690,10 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
infoPtr->bLabelChanged = FALSE; infoPtr->bLabelChanged = FALSE;
/* Make sure that edit item is selected */ /* make edit item visible */
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, hItem, TVC_UNKNOWN);
TREEVIEW_EnsureVisible(infoPtr, hItem, TRUE); TREEVIEW_EnsureVisible(infoPtr, hItem, TRUE);
TREEVIEW_UpdateDispInfo(infoPtr, editItem, TVIF_TEXT); TREEVIEW_UpdateDispInfo(infoPtr, hItem, TVIF_TEXT);
hdc = GetDC(hwnd); hdc = GetDC(hwnd);
/* Select the font to get appropriate metric dimensions */ /* Select the font to get appropriate metric dimensions */
@ -3680,8 +3703,8 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
} }
/* Get string length in pixels */ /* Get string length in pixels */
if (editItem->pszText) if (hItem->pszText)
GetTextExtentPoint32W(hdc, editItem->pszText, strlenW(editItem->pszText), GetTextExtentPoint32W(hdc, hItem->pszText, strlenW(hItem->pszText),
&sz); &sz);
else else
GetTextExtentPoint32A(hdc, "", 0, &sz); GetTextExtentPoint32A(hdc, "", 0, &sz);
@ -3691,7 +3714,7 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
sz.cx += (textMetric.tmMaxCharWidth * 2); sz.cx += (textMetric.tmMaxCharWidth * 2);
sz.cx = max(sz.cx, textMetric.tmMaxCharWidth * 3); sz.cx = max(sz.cx, textMetric.tmMaxCharWidth * 3);
sz.cx = min(sz.cx, infoPtr->clientWidth - editItem->textOffset + 2); sz.cx = min(sz.cx, infoPtr->clientWidth - hItem->textOffset + 2);
if (infoPtr->hFont != 0) if (infoPtr->hFont != 0)
{ {
@ -3699,15 +3722,18 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
} }
ReleaseDC(hwnd, hdc); ReleaseDC(hwnd, hdc);
infoPtr->editItem = hItem;
hwndEdit = CreateWindowExW(WS_EX_LEFT, hwndEdit = CreateWindowExW(WS_EX_LEFT,
EditW, EditW,
0, 0,
WS_CHILD | WS_BORDER | ES_AUTOHSCROLL | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL |
WS_CLIPSIBLINGS | ES_WANTRETURN | WS_CLIPSIBLINGS | ES_WANTRETURN |
ES_LEFT, editItem->textOffset - 2, ES_LEFT, hItem->textOffset - 2,
editItem->rect.top - 1, sz.cx + 3, hItem->rect.top - 1, sz.cx + 3,
editItem->rect.bottom - hItem->rect.bottom -
editItem->rect.top + 3, hwnd, 0, hinst, 0); hItem->rect.top + 3, hwnd, 0, hinst, 0);
/* FIXME: (HMENU)IDTVEDIT,pcs->hInstance,0); */ /* FIXME: (HMENU)IDTVEDIT,pcs->hInstance,0); */
infoPtr->hwndEdit = hwndEdit; infoPtr->hwndEdit = hwndEdit;
@ -3719,23 +3745,22 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
GetWindowLongW(hwndEdit, GWL_STYLE) | WS_BORDER); GetWindowLongW(hwndEdit, GWL_STYLE) | WS_BORDER);
SendMessageW(hwndEdit, WM_SETFONT, SendMessageW(hwndEdit, WM_SETFONT,
(WPARAM)TREEVIEW_FontForItem(infoPtr, editItem), FALSE); (WPARAM)TREEVIEW_FontForItem(infoPtr, hItem), FALSE);
infoPtr->wpEditOrig = (WNDPROC)SetWindowLongPtrW(hwndEdit, GWLP_WNDPROC, infoPtr->wpEditOrig = (WNDPROC)SetWindowLongPtrW(hwndEdit, GWLP_WNDPROC,
(DWORD_PTR) (DWORD_PTR)
TREEVIEW_Edit_SubclassProc); TREEVIEW_Edit_SubclassProc);
if (TREEVIEW_BeginLabelEditNotify(infoPtr, editItem)) if (TREEVIEW_BeginLabelEditNotify(infoPtr, hItem))
{ {
DestroyWindow(hwndEdit); DestroyWindow(hwndEdit);
infoPtr->hwndEdit = 0; infoPtr->hwndEdit = 0;
infoPtr->editItem = NULL;
return NULL; return NULL;
} }
infoPtr->selectedItem = hItem; if (hItem->pszText)
SetWindowTextW(hwndEdit, hItem->pszText);
if (editItem->pszText)
SetWindowTextW(hwndEdit, editItem->pszText);
SetFocus(hwndEdit); SetFocus(hwndEdit);
SendMessageW(hwndEdit, EM_SETSEL, 0, -1); SendMessageW(hwndEdit, EM_SETSEL, 0, -1);
@ -3749,15 +3774,14 @@ static LRESULT
TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel) TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel)
{ {
HWND hwnd = infoPtr->hwnd; HWND hwnd = infoPtr->hwnd;
TREEVIEW_ITEM *editedItem = infoPtr->selectedItem; TREEVIEW_ITEM *editedItem = infoPtr->editItem;
NMTVDISPINFOW tvdi; NMTVDISPINFOW tvdi;
BOOL bCommit; BOOL bCommit;
WCHAR tmpText[1024] = { '\0' }; WCHAR tmpText[1024] = { '\0' };
WCHAR *newText = tmpText; WCHAR *newText = tmpText;
int iLength = 0; int iLength = 0;
if (!infoPtr->hwndEdit) if (!IsWindow(infoPtr->hwndEdit)) return FALSE;
return FALSE;
tvdi.hdr.hwndFrom = hwnd; tvdi.hdr.hwndFrom = hwnd;
tvdi.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID); tvdi.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
@ -3810,6 +3834,7 @@ TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel)
if(newText != tmpText) Free(newText); if(newText != tmpText) Free(newText);
DestroyWindow(infoPtr->hwndEdit); DestroyWindow(infoPtr->hwndEdit);
infoPtr->hwndEdit = 0; infoPtr->hwndEdit = 0;
infoPtr->editItem = NULL;
return FALSE; return FALSE;
} }
else else
@ -3826,6 +3851,7 @@ TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel)
ShowWindow(infoPtr->hwndEdit, SW_HIDE); ShowWindow(infoPtr->hwndEdit, SW_HIDE);
DestroyWindow(infoPtr->hwndEdit); DestroyWindow(infoPtr->hwndEdit);
infoPtr->hwndEdit = 0; infoPtr->hwndEdit = 0;
infoPtr->editItem = NULL;
return TRUE; return TRUE;
} }
@ -4939,13 +4965,14 @@ TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
infoPtr->treeHeight = 0; infoPtr->treeHeight = 0;
infoPtr->uIndent = MINIMUM_INDENT; infoPtr->uIndent = MINIMUM_INDENT;
infoPtr->selectedItem = 0; infoPtr->selectedItem = NULL;
infoPtr->focusedItem = 0; infoPtr->focusedItem = NULL;
infoPtr->hotItem = 0; infoPtr->hotItem = NULL;
infoPtr->firstVisible = 0; infoPtr->editItem = NULL;
infoPtr->firstVisible = NULL;
infoPtr->maxVisibleOrder = 0; infoPtr->maxVisibleOrder = 0;
infoPtr->dropItem = 0; infoPtr->dropItem = NULL;
infoPtr->insertMarkItem = 0; infoPtr->insertMarkItem = NULL;
infoPtr->insertBeforeorAfter = 0; infoPtr->insertBeforeorAfter = 0;
/* dragList */ /* dragList */
@ -4958,7 +4985,7 @@ TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
/* hwndToolTip */ /* hwndToolTip */
infoPtr->hwndEdit = 0; infoPtr->hwndEdit = NULL;
infoPtr->wpEditOrig = NULL; infoPtr->wpEditOrig = NULL;
infoPtr->bIgnoreEditKillFocus = FALSE; infoPtr->bIgnoreEditKillFocus = FALSE;
infoPtr->bLabelChanged = FALSE; infoPtr->bLabelChanged = FALSE;

View file

@ -172,6 +172,7 @@ typedef struct tagFD32_PRIVATE
const char FileOpenDlgInfosStr[] = "FileOpenDlgInfos"; /* windows property description string */ const char FileOpenDlgInfosStr[] = "FileOpenDlgInfos"; /* windows property description string */
static const char LookInInfosStr[] = "LookInInfos"; /* LOOKIN combo box property */ static const char LookInInfosStr[] = "LookInInfos"; /* LOOKIN combo box property */
static SIZE MemDialogSize = { 0, 0}; /* keep size of the (resizable) dialog */
/*********************************************************************** /***********************************************************************
* Prototypes * Prototypes
@ -276,6 +277,9 @@ static BOOL GetFileName95(FileOpenDlgInfos *fodInfos)
fodInfos->sizedlg.cx = fodInfos->sizedlg.cy = 0; fodInfos->sizedlg.cx = fodInfos->sizedlg.cy = 0;
fodInfos->initial_size.x = fodInfos->initial_size.y = 0; fodInfos->initial_size.x = fodInfos->initial_size.y = 0;
} }
else
((LPDLGTEMPLATEW)template)->style &= ~WS_SIZEBOX;
/* old style hook messages */ /* old style hook messages */
if (IsHooked(fodInfos)) if (IsHooked(fodInfos))
@ -553,13 +557,14 @@ static BOOL COMDLG32_GetDisplayNameOf(LPCITEMIDLIST pidl, LPWSTR pwszPath) {
/*********************************************************************** /***********************************************************************
* ArrangeCtrlPositions [internal] * ArrangeCtrlPositions [internal]
* *
* NOTE: Do not change anything here without a lot of testing. * NOTE: Make sure to add testcases for any changes made here.
*/ */
static void ArrangeCtrlPositions(HWND hwndChildDlg, HWND hwndParentDlg, BOOL hide_help) static void ArrangeCtrlPositions(HWND hwndChildDlg, HWND hwndParentDlg, BOOL hide_help)
{ {
HWND hwndChild, hwndStc32; HWND hwndChild, hwndStc32;
RECT rectParent, rectChild, rectStc32; RECT rectParent, rectChild, rectStc32;
INT help_fixup = 0, child_height_fixup = 0, child_width_fixup = 0; INT help_fixup = 0;
int chgx, chgy;
/* Take into account if open as read only checkbox and help button /* Take into account if open as read only checkbox and help button
* are hidden * are hidden
@ -622,24 +627,16 @@ static void ArrangeCtrlPositions(HWND hwndChildDlg, HWND hwndParentDlg, BOOL hid
/* move only if stc32 exist */ /* move only if stc32 exist */
if (hwndStc32 && rectChild.left > rectStc32.right) if (hwndStc32 && rectChild.left > rectStc32.right)
{ {
LONG old_left = rectChild.left;
/* move to the right of visible controls of the parent dialog */ /* move to the right of visible controls of the parent dialog */
rectChild.left += rectParent.right; rectChild.left += rectParent.right;
rectChild.left -= rectStc32.right; rectChild.left -= rectStc32.right;
child_width_fixup = rectChild.left - old_left;
} }
/* move even if stc32 doesn't exist */ /* move even if stc32 doesn't exist */
if (rectChild.top >= rectStc32.bottom) if (rectChild.top >= rectStc32.bottom)
{ {
LONG old_top = rectChild.top;
/* move below visible controls of the parent dialog */ /* move below visible controls of the parent dialog */
rectChild.top += rectParent.bottom; rectChild.top += rectParent.bottom;
rectChild.top -= rectStc32.bottom - rectStc32.top; rectChild.top -= rectStc32.bottom - rectStc32.top;
child_height_fixup = rectChild.top - old_top;
} }
SetWindowPos(hwndChild, 0, rectChild.left, rectChild.top, SetWindowPos(hwndChild, 0, rectChild.left, rectChild.top,
@ -674,50 +671,36 @@ static void ArrangeCtrlPositions(HWND hwndChildDlg, HWND hwndParentDlg, BOOL hid
/* here we have to use original parent size */ /* here we have to use original parent size */
GetClientRect(hwndParentDlg, &rectParent); GetClientRect(hwndParentDlg, &rectParent);
GetClientRect(hwndChildDlg, &rectChild); GetClientRect(hwndChildDlg, &rectChild);
TRACE( "parent %s child %s stc32 %s\n", wine_dbgstr_rect( &rectParent),
wine_dbgstr_rect( &rectChild), wine_dbgstr_rect( &rectStc32));
if (hwndStc32) if (hwndStc32)
{ {
rectChild.right += child_width_fixup; /* width */
rectChild.bottom += child_height_fixup; if (rectParent.right > rectStc32.right - rectStc32.left)
chgx = rectChild.right - ( rectStc32.right - rectStc32.left);
if (rectParent.right > rectChild.right)
{
rectParent.right += rectChild.right;
rectParent.right -= rectStc32.right - rectStc32.left;
}
else else
{ chgx = rectChild.right - rectParent.right;
rectParent.right = rectChild.right; /* height */
} if (rectParent.bottom > rectStc32.bottom - rectStc32.top)
chgy = rectChild.bottom - ( rectStc32.bottom - rectStc32.top) - help_fixup;
if (rectParent.bottom > rectChild.bottom)
{
rectParent.bottom += rectChild.bottom;
rectParent.bottom -= rectStc32.bottom - rectStc32.top;
}
else else
{ /* Unconditionally set new dialog
/* child dialog is higher, unconditionally set new dialog * height to that of the child
* height to its size (help_fixup will be subtracted below)
*/ */
rectParent.bottom = rectChild.bottom + help_fixup; chgy = rectChild.bottom - rectParent.bottom;
}
} }
else else
{ {
rectParent.bottom += rectChild.bottom; chgx = 0;
chgy = rectChild.bottom - help_fixup;
} }
/* finally use fixed parent size */
rectParent.bottom -= help_fixup;
/* set the size of the parent dialog */ /* set the size of the parent dialog */
AdjustWindowRectEx(&rectParent, GetWindowLongW(hwndParentDlg, GWL_STYLE), GetWindowRect(hwndParentDlg, &rectParent);
FALSE, GetWindowLongW(hwndParentDlg, GWL_EXSTYLE));
SetWindowPos(hwndParentDlg, 0, SetWindowPos(hwndParentDlg, 0,
0, 0, 0, 0,
rectParent.right - rectParent.left, rectParent.right - rectParent.left + chgx,
rectParent.bottom - rectParent.top, rectParent.bottom - rectParent.top + chgy,
SWP_NOMOVE | SWP_NOZORDER); SWP_NOMOVE | SWP_NOZORDER);
} }
@ -789,11 +772,7 @@ static HWND CreateTemplateDialog(FileOpenDlgInfos *fodInfos, HWND hwnd)
hChildDlg = CreateDialogIndirectParamA(hinst, template, hwnd, hChildDlg = CreateDialogIndirectParamA(hinst, template, hwnd,
IsHooked(fodInfos) ? (DLGPROC)fodInfos->ofnInfos->lpfnHook : FileOpenDlgProcUserTemplate, IsHooked(fodInfos) ? (DLGPROC)fodInfos->ofnInfos->lpfnHook : FileOpenDlgProcUserTemplate,
(LPARAM)fodInfos->ofnInfos); (LPARAM)fodInfos->ofnInfos);
if(hChildDlg) return hChildDlg;
{
ShowWindow(hChildDlg,SW_SHOW);
return hChildDlg;
}
} }
else if( IsHooked(fodInfos)) else if( IsHooked(fodInfos))
{ {
@ -1023,6 +1002,8 @@ static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
if( !(fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)) return FALSE; if( !(fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)) return FALSE;
/* get the new dialog rectangle */ /* get the new dialog rectangle */
GetWindowRect( hwnd, &rc); GetWindowRect( hwnd, &rc);
TRACE("Size from %d,%d to %d,%d\n", fodInfos->sizedlg.cx, fodInfos->sizedlg.cy,
rc.right -rc.left, rc.bottom -rc.top);
/* not initialized yet */ /* not initialized yet */
if( (fodInfos->sizedlg.cx == 0 && fodInfos->sizedlg.cy == 0) || if( (fodInfos->sizedlg.cx == 0 && fodInfos->sizedlg.cy == 0) ||
((fodInfos->sizedlg.cx == rc.right -rc.left) && /* no change */ ((fodInfos->sizedlg.cx == rc.right -rc.left) && /* no change */
@ -1043,6 +1024,7 @@ static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
/* change position and sizes of the controls */ /* change position and sizes of the controls */
for( ctrl = GetWindow( hwnd, GW_CHILD); ctrl ; ctrl = GetWindow( ctrl, GW_HWNDNEXT)) for( ctrl = GetWindow( hwnd, GW_CHILD); ctrl ; ctrl = GetWindow( ctrl, GW_HWNDNEXT))
{ {
int ctrlid = GetDlgCtrlID( ctrl);
GetWindowRect( ctrl, &rc); GetWindowRect( ctrl, &rc);
MapWindowPoints( NULL, hwnd, (LPPOINT) &rc, 2); MapWindowPoints( NULL, hwnd, (LPPOINT) &rc, 2);
if( ctrl == fodInfos->DlgInfos.hwndGrip) if( ctrl == fodInfos->DlgInfos.hwndGrip)
@ -1055,25 +1037,69 @@ static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
{ {
/* if it was below the shell view /* if it was below the shell view
* move to bottom */ * move to bottom */
DeferWindowPos( hdwp, ctrl, NULL, rc.left, rc.top + chgy, switch( ctrlid)
rc.right - rc.left, rc.bottom - rc.top, {
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER); /* file name box and file types combo change also width */
case edt1:
case cmb1:
DeferWindowPos( hdwp, ctrl, NULL, rc.left, rc.top + chgy,
rc.right - rc.left + chgx, rc.bottom - rc.top,
SWP_NOACTIVATE | SWP_NOZORDER);
break;
/* then these buttons must move out of the way */
case IDOK:
case IDCANCEL:
case pshHelp:
DeferWindowPos( hdwp, ctrl, NULL, rc.left + chgx, rc.top + chgy,
0, 0,
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
break;
default:
DeferWindowPos( hdwp, ctrl, NULL, rc.left, rc.top + chgy,
0, 0,
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
}
} }
else if( rc.left > rcview.right) else if( rc.left > rcview.right)
{ {
/* if it was to the right of the shell view /* if it was to the right of the shell view
* move to right */ * move to right */
DeferWindowPos( hdwp, ctrl, NULL, rc.left + chgx, rc.top, DeferWindowPos( hdwp, ctrl, NULL, rc.left + chgx, rc.top,
rc.right - rc.left, rc.bottom - rc.top, 0, 0,
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER); SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
} }
else
/* special cases */
{
switch( ctrlid)
{
#if 0 /* this is Win2k, Win XP. Vista and Higher don't move/size these controls */
case IDC_LOOKIN:
DeferWindowPos( hdwp, ctrl, NULL, 0, 0,
rc.right - rc.left + chgx, rc.bottom - rc.top,
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
break;
case IDC_TOOLBARSTATIC:
case IDC_TOOLBAR:
DeferWindowPos( hdwp, ctrl, NULL, rc.left + chgx, rc.top,
0, 0,
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
break;
#endif
/* not resized in windows. Since wine uses this invisible control
* to size the browser view it needs to be resized */
case IDC_SHELLSTATIC:
DeferWindowPos( hdwp, ctrl, NULL, 0, 0,
rc.right - rc.left + chgx,
rc.bottom - rc.top + chgy,
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
break;
}
}
} }
if(fodInfos->DlgInfos.hwndCustomDlg && if(fodInfos->DlgInfos.hwndCustomDlg &&
(fodInfos->ofnInfos->Flags & (OFN_ENABLETEMPLATE | OFN_ENABLETEMPLATEHANDLE))) (fodInfos->ofnInfos->Flags & (OFN_ENABLETEMPLATE | OFN_ENABLETEMPLATEHANDLE)))
{ {
GetClientRect(hwnd, &rc);
DeferWindowPos( hdwp,fodInfos->DlgInfos.hwndCustomDlg, NULL,
0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
for( ctrl = GetWindow( fodInfos->DlgInfos.hwndCustomDlg, GW_CHILD); for( ctrl = GetWindow( fodInfos->DlgInfos.hwndCustomDlg, GW_CHILD);
ctrl ; ctrl = GetWindow( ctrl, GW_HWNDNEXT)) ctrl ; ctrl = GetWindow( ctrl, GW_HWNDNEXT))
{ {
@ -1096,6 +1122,11 @@ static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER); SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
} }
} }
/* size the custom dialog at the end: some applications do some
* control re-arranging at this point */
GetClientRect(hwnd, &rc);
DeferWindowPos( hdwp,fodInfos->DlgInfos.hwndCustomDlg, NULL,
0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
} }
EndDeferWindowPos( hdwp); EndDeferWindowPos( hdwp);
/* should not be needed */ /* should not be needed */
@ -1111,7 +1142,7 @@ static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
#if 0 #if 0
TRACE("0x%04x 0x%04x\n", hwnd, uMsg); TRACE("%p 0x%04x\n", hwnd, uMsg);
#endif #endif
switch(uMsg) switch(uMsg)
@ -1146,10 +1177,17 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
FILEDLG95_ResizeControls(hwnd, wParam, lParam); FILEDLG95_ResizeControls(hwnd, wParam, lParam);
FILEDLG95_FillControls(hwnd, wParam, lParam); FILEDLG95_FillControls(hwnd, wParam, lParam);
if( fodInfos->DlgInfos.hwndCustomDlg)
ShowWindow( fodInfos->DlgInfos.hwndCustomDlg, SW_SHOW);
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER) {
SendCustomDlgNotificationMessage(hwnd,CDN_INITDONE);
SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE);
}
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING) if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
{ {
GetWindowRect( hwnd, &rc); GetWindowRect( hwnd, &rc);
/* FIXME: should remember sizes of last invocation */
fodInfos->sizedlg.cx = rc.right - rc.left; fodInfos->sizedlg.cx = rc.right - rc.left;
fodInfos->sizedlg.cy = rc.bottom - rc.top; fodInfos->sizedlg.cy = rc.bottom - rc.top;
fodInfos->initial_size.x = fodInfos->sizedlg.cx; fodInfos->initial_size.x = fodInfos->sizedlg.cx;
@ -1158,14 +1196,16 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
SetWindowPos( fodInfos->DlgInfos.hwndGrip, NULL, SetWindowPos( fodInfos->DlgInfos.hwndGrip, NULL,
rc.right - gripx, rc.bottom - gripy, rc.right - gripx, rc.bottom - gripy,
0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER); 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
/* resize the dialog to the previous invocation */
if( MemDialogSize.cx && MemDialogSize.cy)
SetWindowPos( hwnd, NULL,
0, 0, MemDialogSize.cx, MemDialogSize.cy,
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
} }
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER) if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
{
SendCustomDlgNotificationMessage(hwnd,CDN_INITDONE);
SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE);
SendCustomDlgNotificationMessage(hwnd,CDN_SELCHANGE); SendCustomDlgNotificationMessage(hwnd,CDN_SELCHANGE);
}
return 0; return 0;
} }
case WM_SIZE: case WM_SIZE:
@ -1189,9 +1229,13 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
return FILEDLG95_OnWMGetIShellBrowser(hwnd); return FILEDLG95_OnWMGetIShellBrowser(hwnd);
case WM_DESTROY: case WM_DESTROY:
RemovePropA(hwnd, FileOpenDlgInfosStr); {
return FALSE; FileOpenDlgInfos * fodInfos = GetPropA(hwnd,FileOpenDlgInfosStr);
if (fodInfos && fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
MemDialogSize = fodInfos->sizedlg;
RemovePropA(hwnd, FileOpenDlgInfosStr);
return FALSE;
}
case WM_NOTIFY: case WM_NOTIFY:
{ {
LPNMHDR lpnmh = (LPNMHDR)lParam; LPNMHDR lpnmh = (LPNMHDR)lParam;
@ -1321,6 +1365,7 @@ static LRESULT FILEDLG95_InitControls(HWND hwnd)
/* FIXME: use TB_LOADIMAGES when implemented */ /* FIXME: use TB_LOADIMAGES when implemented */
/* SendMessageW(fodInfos->DlgInfos.hwndTB, TB_LOADIMAGES, IDB_VIEW_SMALL_COLOR, HINST_COMMCTRL);*/ /* SendMessageW(fodInfos->DlgInfos.hwndTB, TB_LOADIMAGES, IDB_VIEW_SMALL_COLOR, HINST_COMMCTRL);*/
SendMessageW(fodInfos->DlgInfos.hwndTB, TB_SETMAXTEXTROWS, 0, 0);
SendMessageW(fodInfos->DlgInfos.hwndTB, TB_ADDBITMAP, 12, (LPARAM) &tba[0]); SendMessageW(fodInfos->DlgInfos.hwndTB, TB_ADDBITMAP, 12, (LPARAM) &tba[0]);
SendMessageW(fodInfos->DlgInfos.hwndTB, TB_ADDBITMAP, 1, (LPARAM) &tba[1]); SendMessageW(fodInfos->DlgInfos.hwndTB, TB_ADDBITMAP, 1, (LPARAM) &tba[1]);
@ -1758,19 +1803,19 @@ static BOOL FILEDLG95_SendFileOK( HWND hwnd, FileOpenDlgInfos *fodInfos )
/* First send CDN_FILEOK as MSDN doc says */ /* First send CDN_FILEOK as MSDN doc says */
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER) if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
retval = SendCustomDlgNotificationMessage(hwnd,CDN_FILEOK); retval = SendCustomDlgNotificationMessage(hwnd,CDN_FILEOK);
if (GetWindowLongPtrW(fodInfos->DlgInfos.hwndCustomDlg, DWLP_MSGRESULT)) if( retval)
{ {
TRACE("canceled\n"); TRACE("canceled\n");
return (retval == 0); return FALSE;
} }
/* fodInfos->ofnInfos points to an ASCII or UNICODE structure as appropriate */ /* fodInfos->ofnInfos points to an ASCII or UNICODE structure as appropriate */
retval = SendMessageW(fodInfos->DlgInfos.hwndCustomDlg, retval = SendMessageW(fodInfos->DlgInfos.hwndCustomDlg,
fodInfos->HookMsg.fileokstring, 0, (LPARAM)fodInfos->ofnInfos); fodInfos->HookMsg.fileokstring, 0, (LPARAM)fodInfos->ofnInfos);
if (GetWindowLongPtrW(fodInfos->DlgInfos.hwndCustomDlg, DWLP_MSGRESULT)) if( retval)
{ {
TRACE("canceled\n"); TRACE("canceled\n");
return (retval == 0); return FALSE;
} }
} }
return TRUE; return TRUE;
@ -3297,7 +3342,7 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
* Although shell32 is already linked the behaviour of exported StrRetToStrN * Although shell32 is already linked the behaviour of exported StrRetToStrN
* is dependent on whether emulated OS is unicode or not. * is dependent on whether emulated OS is unicode or not.
*/ */
static HRESULT COMDLG32_StrRetToStrNW (LPWSTR dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl) static HRESULT COMDLG32_StrRetToStrNW (LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
{ {
switch (src->uType) switch (src->uType)
{ {

View file

@ -2366,7 +2366,7 @@ static inline BOOL is_metric(const pagesetup_data *data)
return pagesetup_get_flags(data) & PSD_INHUNDREDTHSOFMILLIMETERS; return pagesetup_get_flags(data) & PSD_INHUNDREDTHSOFMILLIMETERS;
} }
static inline LONG tenths_mm_to_size(pagesetup_data *data, LONG size) static inline LONG tenths_mm_to_size(const pagesetup_data *data, LONG size)
{ {
if (is_metric(data)) if (is_metric(data))
return 10 * size; return 10 * size;
@ -2374,7 +2374,7 @@ static inline LONG tenths_mm_to_size(pagesetup_data *data, LONG size)
return 10 * size * 100 / 254; return 10 * size * 100 / 254;
} }
static inline LONG thousandths_inch_to_size(pagesetup_data *data, LONG size) static inline LONG thousandths_inch_to_size(const pagesetup_data *data, LONG size)
{ {
if (is_metric(data)) if (is_metric(data))
return size * 254 / 100; return size * 254 / 100;
@ -2539,7 +2539,7 @@ typedef enum
} devnames_name; } devnames_name;
static inline WORD get_devname_offset(DEVNAMES *dn, devnames_name which) static inline WORD get_devname_offset(const DEVNAMES *dn, devnames_name which)
{ {
switch(which) switch(which)
{ {
@ -3012,7 +3012,7 @@ static void update_margin_edits(HWND hDlg, const pagesetup_data *data, WORD id)
} }
} }
static void margin_edit_notification(HWND hDlg, pagesetup_data *data, WORD msg, WORD id) static void margin_edit_notification(HWND hDlg, const pagesetup_data *data, WORD msg, WORD id)
{ {
switch (msg) switch (msg)
{ {

View file

@ -132,11 +132,7 @@ VOID WINAPI InitMUILanguage (LANGID uiLang);
/* callback constants */ /* callback constants */
#define LPSTR_TEXTCALLBACKA ((LPSTR)-1L) #define LPSTR_TEXTCALLBACKA ((LPSTR)-1L)
#define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L) #define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L)
#ifdef UNICODE #define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK)
#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKW
#else
#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKA
#endif
#define I_IMAGECALLBACK (-1) #define I_IMAGECALLBACK (-1)
#define I_IMAGENONE (-2) #define I_IMAGENONE (-2)
@ -407,6 +403,7 @@ INT WINAPI LBItemFromPt (HWND, POINT, BOOL);
static const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_', static const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_',
'u','p','d','o','w','n','3','2',0 }; 'u','p','d','o','w','n','3','2',0 };
#endif #endif
#define UPDOWN_CLASS WINELIB_NAME_AW(UPDOWN_CLASS)
typedef struct _UDACCEL typedef struct _UDACCEL
{ {
@ -475,6 +472,7 @@ HWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT,
static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_', static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_',
'p','r','o','g','r','e','s','s','3','2',0 }; 'p','r','o','g','r','e','s','s','3','2',0 };
#endif #endif
#define PROGRESS_CLASS WINELIB_NAME_AW(PROGRESS_CLASS)
#define PBM_SETRANGE (WM_USER+1) #define PBM_SETRANGE (WM_USER+1)
#define PBM_SETPOS (WM_USER+2) #define PBM_SETPOS (WM_USER+2)
@ -486,6 +484,8 @@ static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_',
#define PBM_GETPOS (WM_USER+8) #define PBM_GETPOS (WM_USER+8)
#define PBM_SETBARCOLOR (WM_USER+9) #define PBM_SETBARCOLOR (WM_USER+9)
#define PBM_SETMARQUEE (WM_USER+10) #define PBM_SETMARQUEE (WM_USER+10)
#define PBM_GETBKCOLOR (WM_USER+14)
#define PBM_GETBARCOLOR (WM_USER+15)
#define PBM_SETBKCOLOR CCM_SETBKCOLOR #define PBM_SETBKCOLOR CCM_SETBKCOLOR
#define PBS_SMOOTH 0x01 #define PBS_SMOOTH 0x01
@ -727,6 +727,7 @@ int WINAPI DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF, COLORREF,
#else #else
static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 }; static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 };
#endif #endif
#define WC_HEADER WINELIB_NAME_AW(WC_HEADER)
#define HDS_HORZ 0x0000 #define HDS_HORZ 0x0000
#define HDS_BUTTONS 0x0002 #define HDS_BUTTONS 0x0002
@ -737,6 +738,8 @@ static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',
#define HDS_FILTERBAR 0x0100 #define HDS_FILTERBAR 0x0100
#define HDS_FLAT 0x0200 #define HDS_FLAT 0x0200
#define HDS_CHECKBOXES 0x0400 #define HDS_CHECKBOXES 0x0400
#define HDS_NOSIZING 0x0800
#define HDS_OVERFLOW 0x1000
#define HDI_WIDTH 0x0001 #define HDI_WIDTH 0x0001
#define HDI_HEIGHT HDI_WIDTH #define HDI_HEIGHT HDI_WIDTH
@ -748,6 +751,9 @@ static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',
#define HDI_DI_SETITEM 0x0040 #define HDI_DI_SETITEM 0x0040
#define HDI_ORDER 0x0080 #define HDI_ORDER 0x0080
#define HDI_FILTER 0x0100 #define HDI_FILTER 0x0100
#define HDI_STATE 0x0200
#define HDIS_FOCUSED 0x00000001
#define HDF_LEFT 0x0000 #define HDF_LEFT 0x0000
#define HDF_RIGHT 0x0001 #define HDF_RIGHT 0x0001
@ -764,6 +770,7 @@ static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',
#define HDF_BITMAP 0x2000 #define HDF_BITMAP 0x2000
#define HDF_STRING 0x4000 #define HDF_STRING 0x4000
#define HDF_OWNERDRAW 0x8000 #define HDF_OWNERDRAW 0x8000
#define HDF_SPLITBUTTON 0x1000000
#define HHT_NOWHERE 0x0001 #define HHT_NOWHERE 0x0001
#define HHT_ONHEADER 0x0002 #define HHT_ONHEADER 0x0002
@ -776,6 +783,8 @@ static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',
#define HHT_TORIGHT 0x0400 #define HHT_TORIGHT 0x0400
#define HHT_TOLEFT 0x0800 #define HHT_TOLEFT 0x0800
#define HHT_ONITEMSTATEICON 0x1000 #define HHT_ONITEMSTATEICON 0x1000
#define HHT_ONDROPDOWN 0x2000
#define HHT_ONOVERFLOW 0x4000
#define HDM_FIRST 0x1200 #define HDM_FIRST 0x1200
#define HDM_GETITEMCOUNT (HDM_FIRST+0) #define HDM_GETITEMCOUNT (HDM_FIRST+0)
@ -863,10 +872,14 @@ typedef struct _HD_ITEMA
INT cchTextMax; INT cchTextMax;
INT fmt; INT fmt;
LPARAM lParam; LPARAM lParam;
/* (_WIN32_IE >= 0x0300) */
INT iImage; INT iImage;
INT iOrder; INT iOrder;
/* (_WIN32_IE >= 0x0500) */
UINT type; UINT type;
LPVOID pvFilter; LPVOID pvFilter;
/* (_WIN32_WINNT >= 0x0600) */
UINT state;
} HDITEMA, *LPHDITEMA; } HDITEMA, *LPHDITEMA;
typedef struct _HD_ITEMW typedef struct _HD_ITEMW
@ -878,10 +891,14 @@ typedef struct _HD_ITEMW
INT cchTextMax; INT cchTextMax;
INT fmt; INT fmt;
LPARAM lParam; LPARAM lParam;
/* (_WIN32_IE >= 0x0300) */
INT iImage; INT iImage;
INT iOrder; INT iOrder;
/* (_WIN32_IE >= 0x0500) */
UINT type; UINT type;
LPVOID pvFilter; LPVOID pvFilter;
/* (_WIN32_WINNT >= 0x0600) */
UINT state;
} HDITEMW, *LPHDITEMW; } HDITEMW, *LPHDITEMW;
#define HDITEM WINELIB_NAME_AW(HDITEM) #define HDITEM WINELIB_NAME_AW(HDITEM)
@ -975,14 +992,14 @@ typedef struct tagNMHDFILTERBTNCLICK
} NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK; } NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK;
#define Header_GetItemCount(hwndHD) \ #define Header_GetItemCount(hwndHD) \
(INT)SNDMSGA((hwndHD),HDM_GETITEMCOUNT,0,0L) (INT)SNDMSG((hwndHD),HDM_GETITEMCOUNT,0,0L)
#define Header_InsertItemA(hwndHD,i,phdi) \ #define Header_InsertItemA(hwndHD,i,phdi) \
(INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi)) (INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
#define Header_InsertItemW(hwndHD,i,phdi) \ #define Header_InsertItemW(hwndHD,i,phdi) \
(INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi)) (INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
#define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem) #define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem)
#define Header_DeleteItem(hwndHD,i) \ #define Header_DeleteItem(hwndHD,i) \
(BOOL)SNDMSGA((hwndHD),HDM_DELETEITEM,(WPARAM)(INT)(i),0L) (BOOL)SNDMSG((hwndHD),HDM_DELETEITEM,(WPARAM)(INT)(i),0L)
#define Header_GetItemA(hwndHD,i,phdi) \ #define Header_GetItemA(hwndHD,i,phdi) \
(BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi)) (BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi))
#define Header_GetItemW(hwndHD,i,phdi) \ #define Header_GetItemW(hwndHD,i,phdi) \
@ -994,27 +1011,27 @@ typedef struct tagNMHDFILTERBTNCLICK
(BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi)) (BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
#define Header_SetItem WINELIB_NAME_AW(Header_SetItem) #define Header_SetItem WINELIB_NAME_AW(Header_SetItem)
#define Header_Layout(hwndHD,playout) \ #define Header_Layout(hwndHD,playout) \
(BOOL)SNDMSGA((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout)) (BOOL)SNDMSG((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))
#define Header_GetItemRect(hwnd,iItem,lprc) \ #define Header_GetItemRect(hwnd,iItem,lprc) \
(BOOL)SNDMSGA((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc) (BOOL)SNDMSG((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc)
#define Header_SetImageList(hwnd,himl) \ #define Header_SetImageList(hwnd,himl) \
(HIMAGELIST)SNDMSGA((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl) (HIMAGELIST)SNDMSG((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl)
#define Header_GetImageList(hwnd) \ #define Header_GetImageList(hwnd) \
(HIMAGELIST)SNDMSGA((hwnd),HDM_GETIMAGELIST,0,0) (HIMAGELIST)SNDMSG((hwnd),HDM_GETIMAGELIST,0,0)
#define Header_OrderToIndex(hwnd,i) \ #define Header_OrderToIndex(hwnd,i) \
(INT)SNDMSGA((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0) (INT)SNDMSG((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0)
#define Header_CreateDragImage(hwnd,i) \ #define Header_CreateDragImage(hwnd,i) \
(HIMAGELIST)SNDMSGA((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0) (HIMAGELIST)SNDMSG((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0)
#define Header_GetOrderArray(hwnd,iCount,lpi) \ #define Header_GetOrderArray(hwnd,iCount,lpi) \
(BOOL)SNDMSGA((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi) (BOOL)SNDMSG((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
#define Header_SetOrderArray(hwnd,iCount,lpi) \ #define Header_SetOrderArray(hwnd,iCount,lpi) \
(BOOL)SNDMSGA((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi) (BOOL)SNDMSG((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
#define Header_SetHotDivider(hwnd,fPos,dw) \ #define Header_SetHotDivider(hwnd,fPos,dw) \
(INT)SNDMSGA((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw) (INT)SNDMSG((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw)
#define Header_SetUnicodeFormat(hwnd,fUnicode) \ #define Header_SetUnicodeFormat(hwnd,fUnicode) \
(BOOL)SNDMSGA((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0) (BOOL)SNDMSG((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0)
#define Header_GetUnicodeFormat(hwnd) \ #define Header_GetUnicodeFormat(hwnd) \
(BOOL)SNDMSGA((hwnd),HDM_GETUNICODEFORMAT,0,0) (BOOL)SNDMSG((hwnd),HDM_GETUNICODEFORMAT,0,0)
/* Win32 5.1 Button Theme */ /* Win32 5.1 Button Theme */
#define WC_BUTTONA "Button" #define WC_BUTTONA "Button"
@ -1025,6 +1042,7 @@ typedef struct tagNMHDFILTERBTNCLICK
#else #else
static const WCHAR WC_BUTTONW[] = { 'B','u','t','t','o','n',0 }; static const WCHAR WC_BUTTONW[] = { 'B','u','t','t','o','n',0 };
#endif #endif
#define WC_BUTTON WINELIB_NAME_AW(WC_BUTTON)
#define BCN_FIRST (0U-1250U) #define BCN_FIRST (0U-1250U)
#define BCN_LAST (0U-1350U) #define BCN_LAST (0U-1350U)
@ -1051,6 +1069,7 @@ typedef struct tagNMBCHOTITEM
static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r', static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r',
'W','i','n','d','o','w','3','2',0 }; 'W','i','n','d','o','w','3','2',0 };
#endif #endif
#define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME)
#define CMB_MASKED 0x02 #define CMB_MASKED 0x02
@ -1212,12 +1231,14 @@ static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r',
#define TB_GETSTRING WINELIB_NAME_AW(TB_GETSTRING) #define TB_GETSTRING WINELIB_NAME_AW(TB_GETSTRING)
/* undocumented messages in Toolbar */ /* undocumented messages in Toolbar */
#ifdef __WINESRC__
#define TB_UNKWN45D (WM_USER+93) #define TB_UNKWN45D (WM_USER+93)
#define TB_SETHOTITEM2 (WM_USER+94) #define TB_SETHOTITEM2 (WM_USER+94)
#define TB_SETLISTGAP (WM_USER+96) #define TB_SETLISTGAP (WM_USER+96)
#define TB_GETIMAGELISTCOUNT (WM_USER+98) #define TB_GETIMAGELISTCOUNT (WM_USER+98)
#define TB_GETIDEALSIZE (WM_USER+99) #define TB_GETIDEALSIZE (WM_USER+99)
#define TB_UNKWN464 (WM_USER+100) #define TB_UNKWN464 (WM_USER+100)
#endif
#define TB_GETMETRICS (WM_USER+101) #define TB_GETMETRICS (WM_USER+101)
#define TB_SETMETRICS (WM_USER+102) #define TB_SETMETRICS (WM_USER+102)
@ -1615,41 +1636,7 @@ CreateMappedBitmap (HINSTANCE, INT_PTR, UINT, LPCOLORMAP, INT);
static const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_', static const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_',
'c','l','a','s','s','3','2',0 }; 'c','l','a','s','s','3','2',0 };
#endif #endif
#define TOOLTIPS_CLASS WINELIB_NAME_AW(TOOLTIPS_CLASS)
#ifdef UNICODE
#define UPDOWN_CLASS L"msctls_updown32"
#define PROGRESS_CLASS L"msctls_progress32"
#define WC_HEADER L"SysHeader32"
#define WC_BUTTON L"Button"
#define TOOLBARCLASSNAME L"ToolbarWindow32"
#define TOOLTIPS_CLASS L"tooltips_class32"
#else
#define UPDOWN_CLASS "msctls_updown32"
#define PROGRESS_CLASS "msctls_progress32"
#define WC_HEADER "SysHeader32"
#define WC_BUTTON "Button"
#define TOOLBARCLASSNAME "ToolbarWindow32"
#define TOOLTIPS_CLASS "tooltips_class32"
#endif
#if (_WIN32_WINNT >= 0x501)
#define BUTTON_IMAGELIST_ALIGN_LEFT 0
#define BUTTON_IMAGELIST_ALIGN_RIGHT 1
#define BUTTON_IMAGELIST_ALIGN_TOP 2
#define BUTTON_IMAGELIST_ALIGN_BOTTOM 3
#define BUTTON_IMAGELIST_ALIGN_CENTER 4
typedef struct
{
HIMAGELIST himl;
RECT margin;
UINT uAlign;
} BUTTON_IMAGELIST, *PBUTTON_IMAGELIST;
#define BCM_FIRST 0x1600
#define BCM_GETIDEALSIZE (BCM_FIRST + 1)
#define BCM_SETIMAGELIST (BCM_FIRST + 2)
#endif /* _WIN32_WINNT */
#define INFOTIPSIZE 1024 #define INFOTIPSIZE 1024
@ -2001,6 +1988,9 @@ typedef struct tagREBARBANDINFOA
UINT cxIdeal; UINT cxIdeal;
LPARAM lParam; LPARAM lParam;
UINT cxHeader; UINT cxHeader;
/* _WIN32_WINNT >= 0x0600 */
RECT rcChevronLocation;
UINT uChevronState;
} REBARBANDINFOA, *LPREBARBANDINFOA; } REBARBANDINFOA, *LPREBARBANDINFOA;
typedef REBARBANDINFOA const *LPCREBARBANDINFOA; typedef REBARBANDINFOA const *LPCREBARBANDINFOA;
@ -2027,6 +2017,9 @@ typedef struct tagREBARBANDINFOW
UINT cxIdeal; UINT cxIdeal;
LPARAM lParam; LPARAM lParam;
UINT cxHeader; UINT cxHeader;
/* _WIN32_WINNT >= 0x0600 */
RECT rcChevronLocation;
UINT uChevronState;
} REBARBANDINFOW, *LPREBARBANDINFOW; } REBARBANDINFOW, *LPREBARBANDINFOW;
typedef REBARBANDINFOW const *LPCREBARBANDINFOW; typedef REBARBANDINFOW const *LPCREBARBANDINFOW;
@ -2038,6 +2031,9 @@ typedef REBARBANDINFOW const *LPCREBARBANDINFOW;
#define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID) #define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID)
#define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID) #define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID)
#define REBARBANDINFO_V3_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), wID) #define REBARBANDINFO_V3_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), wID)
#define REBARBANDINFOA_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, cxHeader)
#define REBARBANDINFOW_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, cxHeader)
#define REBARBANDINFO_V6_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), cxHeader)
typedef struct tagNMREBARCHILDSIZE typedef struct tagNMREBARCHILDSIZE
{ {
@ -2412,10 +2408,10 @@ static const WCHAR WC_TREEVIEWW[] = { 'S','y','s',
#define TVIF_INTEGRAL 0x0080 #define TVIF_INTEGRAL 0x0080
#define TVIF_DI_SETITEM 0x1000 #define TVIF_DI_SETITEM 0x1000
#define TVI_ROOT ((HTREEITEM)(ULONG_PTR)-0x10000) /* -65536 */ #define TVI_ROOT ((HTREEITEM)-65536)
#define TVI_FIRST ((HTREEITEM)(ULONG_PTR)-0x0FFFF) /* -65535 */ #define TVI_FIRST ((HTREEITEM)-65535)
#define TVI_LAST ((HTREEITEM)(ULONG_PTR)-0x0FFFE) /* -65534 */ #define TVI_LAST ((HTREEITEM)-65534)
#define TVI_SORT ((HTREEITEM)(ULONG_PTR)-0x0FFFD) /* -65533 */ #define TVI_SORT ((HTREEITEM)-65533)
#define TVIS_FOCUSED 0x0001 #define TVIS_FOCUSED 0x0001
#define TVIS_SELECTED 0x0002 #define TVIS_SELECTED 0x0002
@ -2537,6 +2533,9 @@ typedef struct {
INT cChildren; INT cChildren;
LPARAM lParam; LPARAM lParam;
INT iIntegral; INT iIntegral;
UINT uStateEx; /* _WIN32_IE >= 0x600 */
HWND hwnd; /* _WIN32_IE >= 0x600 */
INT iExpandedImage; /* _WIN32_IE >= 0x600 */
} TVITEMEXA, *LPTVITEMEXA; } TVITEMEXA, *LPTVITEMEXA;
typedef struct { typedef struct {
@ -2551,6 +2550,9 @@ typedef struct {
INT cChildren; INT cChildren;
LPARAM lParam; LPARAM lParam;
INT iIntegral; INT iIntegral;
UINT uStateEx; /* _WIN32_IE >= 0x600 */
HWND hwnd; /* _WIN32_IE >= 0x600 */
INT iExpandedImage; /* _WIN32_IE >= 0x600 */
} TVITEMEXW, *LPTVITEMEXW; } TVITEMEXW, *LPTVITEMEXW;
#define TVITEMEX WINELIB_NAME_AW(TVITEMEX) #define TVITEMEX WINELIB_NAME_AW(TVITEMEX)
@ -2626,8 +2628,20 @@ typedef struct tagTVDISPINFOW {
TVITEMW item; TVITEMW item;
} NMTVDISPINFOW, *LPNMTVDISPINFOW; } NMTVDISPINFOW, *LPNMTVDISPINFOW;
typedef struct tagTVDISPINFOEXA {
NMHDR hdr;
TVITEMEXA item;
} NMTVDISPINFOEXA, *LPNMTVDISPINFOEXA;
typedef struct tagTVDISPINFOEXW {
NMHDR hdr;
TVITEMEXW item;
} NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW;
#define NMTVDISPINFO WINELIB_NAME_AW(NMTVDISPINFO) #define NMTVDISPINFO WINELIB_NAME_AW(NMTVDISPINFO)
#define LPNMTVDISPINFO WINELIB_NAME_AW(LPNMTVDISPINFO) #define LPNMTVDISPINFO WINELIB_NAME_AW(LPNMTVDISPINFO)
#define NMTVDISPINFOEX WINELIB_NAME_AW(NMTVDISPINFOEX)
#define LPNMTVDISPINFOEX WINELIB_NAME_AW(LPNMTVDISPINFOEX)
#define TV_DISPINFOA NMTVDISPINFOA #define TV_DISPINFOA NMTVDISPINFOA
#define TV_DISPINFOW NMTVDISPINFOW #define TV_DISPINFOW NMTVDISPINFOW
#define TV_DISPINFO NMTVDISPINFO #define TV_DISPINFO NMTVDISPINFO
@ -2710,33 +2724,33 @@ typedef struct tagTVKEYDOWN
#define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem) #define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem)
#define TreeView_DeleteItem(hwnd, hItem) \ #define TreeView_DeleteItem(hwnd, hItem) \
(BOOL)SNDMSGA((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem)) (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
#define TreeView_DeleteAllItems(hwnd) \ #define TreeView_DeleteAllItems(hwnd) \
(BOOL)SNDMSGA((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT) (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
#define TreeView_Expand(hwnd, hitem, code) \ #define TreeView_Expand(hwnd, hitem, code) \
(BOOL)SNDMSGA((hwnd), TVM_EXPAND, (WPARAM)code, \ (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)code, \
(LPARAM)(HTREEITEM)(hitem)) (LPARAM)(HTREEITEM)(hitem))
#define TreeView_GetItemRect(hwnd, hitem, prc, code) \ #define TreeView_GetItemRect(hwnd, hitem, prc, code) \
(*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSGA((hwnd), \ (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), \
TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc))) TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))
#define TreeView_GetCount(hwnd) \ #define TreeView_GetCount(hwnd) \
(UINT)SNDMSGA((hwnd), TVM_GETCOUNT, 0, 0) (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0)
#define TreeView_GetIndent(hwnd) \ #define TreeView_GetIndent(hwnd) \
(UINT)SNDMSGA((hwnd), TVM_GETINDENT, 0, 0) (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0)
#define TreeView_SetIndent(hwnd, indent) \ #define TreeView_SetIndent(hwnd, indent) \
(BOOL)SNDMSGA((hwnd), TVM_SETINDENT, (WPARAM)indent, 0) (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)
#define TreeView_GetImageList(hwnd, iImage) \ #define TreeView_GetImageList(hwnd, iImage) \
(HIMAGELIST)SNDMSGA((hwnd), TVM_GETIMAGELIST, iImage, 0) (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0)
#define TreeView_SetImageList(hwnd, himl, iImage) \ #define TreeView_SetImageList(hwnd, himl, iImage) \
(HIMAGELIST)SNDMSGA((hwnd), TVM_SETIMAGELIST, iImage, \ (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, \
(LPARAM)(HIMAGELIST)(himl)) (LPARAM)(HIMAGELIST)(himl))
#define TreeView_GetNextItem(hwnd, hitem, code) \ #define TreeView_GetNextItem(hwnd, hitem, code) \
(HTREEITEM)SNDMSGA((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\ (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\
(LPARAM)(HTREEITEM) (hitem)) (LPARAM)(HTREEITEM) (hitem))
#define TreeView_GetChild(hwnd, hitem) \ #define TreeView_GetChild(hwnd, hitem) \
@ -2766,7 +2780,7 @@ typedef struct tagTVKEYDOWN
#define TreeView_Select(hwnd, hitem, code) \ #define TreeView_Select(hwnd, hitem, code) \
(BOOL)SNDMSGA((hwnd), TVM_SELECTITEM, (WPARAM)(code), \ (BOOL)SNDMSG((hwnd), TVM_SELECTITEM, (WPARAM)(code), \
(LPARAM)(HTREEITEM)(hitem)) (LPARAM)(HTREEITEM)(hitem))
@ -2791,79 +2805,79 @@ typedef struct tagTVKEYDOWN
#define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem) #define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem)
#define TreeView_EditLabel(hwnd, hitem) \ #define TreeView_EditLabel(hwnd, hitem) \
(HWND)SNDMSGA((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem)) (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
#define TreeView_GetEditControl(hwnd) \ #define TreeView_GetEditControl(hwnd) \
(HWND)SNDMSGA((hwnd), TVM_GETEDITCONTROL, 0, 0) (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0)
#define TreeView_GetVisibleCount(hwnd) \ #define TreeView_GetVisibleCount(hwnd) \
(UINT)SNDMSGA((hwnd), TVM_GETVISIBLECOUNT, 0, 0) (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
#define TreeView_HitTest(hwnd, lpht) \ #define TreeView_HitTest(hwnd, lpht) \
(HTREEITEM)SNDMSGA((hwnd), TVM_HITTEST, 0,\ (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0,\
(LPARAM)(LPTVHITTESTINFO)(lpht)) (LPARAM)(LPTVHITTESTINFO)(lpht))
#define TreeView_CreateDragImage(hwnd, hitem) \ #define TreeView_CreateDragImage(hwnd, hitem) \
(HIMAGELIST)SNDMSGA((hwnd), TVM_CREATEDRAGIMAGE, 0,\ (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0,\
(LPARAM)(HTREEITEM)(hitem)) (LPARAM)(HTREEITEM)(hitem))
#define TreeView_SortChildren(hwnd, hitem, recurse) \ #define TreeView_SortChildren(hwnd, hitem, recurse) \
(BOOL)SNDMSGA((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\
(LPARAM)(HTREEITEM)(hitem)) (LPARAM)(HTREEITEM)(hitem))
#define TreeView_EnsureVisible(hwnd, hitem) \ #define TreeView_EnsureVisible(hwnd, hitem) \
(BOOL)SNDMSGA((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(HTREEITEM)(hitem)) (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem))
#define TreeView_SortChildrenCB(hwnd, psort, recurse) \ #define TreeView_SortChildrenCB(hwnd, psort, recurse) \
(BOOL)SNDMSGA((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \
(LPARAM)(LPTV_SORTCB)(psort)) (LPARAM)(LPTV_SORTCB)(psort))
#define TreeView_EndEditLabelNow(hwnd, fCancel) \ #define TreeView_EndEditLabelNow(hwnd, fCancel) \
(BOOL)SNDMSGA((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0) (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)
#define TreeView_GetISearchString(hwnd, lpsz) \ #define TreeView_GetISearchString(hwnd, lpsz) \
(BOOL)SNDMSGA((hwnd), TVM_GETISEARCHSTRING, 0, \ (BOOL)SNDMSG((hwnd), TVM_GETISEARCHSTRING, 0, \
(LPARAM)(LPTSTR)lpsz) (LPARAM)(LPTSTR)lpsz)
#define TreeView_SetToolTips(hwnd, hwndTT) \ #define TreeView_SetToolTips(hwnd, hwndTT) \
(HWND)SNDMSGA((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0) (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0)
#define TreeView_GetToolTips(hwnd) \ #define TreeView_GetToolTips(hwnd) \
(HWND)SNDMSGA((hwnd), TVM_GETTOOLTIPS, 0, 0) (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0)
#define TreeView_SetItemHeight(hwnd, iHeight) \ #define TreeView_SetItemHeight(hwnd, iHeight) \
(INT)SNDMSGA((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0) (INT)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0)
#define TreeView_GetItemHeight(hwnd) \ #define TreeView_GetItemHeight(hwnd) \
(INT)SNDMSGA((hwnd), TVM_GETITEMHEIGHT, 0, 0) (INT)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0)
#define TreeView_SetBkColor(hwnd, clr) \ #define TreeView_SetBkColor(hwnd, clr) \
(COLORREF)SNDMSGA((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr) (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr)
#define TreeView_SetTextColor(hwnd, clr) \ #define TreeView_SetTextColor(hwnd, clr) \
(COLORREF)SNDMSGA((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr) (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr)
#define TreeView_GetBkColor(hwnd) \ #define TreeView_GetBkColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), TVM_GETBKCOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)
#define TreeView_GetTextColor(hwnd) \ #define TreeView_GetTextColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), TVM_GETTEXTCOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)
#define TreeView_SetScrollTime(hwnd, uTime) \ #define TreeView_SetScrollTime(hwnd, uTime) \
(UINT)SNDMSGA((hwnd), TVM_SETSCROLLTIME, uTime, 0) (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0)
#define TreeView_GetScrollTime(hwnd) \ #define TreeView_GetScrollTime(hwnd) \
(UINT)SNDMSGA((hwnd), TVM_GETSCROLLTIME, 0, 0) (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0)
#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \ #define TreeView_SetInsertMark(hwnd, hItem, fAfter) \
(BOOL)SNDMSGA((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \ (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \
(LPARAM) (hItem)) (LPARAM) (hItem))
#define TreeView_SetInsertMarkColor(hwnd, clr) \ #define TreeView_SetInsertMarkColor(hwnd, clr) \
(COLORREF)SNDMSGA((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr) (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr)
#define TreeView_GetInsertMarkColor(hwnd) \ #define TreeView_GetInsertMarkColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
#define TreeView_SetItemState(hwndTV, hti, data, _mask) \ #define TreeView_SetItemState(hwndTV, hti, data, _mask) \
{ TVITEM _TVi; \ { TVITEM _TVi; \
@ -2875,16 +2889,16 @@ typedef struct tagTVKEYDOWN
} }
#define TreeView_GetItemState(hwndTV, hti, mask) \ #define TreeView_GetItemState(hwndTV, hti, mask) \
(UINT)SNDMSGA((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask)) (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask))
#define TreeView_GetCheckState(hwndTV, hti) \ #define TreeView_GetCheckState(hwndTV, hti) \
((((UINT)(SNDMSGA((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), \ ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), \
TVIS_STATEIMAGEMASK))) >> 12) -1) TVIS_STATEIMAGEMASK))) >> 12) -1)
#define TreeView_SetLineColor(hwnd, clr) \ #define TreeView_SetLineColor(hwnd, clr) \
(COLORREF)SNDMSGA((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr)) (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr))
#define TreeView_GetLineColor(hwnd) \ #define TreeView_GetLineColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), TVM_GETLINECOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0)
#define TreeView_MapAccIDToHTREEITEM(hwnd, id) \ #define TreeView_MapAccIDToHTREEITEM(hwnd, id) \
(HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0) (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0)
@ -3249,6 +3263,7 @@ static const WCHAR WC_LISTVIEWW[] = { 'S','y','s',
#define LVM_CANCELEDITLABEL (LVM_FIRST + 179) #define LVM_CANCELEDITLABEL (LVM_FIRST + 179)
#define LVM_MAPINDEXTOID (LVM_FIRST + 180) #define LVM_MAPINDEXTOID (LVM_FIRST + 180)
#define LVM_MAPIDTOINDEX (LVM_FIRST + 181) #define LVM_MAPIDTOINDEX (LVM_FIRST + 181)
#define LVM_ISITEMVISIBLE (LVM_FIRST + 182)
#define LVN_FIRST (0U-100U) #define LVN_FIRST (0U-100U)
#define LVN_LAST (0U-199U) #define LVN_LAST (0U-199U)
@ -3284,12 +3299,20 @@ static const WCHAR WC_LISTVIEWW[] = { 'S','y','s',
#define LVN_GETINFOTIPA (LVN_FIRST-57) #define LVN_GETINFOTIPA (LVN_FIRST-57)
#define LVN_GETINFOTIPW (LVN_FIRST-58) #define LVN_GETINFOTIPW (LVN_FIRST-58)
#define LVN_GETINFOTIP WINELIB_NAME_AW(LVN_GETINFOTIP) #define LVN_GETINFOTIP WINELIB_NAME_AW(LVN_GETINFOTIP)
#define LVN_INCREMENTALSEARCHA (LVN_FIRST-62)
#define LVN_INCREMENTALSEARCHW (LVN_FIRST-63)
#define LVN_INCREMENTALSEARCH WINELIB_NAME_AW(LVN_INCREMENTALSEARCH)
#define LVN_BEGINSCROLL (LVN_FIRST-80) #define LVN_BEGINSCROLL (LVN_FIRST-80)
#define LVN_ENDSCROLL (LVN_FIRST-81) #define LVN_ENDSCROLL (LVN_FIRST-81)
#define LVN_LINKCLICK (LVN_FIRST-84) #define LVN_LINKCLICK (LVN_FIRST-84)
#define LVN_ASYNCDRAWN (LVN_FIRST-86) #define LVN_ASYNCDRAWN (LVN_FIRST-86)
#define LVN_GETEMPTYMARKUP (LVN_FIRST-87) #define LVN_GETEMPTYMARKUP (LVN_FIRST-87)
/* LVN_INCREMENTALSEARCH return codes */
#define LVNSCH_DEFAULT -1
#define LVNSCH_ERROR -2
#define LVNSCH_IGNORE -3
#define LVA_DEFAULT 0x0000 #define LVA_DEFAULT 0x0000
#define LVA_ALIGNLEFT 0x0001 #define LVA_ALIGNLEFT 0x0001
#define LVA_ALIGNTOP 0x0002 #define LVA_ALIGNTOP 0x0002
@ -3306,10 +3329,15 @@ typedef struct tagLVITEMA
INT cchTextMax; INT cchTextMax;
INT iImage; INT iImage;
LPARAM lParam; LPARAM lParam;
INT iIndent; /* (_WIN32_IE >= 0x0300) */ /* (_WIN32_IE >= 0x0300) */
int iGroupId; /* (_WIN32_IE >= 0x560) */ INT iIndent;
UINT cColumns; /* (_WIN32_IE >= 0x560) */ /* (_WIN32_IE >= 0x0560) */
PUINT puColumns; /* (_WIN32_IE >= 0x560) */ INT iGroupId;
UINT cColumns;
PUINT puColumns;
/* (_WIN32_WINNT >= 0x0600) */
PINT piColFmt;
INT iGroup;
} LVITEMA, *LPLVITEMA; } LVITEMA, *LPLVITEMA;
typedef struct tagLVITEMW typedef struct tagLVITEMW
@ -3323,10 +3351,15 @@ typedef struct tagLVITEMW
INT cchTextMax; INT cchTextMax;
INT iImage; INT iImage;
LPARAM lParam; LPARAM lParam;
INT iIndent; /* (_WIN32_IE >= 0x0300) */ /* (_WIN32_IE >= 0x0300) */
int iGroupId; /* (_WIN32_IE >= 0x560) */ INT iIndent;
UINT cColumns; /* (_WIN32_IE >= 0x560) */ /* (_WIN32_IE >= 0x0560) */
PUINT puColumns; /* (_WIN32_IE >= 0x560) */ INT iGroupId;
UINT cColumns;
PUINT puColumns;
/* (_WIN32_WINNT >= 0x0600) */
PINT piColFmt;
INT iGroup;
} LVITEMW, *LPLVITEMW; } LVITEMW, *LPLVITEMW;
#define LVITEM WINELIB_NAME_AW(LVITEM) #define LVITEM WINELIB_NAME_AW(LVITEM)
@ -3336,6 +3369,10 @@ typedef struct tagLVITEMW
#define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam) #define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam)
#define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE) #define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE)
#define LVITEMA_V5_SIZE CCSIZEOF_STRUCT(LVITEMA, puColumns)
#define LVITEMW_V5_SIZE CCSIZEOF_STRUCT(LVITEMW, puColumns)
#define LVITEM_V5_SIZE WINELIB_NAME_AW(LVITEM_V5_SIZE)
#define LV_ITEM LVITEM #define LV_ITEM LVITEM
#define LV_ITEMA LVITEMA #define LV_ITEMA LVITEMA
#define LV_ITEMW LVITEMW #define LV_ITEMW LVITEMW
@ -3399,8 +3436,13 @@ typedef struct tagLVCOLUMNA
LPSTR pszText; LPSTR pszText;
INT cchTextMax; INT cchTextMax;
INT iSubItem; INT iSubItem;
INT iImage; /* (_WIN32_IE >= 0x0300) */ /* (_WIN32_IE >= 0x0300) */
INT iOrder; /* (_WIN32_IE >= 0x0300) */ INT iImage;
INT iOrder;
/* (_WIN32_WINNT >= 0x0600) */
INT cxMin;
INT cxDefault;
INT cxIdeal;
} LVCOLUMNA, *LPLVCOLUMNA; } LVCOLUMNA, *LPLVCOLUMNA;
typedef struct tagLVCOLUMNW typedef struct tagLVCOLUMNW
@ -3411,8 +3453,13 @@ typedef struct tagLVCOLUMNW
LPWSTR pszText; LPWSTR pszText;
INT cchTextMax; INT cchTextMax;
INT iSubItem; INT iSubItem;
INT iImage; /* (_WIN32_IE >= 0x0300) */ /* (_WIN32_IE >= 0x0300) */
INT iOrder; /* (_WIN32_IE >= 0x0300) */ INT iImage;
INT iOrder;
/* (_WIN32_WINNT >= 0x0600) */
INT cxMin;
INT cxDefault;
INT cxIdeal;
} LVCOLUMNW, *LPLVCOLUMNW; } LVCOLUMNW, *LPLVCOLUMNW;
#define LVCOLUMN WINELIB_NAME_AW(LVCOLUMN) #define LVCOLUMN WINELIB_NAME_AW(LVCOLUMN)
@ -3518,6 +3565,8 @@ typedef struct tagLVHITTESTINFO
UINT flags; UINT flags;
INT iItem; INT iItem;
INT iSubItem; INT iSubItem;
/* (_WIN32_WINNT >= 0x0600) */
INT iGroup;
} LVHITTESTINFO, *LPLVHITTESTINFO; } LVHITTESTINFO, *LPLVHITTESTINFO;
#define LV_HITTESTINFO LVHITTESTINFO #define LV_HITTESTINFO LVHITTESTINFO
@ -3556,15 +3605,32 @@ typedef struct LVGROUP
UINT cbSize; UINT cbSize;
UINT mask; UINT mask;
LPWSTR pszHeader; LPWSTR pszHeader;
int cchHeader; INT cchHeader;
LPWSTR pszFooter; LPWSTR pszFooter;
int cchFooter; INT cchFooter;
int iGroupId; INT iGroupId;
UINT stateMask; UINT stateMask;
UINT state; UINT state;
UINT uAlign; UINT uAlign;
/* (_WIN32_WINNT >= 0x0600) */
LPWSTR pszSubtitle;
UINT cchSubtitle;
LPWSTR pszTask;
UINT cchTask;
LPWSTR pszDescriptionTop;
UINT cchDescriptionTop;
LPWSTR pszDescriptionBottom;
UINT cchDescriptionBottom;
INT iTitleImage;
INT iExtendedImage;
INT iFirstItem;
UINT cItems;
LPWSTR pszSubsetTitle;
UINT cchSubsetTitle;
} LVGROUP, *PLVGROUP; } LVGROUP, *PLVGROUP;
#define LVGROUP_V5_SIZE CCSIZEOF_STRUCT(LVGROUP, uAlign)
typedef struct LVGROUPMETRICS typedef struct LVGROUPMETRICS
{ {
UINT cbSize; UINT cbSize;
@ -3598,6 +3664,8 @@ typedef struct LVTILEINFO
int iItem; int iItem;
UINT cColumns; UINT cColumns;
PUINT puColumns; PUINT puColumns;
/* (_WIN32_WINNT >= 0x0600) */
int* piColFmt;
} LVTILEINFO, *PLVTILEINFO; } LVTILEINFO, *PLVTILEINFO;
typedef struct LVTILEVIEWINFO typedef struct LVTILEVIEWINFO
@ -3698,13 +3766,13 @@ typedef struct NMLVSCROLL
} NMLVSCROLL, *LPNMLVSCROLL; } NMLVSCROLL, *LPNMLVSCROLL;
#define ListView_SetItemCount(hwnd,count) \ #define ListView_SetItemCount(hwnd,count) \
(BOOL)SNDMSGA((hwnd),LVM_SETITEMCOUNT,(WPARAM)(INT)(count),0) (BOOL)SNDMSG((hwnd),LVM_SETITEMCOUNT,(WPARAM)(INT)(count),0)
#define ListView_SetTextBkColor(hwnd,clrBk) \ #define ListView_SetTextBkColor(hwnd,clrBk) \
(BOOL)SNDMSGA((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk)) (BOOL)SNDMSG((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
#define ListView_SetTextColor(hwnd,clrBk) \ #define ListView_SetTextColor(hwnd,clrBk) \
(BOOL)SNDMSGA((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk)) (BOOL)SNDMSG((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk))
#define ListView_DeleteColumn(hwnd,col)\ #define ListView_DeleteColumn(hwnd,col)\
(LRESULT)SNDMSGA((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col)) (LRESULT)SNDMSG((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col))
#define ListView_GetColumnA(hwnd,x,col)\ #define ListView_GetColumnA(hwnd,x,col)\
(LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col)) (LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))
#define ListView_GetColumnW(hwnd,x,col)\ #define ListView_GetColumnW(hwnd,x,col)\
@ -3716,13 +3784,13 @@ typedef struct NMLVSCROLL
(LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col)) (LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))
#define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn) #define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn)
#define ListView_GetColumnWidth(hwnd,x)\ #define ListView_GetColumnWidth(hwnd,x)\
(INT)SNDMSGW((hwnd),LVM_GETCOLUMNWIDTH,(WPARAM)(INT)(x),0L) (INT)SNDMSG((hwnd),LVM_GETCOLUMNWIDTH,(WPARAM)(INT)(x),0L)
#define ListView_SetColumnWidth(hwnd,x,width)\ #define ListView_SetColumnWidth(hwnd,x,width)\
(BOOL)SNDMSGW((hwnd),LVM_SETCOLUMNWIDTH,(WPARAM)(INT)(x),(LPARAM)(MAKELPARAM(width,0))) (BOOL)SNDMSG((hwnd),LVM_SETCOLUMNWIDTH,(WPARAM)(INT)(x),(LPARAM)(MAKELPARAM(width,0)))
#define ListView_GetNextItem(hwnd,nItem,flags) \ #define ListView_GetNextItem(hwnd,nItem,flags) \
(INT)SNDMSGA((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0))) (INT)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0)))
#define ListView_FindItemA(hwnd,nItem,plvfi) \ #define ListView_FindItemA(hwnd,nItem,plvfi) \
(INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi)) (INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi))
#define ListView_FindItemW(hwnd,nItem,plvfi) \ #define ListView_FindItemW(hwnd,nItem,plvfi) \
@ -3730,11 +3798,11 @@ typedef struct NMLVSCROLL
#define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem) #define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem)
#define ListView_Arrange(hwnd,code) \ #define ListView_Arrange(hwnd,code) \
(INT)SNDMSGA((hwnd),LVM_ARRANGE,(WPARAM)(INT)(code),0L) (INT)SNDMSG((hwnd),LVM_ARRANGE,(WPARAM)(INT)(code),0L)
#define ListView_GetItemPosition(hwnd,i,ppt) \ #define ListView_GetItemPosition(hwnd,i,ppt) \
(INT)SNDMSGA((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt)) (INT)SNDMSG((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt))
#define ListView_GetItemRect(hwnd,i,prc,code) \ #define ListView_GetItemRect(hwnd,i,prc,code) \
(BOOL)SNDMSGA((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \ (BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \
((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \ ((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \
*)(prc)) : (LPARAM)(RECT*)NULL)) *)(prc)) : (LPARAM)(RECT*)NULL))
#define ListView_SetItemA(hwnd,pitem) \ #define ListView_SetItemA(hwnd,pitem) \
@ -3743,56 +3811,56 @@ typedef struct NMLVSCROLL
(INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem)) (INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem))
#define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem) #define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem)
#define ListView_SetItemState(hwnd,i,data,dataMask) \ #define ListView_SetItemState(hwnd,i,data,dataMask) \
{ LVITEMA _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\ { LVITEM _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\
SNDMSGA(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEMA)&_LVi);} SNDMSG(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEM)&_LVi);}
#define ListView_GetItemState(hwnd,i,mask) \ #define ListView_GetItemState(hwnd,i,mask) \
(BOOL)SNDMSGA((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask)) (UINT)SNDMSG((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask))
#define ListView_SetCheckState(hwndLV, i, bCheck) \ #define ListView_SetCheckState(hwndLV, i, bCheck) \
{ LVITEM _LVi; _LVi.state = INDEXTOSTATEIMAGEMASK((bCheck)?2:1); _LVi.stateMask = LVIS_STATEIMAGEMASK; \ { LVITEM _LVi; _LVi.state = INDEXTOSTATEIMAGEMASK((bCheck)?2:1); _LVi.stateMask = LVIS_STATEIMAGEMASK; \
SNDMSG(hwndLV, LVM_SETITEMSTATE, (WPARAM)(UINT)(i), (LPARAM)(LPLVITEM)&_LVi);} SNDMSG(hwndLV, LVM_SETITEMSTATE, (WPARAM)(UINT)(i), (LPARAM)(LPLVITEM)&_LVi);}
#define ListView_GetCheckState(hwndLV, i) \ #define ListView_GetCheckState(hwndLV, i) \
(((UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) >> 12) - 1) (((UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) >> 12) - 1)
#define ListView_GetCountPerPage(hwnd) \ #define ListView_GetCountPerPage(hwnd) \
(BOOL)SNDMSGW((hwnd),LVM_GETCOUNTPERPAGE,0,0L) (BOOL)SNDMSG((hwnd),LVM_GETCOUNTPERPAGE,0,0L)
#define ListView_GetImageList(hwnd,iImageList) \ #define ListView_GetImageList(hwnd,iImageList) \
(HIMAGELIST)SNDMSGA((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT)(iImageList),0L) (HIMAGELIST)SNDMSG((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT)(iImageList),0L)
#define ListView_GetStringWidthA(hwnd,pstr) \ #define ListView_GetStringWidthA(hwnd,pstr) \
(INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr)) (INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr))
#define ListView_GetStringWidthW(hwnd,pstr) \ #define ListView_GetStringWidthW(hwnd,pstr) \
(INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr)) (INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr))
#define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth) #define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth)
#define ListView_GetTopIndex(hwnd) \ #define ListView_GetTopIndex(hwnd) \
(BOOL)SNDMSGA((hwnd),LVM_GETTOPINDEX,0,0L) (BOOL)SNDMSG((hwnd),LVM_GETTOPINDEX,0,0L)
#define ListView_Scroll(hwnd,dx,dy) \ #define ListView_Scroll(hwnd,dx,dy) \
(BOOL)SNDMSGA((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy)) (BOOL)SNDMSG((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy))
#define ListView_EnsureVisible(hwnd,i,fPartialOk) \ #define ListView_EnsureVisible(hwnd,i,fPartialOk) \
(BOOL)SNDMSGA((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk) (BOOL)SNDMSG((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk)
#define ListView_SetBkColor(hwnd,clrBk) \ #define ListView_SetBkColor(hwnd,clrBk) \
(BOOL)SNDMSGA((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk)) (BOOL)SNDMSG((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
#define ListView_SetImageList(hwnd,himl,iImageList) \ #define ListView_SetImageList(hwnd,himl,iImageList) \
(HIMAGELIST)SNDMSGA((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl)) (HIMAGELIST)SNDMSG((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl))
#define ListView_GetItemCount(hwnd) \ #define ListView_GetItemCount(hwnd) \
(INT)SNDMSGA((hwnd),LVM_GETITEMCOUNT,0,0L) (INT)SNDMSG((hwnd),LVM_GETITEMCOUNT,0,0L)
#define ListView_RedrawItems(hwnd,first,last) \ #define ListView_RedrawItems(hwnd,first,last) \
(BOOL)SNDMSGA((hwnd),LVM_REDRAWITEMS,(WPARAM)(INT)(first),(LPARAM)(INT)(last)) (BOOL)SNDMSG((hwnd),LVM_REDRAWITEMS,(WPARAM)(INT)(first),(LPARAM)(INT)(last))
#define ListView_GetEditControl(hwnd) \ #define ListView_GetEditControl(hwnd) \
(HWND)SNDMSGA((hwnd), LVM_GETEDITCONTROL, 0, 0) (HWND)SNDMSG((hwnd), LVM_GETEDITCONTROL, 0, 0)
#define ListView_GetTextColor(hwnd) \ #define ListView_GetTextColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), LVM_GETTEXTCOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, 0)
#define ListView_GetTextBkColor(hwnd) \ #define ListView_GetTextBkColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), LVM_GETTEXTBKCOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, 0)
#define ListView_GetBkColor(hwnd) \ #define ListView_GetBkColor(hwnd) \
(COLORREF)SNDMSGA((hwnd), LVM_GETBKCOLOR, 0, 0) (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, 0)
#define ListView_GetItemA(hwnd,pitem) \ #define ListView_GetItemA(hwnd,pitem) \
(BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem)) (BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem))
#define ListView_GetItemW(hwnd,pitem) \ #define ListView_GetItemW(hwnd,pitem) \
(BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem)) (BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem))
#define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem) #define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem)
#define ListView_GetOrigin(hwnd,ppt) \ #define ListView_GetOrigin(hwnd,ppt) \
(BOOL)SNDMSGW((hwnd),LVM_GETORIGIN,0,(LPARAM)(POINT *)(ppt)) (BOOL)SNDMSG((hwnd),LVM_GETORIGIN,0,(LPARAM)(POINT *)(ppt))
#define ListView_HitTest(hwnd,pinfo) \ #define ListView_HitTest(hwnd,pinfo) \
(INT)SNDMSGA((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo)) (INT)SNDMSG((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))
#define ListView_InsertItemA(hwnd,pitem) \ #define ListView_InsertItemA(hwnd,pitem) \
(INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem)) (INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem))
@ -3801,7 +3869,7 @@ typedef struct NMLVSCROLL
#define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem) #define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem)
#define ListView_DeleteAllItems(hwnd) \ #define ListView_DeleteAllItems(hwnd) \
(BOOL)SNDMSGA((hwnd),LVM_DELETEALLITEMS,0,0L) (BOOL)SNDMSG((hwnd),LVM_DELETEALLITEMS,0,0L)
#define ListView_InsertColumnA(hwnd,iCol,pcol) \ #define ListView_InsertColumnA(hwnd,iCol,pcol) \
(INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol)) (INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol))
@ -3810,19 +3878,19 @@ typedef struct NMLVSCROLL
#define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn) #define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn)
#define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \ #define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \
(BOOL)SNDMSGA((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare) (BOOL)SNDMSG((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare)
#define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \ #define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \
(BOOL)SNDMSGA((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare)) (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
#define ListView_SetItemPosition(hwndLV, i, x, y) \ #define ListView_SetItemPosition(hwndLV, i, x, y) \
(BOOL)SNDMSGA((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y))) (BOOL)SNDMSG((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y)))
#define ListView_GetSelectedCount(hwndLV) \ #define ListView_GetSelectedCount(hwndLV) \
(UINT)SNDMSGA((hwndLV),LVM_GETSELECTEDCOUNT,0,0L) (UINT)SNDMSG((hwndLV),LVM_GETSELECTEDCOUNT,0,0L)
#define ListView_EditLabelA(hwndLV, i) \ #define ListView_EditLabelA(hwndLV, i) \
(HWND)SNDMSGA((hwndLV),LVM_EDITLABELA,(WPARAM)(int)(i), 0L) (HWND)SNDMSG((hwndLV),LVM_EDITLABELA,(WPARAM)(int)(i), 0L)
#define ListView_EditLabelW(hwndLV, i) \ #define ListView_EditLabelW(hwndLV, i) \
(HWND)SNDMSGW((hwndLV),LVM_EDITLABELW,(WPARAM)(int)(i), 0L) (HWND)SNDMSG((hwndLV),LVM_EDITLABELW,(WPARAM)(int)(i), 0L)
#define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel) #define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel)
#define ListView_GetItemTextA(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \ #define ListView_GetItemTextA(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \
@ -3843,7 +3911,7 @@ typedef struct NMLVSCROLL
} }
#define ListView_GetItemText WINELIB_NAME_AW(ListView_GetItemText) #define ListView_GetItemText WINELIB_NAME_AW(ListView_GetItemText)
#define ListView_SetItemPosition32(hwnd,n,x1,y1) \ #define ListView_SetItemPosition32(hwnd,n,x1,y1) \
{ POINT ptNewPos; ptNewPos.x = (x1); ptNewPos.y = (y1); SNDMSGA((hwnd), LVM_SETITEMPOSITION32, (WPARAM)(int)(n), (LPARAM)&ptNewPos); } { POINT ptNewPos; ptNewPos.x = (x1); ptNewPos.y = (y1); SNDMSG((hwnd), LVM_SETITEMPOSITION32, (WPARAM)(int)(n), (LPARAM)&ptNewPos); }
#define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \ #define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \
{ LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\ { LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\
SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);} SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);}
@ -3853,40 +3921,40 @@ typedef struct NMLVSCROLL
#define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText) #define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText)
#define ListView_DeleteItem(hwndLV, i) \ #define ListView_DeleteItem(hwndLV, i) \
(BOOL)SNDMSGA(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0L) (BOOL)SNDMSG(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0L)
#define ListView_Update(hwndLV, i) \ #define ListView_Update(hwndLV, i) \
(BOOL)SNDMSGA((hwndLV), LVM_UPDATE, (WPARAM)(i), 0L) (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), 0L)
#define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \ #define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \
(BOOL)SNDMSGA((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi) (BOOL)SNDMSG((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)
#define ListView_GetExtendedListViewStyle(hwndLV) \ #define ListView_GetExtendedListViewStyle(hwndLV) \
(DWORD)SNDMSGA((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0L) (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0L)
#define ListView_GetHotCursor(hwndLV) \ #define ListView_GetHotCursor(hwndLV) \
(HCURSOR)SNDMSGA((hwndLV), LVM_GETHOTCURSOR, 0, 0L) (HCURSOR)SNDMSG((hwndLV), LVM_GETHOTCURSOR, 0, 0L)
#define ListView_GetHotItem(hwndLV) \ #define ListView_GetHotItem(hwndLV) \
(int)SNDMSGA((hwndLV), LVM_GETHOTITEM, 0, 0L) (int)SNDMSG((hwndLV), LVM_GETHOTITEM, 0, 0L)
#define ListView_GetItemSpacing(hwndLV, fSmall) \ #define ListView_GetItemSpacing(hwndLV, fSmall) \
(DWORD)SNDMSGA((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0L) (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0L)
#define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \ #define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \
(BOOL)SNDMSGA((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \ (BOOL)SNDMSG((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \
((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : 0)) ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : 0))
#define ListView_GetToolTips(hwndLV) \ #define ListView_GetToolTips(hwndLV) \
(HWND)SNDMSGA((hwndLV), LVM_GETTOOLTIPS, 0, 0L) (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0L)
#define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \ #define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \
(BOOL)SNDMSGA((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi) (BOOL)SNDMSG((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)
#define ListView_SetExtendedListViewStyle(hwndLV, dw) \ #define ListView_SetExtendedListViewStyle(hwndLV, dw) \
(DWORD)SNDMSGA((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw) (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw)
#define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \ #define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \
(DWORD)SNDMSGA((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw) (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw)
#define ListView_SetHotCursor(hwndLV, hcur) \ #define ListView_SetHotCursor(hwndLV, hcur) \
(HCURSOR)SNDMSGA((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur) (HCURSOR)SNDMSG((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur)
#define ListView_SetHotItem(hwndLV, i) \ #define ListView_SetHotItem(hwndLV, i) \
(int)SNDMSGA((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0L) (int)SNDMSG((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0L)
#define ListView_SetIconSpacing(hwndLV, cx, cy) \ #define ListView_SetIconSpacing(hwndLV, cx, cy) \
(DWORD)SNDMSGA((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy)) (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))
#define ListView_SetToolTips(hwndLV, hwndNewHwnd) \ #define ListView_SetToolTips(hwndLV, hwndNewHwnd) \
(HWND)SNDMSGA((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0L) (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0L)
#define ListView_SubItemHitTest(hwndLV, plvhti) \ #define ListView_SubItemHitTest(hwndLV, plvhti) \
(int)SNDMSGA((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti)) (int)SNDMSG((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti))
#define ListView_GetSelectionMark(hwndLV) \ #define ListView_GetSelectionMark(hwndLV) \
(int)SNDMSG((hwndLV), LVM_GETSELECTIONMARK, 0, 0) (int)SNDMSG((hwndLV), LVM_GETSELECTIONMARK, 0, 0)
#define ListView_SetSelectionMark(hwndLV, iItem) \ #define ListView_SetSelectionMark(hwndLV, iItem) \
@ -4063,11 +4131,11 @@ static const WCHAR WC_TABCONTROLW[] = { 'S','y','s',
/* TabCtrl Macros */ /* TabCtrl Macros */
#define TabCtrl_GetImageList(hwnd) \ #define TabCtrl_GetImageList(hwnd) \
(HIMAGELIST)SNDMSGA((hwnd), TCM_GETIMAGELIST, 0, 0L) (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, 0L)
#define TabCtrl_SetImageList(hwnd, himl) \ #define TabCtrl_SetImageList(hwnd, himl) \
(HIMAGELIST)SNDMSGA((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl)) (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl))
#define TabCtrl_GetItemCount(hwnd) \ #define TabCtrl_GetItemCount(hwnd) \
(int)SNDMSGA((hwnd), TCM_GETITEMCOUNT, 0, 0L) (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, 0L)
#define TabCtrl_GetItemA(hwnd, iItem, pitem) \ #define TabCtrl_GetItemA(hwnd, iItem, pitem) \
(BOOL)SNDMSGA((hwnd), TCM_GETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem)) (BOOL)SNDMSGA((hwnd), TCM_GETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))
#define TabCtrl_GetItemW(hwnd, iItem, pitem) \ #define TabCtrl_GetItemW(hwnd, iItem, pitem) \
@ -4084,49 +4152,49 @@ static const WCHAR WC_TABCONTROLW[] = { 'S','y','s',
(int)SNDMSGW((hwnd), TCM_INSERTITEMW, (WPARAM)(int)iItem, (LPARAM)(const TCITEMW *)(pitem)) (int)SNDMSGW((hwnd), TCM_INSERTITEMW, (WPARAM)(int)iItem, (LPARAM)(const TCITEMW *)(pitem))
#define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem) #define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem)
#define TabCtrl_DeleteItem(hwnd, i) \ #define TabCtrl_DeleteItem(hwnd, i) \
(BOOL)SNDMSGA((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0L) (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0L)
#define TabCtrl_DeleteAllItems(hwnd) \ #define TabCtrl_DeleteAllItems(hwnd) \
(BOOL)SNDMSGA((hwnd), TCM_DELETEALLITEMS, 0, 0L) (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, 0L)
#define TabCtrl_GetItemRect(hwnd, i, prc) \ #define TabCtrl_GetItemRect(hwnd, i, prc) \
(BOOL)SNDMSGA((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc)) (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))
#define TabCtrl_GetCurSel(hwnd) \ #define TabCtrl_GetCurSel(hwnd) \
(int)SNDMSGA((hwnd), TCM_GETCURSEL, 0, 0) (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)
#define TabCtrl_SetCurSel(hwnd, i) \ #define TabCtrl_SetCurSel(hwnd, i) \
(int)SNDMSGA((hwnd), TCM_SETCURSEL, (WPARAM)i, 0) (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)i, 0)
#define TabCtrl_HitTest(hwndTC, pinfo) \ #define TabCtrl_HitTest(hwndTC, pinfo) \
(int)SNDMSGA((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo)) (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))
#define TabCtrl_SetItemExtra(hwndTC, cb) \ #define TabCtrl_SetItemExtra(hwndTC, cb) \
(BOOL)SNDMSGA((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0L) (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0L)
#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \ #define TabCtrl_AdjustRect(hwnd, bLarger, prc) \
(int)SNDMSGA(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc) (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc)
#define TabCtrl_SetItemSize(hwnd, x, y) \ #define TabCtrl_SetItemSize(hwnd, x, y) \
(DWORD)SNDMSGA((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y)) (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
#define TabCtrl_RemoveImage(hwnd, i) \ #define TabCtrl_RemoveImage(hwnd, i) \
(void)SNDMSGA((hwnd), TCM_REMOVEIMAGE, i, 0L) (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, 0L)
#define TabCtrl_SetPadding(hwnd, cx, cy) \ #define TabCtrl_SetPadding(hwnd, cx, cy) \
(void)SNDMSGA((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy)) (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
#define TabCtrl_GetRowCount(hwnd) \ #define TabCtrl_GetRowCount(hwnd) \
(int)SNDMSGA((hwnd), TCM_GETROWCOUNT, 0, 0L) (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, 0L)
#define TabCtrl_GetToolTips(hwnd) \ #define TabCtrl_GetToolTips(hwnd) \
(HWND)SNDMSGA((hwnd), TCM_GETTOOLTIPS, 0, 0L) (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, 0L)
#define TabCtrl_SetToolTips(hwnd, hwndTT) \ #define TabCtrl_SetToolTips(hwnd, hwndTT) \
(void)SNDMSGA((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0L) (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0L)
#define TabCtrl_GetCurFocus(hwnd) \ #define TabCtrl_GetCurFocus(hwnd) \
(int)SNDMSGA((hwnd), TCM_GETCURFOCUS, 0, 0) (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0)
#define TabCtrl_SetCurFocus(hwnd, i) \ #define TabCtrl_SetCurFocus(hwnd, i) \
SNDMSGA((hwnd),TCM_SETCURFOCUS, i, 0) SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0)
#define TabCtrl_SetMinTabWidth(hwnd, x) \ #define TabCtrl_SetMinTabWidth(hwnd, x) \
(int)SNDMSGA((hwnd), TCM_SETMINTABWIDTH, 0, x) (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x)
#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\ #define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\
(void)SNDMSGA((hwnd), TCM_DESELECTALL, fExcludeFocus, 0) (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)
#define TabCtrl_GetUnicodeFormat(hwnd) \ #define TabCtrl_GetUnicodeFormat(hwnd) \
(BOOL)SNDMSGA((hwnd), TCM_GETUNICODEFORMAT, 0, 0) (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0)
#define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \ #define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \
(BOOL)SNDMSGA((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)fUnicode, 0) (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)fUnicode, 0)
#define TabCtrl_GetExtendedStyle(hwnd) \ #define TabCtrl_GetExtendedStyle(hwnd) \
(BOOL)SNDMSGA((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0) (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)
#define TabCtrl_SetExtendedStyle(hwnd, dwExStyle) \ #define TabCtrl_SetExtendedStyle(hwnd, dwExStyle) \
(BOOL)SNDMSGA((hwnd), TCM_GETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle) (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle)
#define TabCtrl_HighlightItem(hwnd, i, fHighlight) \ #define TabCtrl_HighlightItem(hwnd, i, fHighlight) \
(BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)i, (LPARAM)MAKELONG(fHighlight, 0)) (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)i, (LPARAM)MAKELONG(fHighlight, 0))
@ -4455,13 +4523,13 @@ static const WCHAR ANIMATE_CLASSW[] = { 'S','y','s',
(BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName)) (BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName))
#define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx) #define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx)
#define Animate_Play(hwnd,from,to,rep) \ #define Animate_Play(hwnd,from,to,rep) \
(BOOL)SNDMSGA(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to)) (BOOL)SNDMSG(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to))
#define Animate_Stop(hwnd) \ #define Animate_Stop(hwnd) \
(BOOL)SNDMSGA(hwnd,ACM_STOP,0,0) (BOOL)SNDMSG(hwnd,ACM_STOP,0,0)
#define Animate_Close(hwnd) \ #define Animate_Close(hwnd) \
(BOOL)SNDMSGA(hwnd,ACM_OPENA,0,0) (BOOL)SNDMSG(hwnd,ACM_OPENA,0,0)
#define Animate_Seek(hwnd,frame) \ #define Animate_Seek(hwnd,frame) \
(BOOL)SNDMSGA(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame)) (BOOL)SNDMSG(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame))
/************************************************************************** /**************************************************************************