Listview updates
Dimitrie O. Paun
dpaun at rogers.com
Sat Sep 7 03:30:51 CDT 2002
ChangeLog:
-- pass infoPtr around, instead of hwnd
-- implement hot cursor
-- update list of unimplemented messages
-- simplify the code for editing labels
-- start working towards more type-safe functions
-- small code cleanups
-- some docu updates
Index: dlls/comctl32/listview.c
===================================================================
RCS file: /var/cvs/wine/dlls/comctl32/listview.c,v
retrieving revision 1.138
diff -u -r1.138 listview.c
--- dlls/comctl32/listview.c 6 Sep 2002 19:41:17 -0000 1.138
+++ dlls/comctl32/listview.c 7 Sep 2002 08:06:44 -0000
@@ -37,7 +37,6 @@
*
* Advanced functionality:
* LISTVIEW_GetNumberOfWorkAreas : not implemented
- * LISTVIEW_GetHotCursor : not implemented
* LISTVIEW_GetISearchString : not implemented
* LISTVIEW_GetBkImage : not implemented
* LISTVIEW_SetBkImage : not implemented
@@ -77,8 +76,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(listview);
/* Some definitions for inline edit control */
-typedef BOOL (*EditlblCallbackW)(HWND, LPWSTR, DWORD);
-typedef BOOL (*EditlblCallbackA)(HWND, LPWSTR, DWORD);
typedef struct tagLV_INTHIT
{
@@ -91,8 +88,8 @@
typedef struct tagEDITLABEL_ITEM
{
WNDPROC EditWndProc;
- DWORD param;
- EditlblCallbackW EditLblCb;
+ INT nEditItem;
+ BOOL bEditLblCb;
} EDITLABEL_ITEM;
typedef struct tagLISTVIEW_SUBITEM
@@ -144,6 +141,7 @@
UINT uCallbackMask;
HWND hwndHeader;
HFONT hDefaultFont;
+ HCURSOR hHotCursor;
HFONT hFont;
INT ntmHeight; /* from GetTextMetrics from above font */
INT ntmAveCharWidth; /* from GetTextMetrics from above font */
@@ -155,7 +153,7 @@
HWND hwndEdit;
BOOL Editing;
INT nEditLabelItem;
- EDITLABEL_ITEM *pedititem;
+ EDITLABEL_ITEM pedititem;
DWORD dwHoverTime;
INT nColumnCount; /* the number of columns in this control */
@@ -226,70 +224,66 @@
#define GETITEMCOUNT(infoPtr) ((infoPtr)->hdpaItems->nItemCount)
#define HDM_INSERTITEMT(isW) ( (isW) ? HDM_INSERTITEMW : HDM_INSERTITEMA )
-HWND CreateEditLabelT(LPCWSTR text, DWORD style, INT x, INT y,
- INT width, INT height, HWND parent, HINSTANCE hinst,
- EditlblCallbackW EditLblCb, DWORD param, BOOL isW);
/*
* forward declarations
*/
-static LRESULT LISTVIEW_GetItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL internal, BOOL isW);
-static INT LISTVIEW_SuperHitTestItem(HWND, LPLV_INTHIT, BOOL);
-static INT LISTVIEW_HitTestItem(HWND, LPLVHITTESTINFO, BOOL);
-static INT LISTVIEW_GetCountPerRow(HWND);
-static INT LISTVIEW_GetCountPerColumn(HWND);
-static VOID LISTVIEW_AlignLeft(HWND);
-static VOID LISTVIEW_AlignTop(HWND);
-static VOID LISTVIEW_AddGroupSelection(HWND, INT);
-static VOID LISTVIEW_AddSelection(HWND, INT);
-static BOOL LISTVIEW_AddSubItemT(HWND, LPLVITEMW, BOOL);
+static LRESULT LISTVIEW_GetItemT(LISTVIEW_INFO *, LPLVITEMW, BOOL, BOOL);
+static INT LISTVIEW_SuperHitTestItem(LISTVIEW_INFO *, LPLV_INTHIT, BOOL);
+static INT LISTVIEW_HitTestItem(LISTVIEW_INFO *, LPLVHITTESTINFO, BOOL);
+static INT LISTVIEW_GetCountPerRow(LISTVIEW_INFO *);
+static INT LISTVIEW_GetCountPerColumn(LISTVIEW_INFO *);
+static VOID LISTVIEW_AlignLeft(LISTVIEW_INFO *);
+static VOID LISTVIEW_AlignTop(LISTVIEW_INFO *);
+static VOID LISTVIEW_AddGroupSelection(LISTVIEW_INFO *, INT);
+static VOID LISTVIEW_AddSelection(LISTVIEW_INFO *, INT);
+static BOOL LISTVIEW_AddSubItemT(LISTVIEW_INFO *, LPLVITEMW, BOOL);
static INT LISTVIEW_FindInsertPosition(HDPA, INT);
-static INT LISTVIEW_GetItemHeight(HWND);
-static BOOL LISTVIEW_GetItemBoundBox(HWND, INT, LPRECT);
-static BOOL LISTVIEW_GetItemPosition(HWND, INT, LPPOINT);
-static LRESULT LISTVIEW_GetItemRect(HWND, INT, LPRECT);
-static LRESULT LISTVIEW_GetSubItemRect(HWND, INT, INT, INT, LPRECT);
-static INT LISTVIEW_GetItemWidth(HWND);
-static INT LISTVIEW_GetLabelWidth(HWND, INT);
-static LRESULT LISTVIEW_GetOrigin(HWND, LPPOINT);
-static INT LISTVIEW_CalculateWidth(HWND hwnd, INT nItem);
+static INT LISTVIEW_GetItemHeight(LISTVIEW_INFO *);
+static BOOL LISTVIEW_GetItemBoundBox(LISTVIEW_INFO *, INT, LPRECT);
+static BOOL LISTVIEW_GetItemPosition(LISTVIEW_INFO *, INT, LPPOINT);
+static LRESULT LISTVIEW_GetItemRect(LISTVIEW_INFO *, INT, LPRECT);
+static LRESULT LISTVIEW_GetSubItemRect(LISTVIEW_INFO *, INT, INT, INT, LPRECT);
+static INT LISTVIEW_GetItemWidth(LISTVIEW_INFO *);
+static INT LISTVIEW_GetLabelWidth(LISTVIEW_INFO *, INT);
+static LRESULT LISTVIEW_GetOrigin(LISTVIEW_INFO *, LPPOINT);
+static INT LISTVIEW_CalculateWidth(LISTVIEW_INFO *, INT);
static LISTVIEW_SUBITEM* LISTVIEW_GetSubItem(HDPA, INT);
-static LRESULT LISTVIEW_GetViewRect(HWND, LPRECT);
-static BOOL LISTVIEW_InitItemT(HWND, LISTVIEW_ITEM *, LPLVITEMW, BOOL);
-static BOOL LISTVIEW_InitSubItemT(HWND, LISTVIEW_SUBITEM *, LPLVITEMW, BOOL);
-static LRESULT LISTVIEW_MouseSelection(HWND, POINT);
+static LRESULT LISTVIEW_GetViewRect(LISTVIEW_INFO *, LPRECT);
+static BOOL LISTVIEW_InitItemT(LISTVIEW_INFO *, LISTVIEW_ITEM *, LPLVITEMW, BOOL);
+static BOOL LISTVIEW_InitSubItemT(LISTVIEW_INFO *, LISTVIEW_SUBITEM *, LPLVITEMW, BOOL);
+static INT LISTVIEW_MouseSelection(LISTVIEW_INFO *, POINT);
static BOOL LISTVIEW_RemoveColumn(HDPA, INT);
static BOOL LISTVIEW_RemoveSubItem(HDPA, INT);
-static VOID LISTVIEW_SetGroupSelection(HWND, INT);
-static BOOL LISTVIEW_SetItemT(HWND, LPLVITEMW, BOOL);
-static BOOL LISTVIEW_SetItemFocus(HWND, INT);
-static BOOL LISTVIEW_SetItemPosition(HWND, INT, LONG, LONG);
-static VOID LISTVIEW_UpdateScroll(HWND);
-static VOID LISTVIEW_SetSelection(HWND, INT);
-static BOOL LISTVIEW_UpdateSize(HWND);
-static BOOL LISTVIEW_SetSubItemT(HWND, LPLVITEMW, BOOL);
-static LRESULT LISTVIEW_SetViewRect(HWND, LPRECT);
-static BOOL LISTVIEW_ToggleSelection(HWND, INT);
-static VOID LISTVIEW_UnsupportedStyles(LONG lStyle);
-static HWND LISTVIEW_EditLabelT(HWND hwnd, INT nItem, BOOL isW);
-static BOOL LISTVIEW_EndEditLabelW(HWND hwnd, LPWSTR pszText, DWORD nItem);
-static BOOL LISTVIEW_EndEditLabelA(HWND hwnd, LPSTR pszText, DWORD nItem);
-static LRESULT LISTVIEW_Command(HWND hwnd, WPARAM wParam, LPARAM lParam);
-static LRESULT LISTVIEW_SortItems(HWND hwnd, PFNLVCOMPARE pfnCompare, LPARAM lParamSort);
-static LRESULT LISTVIEW_GetStringWidthT(HWND hwnd, LPCWSTR lpszText, BOOL isW);
-static INT LISTVIEW_ProcessLetterKeys( HWND hwnd, WPARAM charCode, LPARAM keyData );
-static BOOL LISTVIEW_KeySelection(HWND hwnd, INT nItem);
-static LRESULT LISTVIEW_GetItemState(HWND hwnd, INT nItem, UINT uMask);
-static LRESULT LISTVIEW_SetItemState(HWND hwnd, INT nItem, LPLVITEMW lpLVItem);
-static BOOL LISTVIEW_IsSelected(HWND hwnd, INT nItem);
-static VOID LISTVIEW_RemoveSelectionRange(HWND hwnd, INT lItem, INT uItem);
-static void LISTVIEW_FillBackground(HWND hwnd, HDC hdc, LPRECT rc);
-static void ListView_UpdateLargeItemLabelRect (HWND hwnd, const LISTVIEW_INFO* infoPtr, int nItem, RECT *rect);
-static LRESULT LISTVIEW_GetColumnT(HWND, INT, LPLVCOLUMNW, BOOL);
-static LRESULT LISTVIEW_VScroll(HWND hwnd, INT nScrollCode, SHORT nCurrentPos, HWND hScrollWnd);
-static LRESULT LISTVIEW_HScroll(HWND hwnd, INT nScrollCode, SHORT nCurrentPos, HWND hScrollWnd);
-static INT LISTVIEW_GetTopIndex(HWND hwnd);
-static BOOL LISTVIEW_EnsureVisible(HWND hwnd, INT nItem, BOOL bPartial);
+static VOID LISTVIEW_SetGroupSelection(LISTVIEW_INFO *, INT);
+static BOOL LISTVIEW_SetItemT(LISTVIEW_INFO *, LPLVITEMW, BOOL);
+static BOOL LISTVIEW_SetItemFocus(LISTVIEW_INFO *, INT);
+static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *, INT, LONG, LONG);
+static VOID LISTVIEW_UpdateScroll(LISTVIEW_INFO *);
+static VOID LISTVIEW_SetSelection(LISTVIEW_INFO *, INT);
+static BOOL LISTVIEW_UpdateSize(LISTVIEW_INFO *);
+static BOOL LISTVIEW_SetSubItemT(LISTVIEW_INFO *, LPLVITEMW, BOOL);
+static LRESULT LISTVIEW_SetViewRect(LISTVIEW_INFO *, LPRECT);
+static BOOL LISTVIEW_ToggleSelection(LISTVIEW_INFO *, INT);
+static VOID LISTVIEW_UnsupportedStyles(LONG);
+static HWND LISTVIEW_EditLabelT(LISTVIEW_INFO *, INT, BOOL);
+static LRESULT LISTVIEW_Command(LISTVIEW_INFO *, WPARAM, LPARAM);
+static LRESULT LISTVIEW_SortItems(LISTVIEW_INFO *, PFNLVCOMPARE, LPARAM);
+static LRESULT LISTVIEW_GetStringWidthT(LISTVIEW_INFO *, LPCWSTR, BOOL);
+static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *, WPARAM, LPARAM);
+static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *, INT);
+static LRESULT LISTVIEW_GetItemState(LISTVIEW_INFO *, INT, UINT);
+static LRESULT LISTVIEW_SetItemState(LISTVIEW_INFO *, INT, LPLVITEMW);
+static BOOL LISTVIEW_IsSelected(LISTVIEW_INFO *, INT);
+static VOID LISTVIEW_RemoveSelectionRange(LISTVIEW_INFO *, INT, INT);
+static void LISTVIEW_FillBackground(LISTVIEW_INFO *, HDC, LPRECT);
+static void LISTVIEW_UpdateLargeItemLabelRect (LISTVIEW_INFO *, int, RECT*);
+static LRESULT LISTVIEW_GetColumnT(LISTVIEW_INFO *, INT, LPLVCOLUMNW, BOOL);
+static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *, INT, SHORT, HWND);
+static LRESULT LISTVIEW_HScroll(LISTVIEW_INFO *, INT, SHORT, HWND);
+static INT LISTVIEW_GetTopIndex(LISTVIEW_INFO *);
+static BOOL LISTVIEW_EnsureVisible(LISTVIEW_INFO *, INT, BOOL);
+static HWND CreateEditLabelT(LISTVIEW_INFO *, LPCWSTR, DWORD, INT, INT, INT, INT, INT, BOOL);
/******** Defines that LISTVIEW_ProcessLetterKeys uses ****************/
#define KEY_DELAY 450
@@ -381,24 +375,24 @@
return CallWindowProcA(proc, hwnd, uMsg, wParam, lParam);
}
-static inline BOOL notify(HWND self, INT code, LPNMHDR pnmh)
+static inline BOOL notify(LISTVIEW_INFO *infoPtr, INT code, LPNMHDR pnmh)
{
- pnmh->hwndFrom = self;
- pnmh->idFrom = GetWindowLongW(self, GWL_ID);
+ pnmh->hwndFrom = infoPtr->hwndSelf;
+ pnmh->idFrom = GetWindowLongW(infoPtr->hwndSelf, GWL_ID);
pnmh->code = code;
- return (BOOL)SendMessageW(GetParent(self), WM_NOTIFY,
+ return (BOOL)SendMessageW(GetParent(infoPtr->hwndSelf), WM_NOTIFY,
(WPARAM)pnmh->idFrom, (LPARAM)pnmh);
}
-static inline BOOL hdr_notify(HWND self, INT code)
+static inline BOOL hdr_notify(LISTVIEW_INFO *infoPtr, INT code)
{
NMHDR nmh;
- return notify(self, code, &nmh);
+ return notify(infoPtr, code, &nmh);
}
-static inline BOOL listview_notify(HWND self, INT code, LPNMLISTVIEW plvnm)
+static inline BOOL listview_notify(LISTVIEW_INFO *infoPtr, INT code, LPNMLISTVIEW plvnm)
{
- return notify(self, code, (LPNMHDR)plvnm);
+ return notify(infoPtr, code, (LPNMHDR)plvnm);
}
static int tabNotification[] = {
@@ -423,21 +417,20 @@
/*
Send notification. depends on dispinfoW having same
structure as dispinfoA.
- self : listview handle
+ infoPtr : listview struct
notificationCode : *Unicode* notification code
pdi : dispinfo structure (can be unicode or ansi)
isW : TRUE if dispinfo is Unicode
*/
-static BOOL dispinfo_notifyT(HWND self, INT notificationCode, LPNMLVDISPINFOW pdi, BOOL isW)
+static BOOL dispinfo_notifyT(LISTVIEW_INFO *infoPtr, INT notificationCode, LPNMLVDISPINFOW pdi, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(self, 0);
BOOL bResult = FALSE;
BOOL convertToAnsi = FALSE, convertToUnicode = FALSE;
INT realNotifCode;
INT cchTempBufMax = 0, savCchTextMax = 0;
LPWSTR pszTempBuf = NULL, savPszText = NULL;
- TRACE("(self=%x, code=%x, pdi=%p, isW=%d)\n", self, notificationCode, pdi, isW);
+ TRACE("(code=%x, pdi=%p, isW=%d)\n", notificationCode, pdi, isW);
TRACE(" notifyFormat=%s\n",
infoPtr->notifyFormat == NFR_UNICODE ? "NFR_UNICODE" :
infoPtr->notifyFormat == NFR_ANSI ? "NFR_ANSI" : "(not set)");
@@ -482,7 +475,7 @@
pdi->item.cchTextMax = cchTempBufMax;
}
- bResult = notify(self, realNotifCode, (LPNMHDR)pdi);
+ bResult = notify(infoPtr, realNotifCode, (LPNMHDR)pdi);
if (convertToUnicode || convertToAnsi)
{ /* convert back result */
@@ -500,9 +493,9 @@
return bResult;
}
-static inline LRESULT LISTVIEW_GetItemW(HWND hwnd, LPLVITEMW lpLVItem, BOOL internal)
+static inline LRESULT LISTVIEW_GetItemW(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL internal)
{
- return LISTVIEW_GetItemT(hwnd, lpLVItem, internal, TRUE);
+ return LISTVIEW_GetItemT(infoPtr, lpLVItem, internal, TRUE);
}
static inline int lstrncmpiW(LPCWSTR s1, LPCWSTR s2, int n)
@@ -561,18 +554,17 @@
}
static BOOL
-LISTVIEW_SendCustomDrawNotify (HWND hwnd, DWORD dwDrawStage, HDC hdc,
+LISTVIEW_SendCustomDrawNotify (LISTVIEW_INFO *infoPtr, DWORD dwDrawStage, HDC hdc,
RECT rc)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
NMLVCUSTOMDRAW nmcdhdr;
LPNMCUSTOMDRAW nmcd;
- TRACE("(hwnd=%x, dwDrawStage=%lx, hdc=%x, rc=?)\n", hwnd, dwDrawStage, hdc);
+ TRACE("(dwDrawStage=%lx, hdc=%x, rc=?)\n", dwDrawStage, hdc);
nmcd= & nmcdhdr.nmcd;
- nmcd->hdr.hwndFrom = hwnd;
- nmcd->hdr.idFrom = GetWindowLongW( hwnd, GWL_ID);
+ nmcd->hdr.hwndFrom = infoPtr->hwndSelf;
+ nmcd->hdr.idFrom = GetWindowLongW( infoPtr->hwndSelf, GWL_ID);
nmcd->hdr.code = NM_CUSTOMDRAW;
nmcd->dwDrawStage= dwDrawStage;
nmcd->hdc = hdc;
@@ -586,16 +578,15 @@
nmcdhdr.clrText = infoPtr->clrText;
nmcdhdr.clrTextBk= infoPtr->clrBk;
- return (BOOL)SendMessageW (GetParent (hwnd), WM_NOTIFY,
- (WPARAM) GetWindowLongW( hwnd, GWL_ID), (LPARAM)&nmcdhdr);
+ return (BOOL)SendMessageW (GetParent (infoPtr->hwndSelf), WM_NOTIFY,
+ (WPARAM) nmcd->hdr.idFrom, (LPARAM)&nmcdhdr);
}
static BOOL
-LISTVIEW_SendCustomDrawItemNotify (HWND hwnd, HDC hdc,
+LISTVIEW_SendCustomDrawItemNotify (LISTVIEW_INFO *infoPtr, HDC hdc,
UINT iItem, UINT iSubItem,
UINT uItemDrawState)
{
- LISTVIEW_INFO *infoPtr;
NMLVCUSTOMDRAW nmcdhdr;
LPNMCUSTOMDRAW nmcd;
DWORD dwDrawStage,dwItemSpec;
@@ -604,27 +595,25 @@
RECT itemRect;
LVITEMW item;
- infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
ZeroMemory(&item,sizeof(item));
item.iItem = iItem;
item.mask = LVIF_PARAM;
- ListView_GetItemW(hwnd,&item);
+ ListView_GetItemW(infoPtr->hwndSelf,&item);
dwDrawStage=CDDS_ITEM | uItemDrawState;
dwItemSpec=iItem;
uItemState=0;
- if (LISTVIEW_IsSelected(hwnd,iItem)) uItemState|=CDIS_SELECTED;
+ if (LISTVIEW_IsSelected(infoPtr,iItem)) uItemState|=CDIS_SELECTED;
if (iItem==infoPtr->nFocusedItem) uItemState|=CDIS_FOCUS;
if (iItem==infoPtr->nHotItem) uItemState|=CDIS_HOT;
itemRect.left = LVIR_BOUNDS;
- LISTVIEW_GetItemRect(hwnd, iItem, &itemRect);
+ LISTVIEW_GetItemRect(infoPtr, iItem, &itemRect);
nmcd= & nmcdhdr.nmcd;
- nmcd->hdr.hwndFrom = hwnd;
- nmcd->hdr.idFrom = GetWindowLongW( hwnd, GWL_ID);
+ nmcd->hdr.hwndFrom = infoPtr->hwndSelf;
+ nmcd->hdr.idFrom = GetWindowLongW( infoPtr->hwndSelf, GWL_ID);
nmcd->hdr.code = NM_CUSTOMDRAW;
nmcd->dwDrawStage= dwDrawStage;
nmcd->hdc = hdc;
@@ -643,8 +632,8 @@
nmcd->dwDrawStage, nmcd->hdc, nmcd->dwItemSpec,
nmcd->uItemState, nmcd->lItemlParam);
- retval=SendMessageW (GetParent (hwnd), WM_NOTIFY,
- (WPARAM) GetWindowLongW( hwnd, GWL_ID), (LPARAM)&nmcdhdr);
+ retval=SendMessageW (GetParent (infoPtr->hwndSelf), WM_NOTIFY,
+ (WPARAM)nmcd->hdr.idFrom, (LPARAM)&nmcdhdr);
infoPtr->clrText=nmcdhdr.clrText;
infoPtr->clrBk =nmcdhdr.clrTextBk;
@@ -671,6 +660,11 @@
* we must also search for the corresponding string ('aaaaa'), and
* go to that string if there is a match.
*
+ * PARAMETERS
+ * [I] hwnd : handle to the window
+ * [I] charCode : the character code, the actual character
+ * [I] keyData : key data
+ *
* RETURNS
*
* Zero.
@@ -688,13 +682,8 @@
*
* TREEVIEW_ProcessLetterKeys
*/
-static INT LISTVIEW_ProcessLetterKeys(
- HWND hwnd, /* handle to the window */
- WPARAM charCode, /* the character code, the actual character */
- LPARAM keyData /* key data */
- )
+static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, LPARAM keyData)
{
- LISTVIEW_INFO *infoPtr;
INT nItem;
INT nSize;
INT endidx,idx;
@@ -703,10 +692,9 @@
DWORD timestamp,elapsed;
/* simple parameter checking */
- if (!hwnd || !charCode || !keyData)
+ if (!charCode || !keyData)
return 0;
- infoPtr=(LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
if (!infoPtr)
return 0;
@@ -781,7 +769,7 @@
item.iSubItem = 0;
item.pszText = buffer;
item.cchTextMax = COUNTOF(buffer);
- ListView_GetItemW( hwnd, &item );
+ ListView_GetItemW(infoPtr->hwndSelf, &item);
/* check for a match */
if (lstrncmpiW(item.pszText,infoPtr->szSearchParam,infoPtr->nSearchParamLength) == 0) {
@@ -796,10 +784,10 @@
} while (idx != endidx);
if (nItem != -1) {
- if (LISTVIEW_KeySelection(hwnd, nItem) != FALSE) {
+ if (LISTVIEW_KeySelection(infoPtr, nItem) != FALSE) {
/* refresh client area */
- InvalidateRect(hwnd, NULL, TRUE);
- UpdateWindow(hwnd);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
+ UpdateWindow(infoPtr->hwndSelf);
}
}
@@ -820,9 +808,8 @@
*
* NOTES
*/
-static VOID LISTVIEW_UpdateHeaderSize(HWND hwnd, INT nNewScrollPos)
+static VOID LISTVIEW_UpdateHeaderSize(LISTVIEW_INFO *infoPtr, INT nNewScrollPos)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
RECT winRect;
POINT point[2];
@@ -832,7 +819,7 @@
point[1].x = winRect.right;
point[1].y = winRect.bottom;
- MapWindowPoints(HWND_DESKTOP, hwnd, point, 2);
+ MapWindowPoints(HWND_DESKTOP, infoPtr->hwndSelf, point, 2);
point[0].x = -nNewScrollPos;
point[1].x += nNewScrollPos;
@@ -852,10 +839,9 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_UpdateScroll(HWND hwnd)
+static VOID LISTVIEW_UpdateScroll(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
INT nListHeight = infoPtr->rcList.bottom - infoPtr->rcList.top;
INT nListWidth = infoPtr->rcList.right - infoPtr->rcList.left;
@@ -870,8 +856,8 @@
{
/* update horizontal scrollbar */
- INT nCountPerColumn = LISTVIEW_GetCountPerColumn(hwnd);
- INT nCountPerRow = LISTVIEW_GetCountPerRow(hwnd);
+ INT nCountPerColumn = LISTVIEW_GetCountPerColumn(infoPtr);
+ INT nCountPerRow = LISTVIEW_GetCountPerRow(infoPtr);
INT nNumOfItems = GETITEMCOUNT(infoPtr);
scrollInfo.nMax = nNumOfItems / nCountPerColumn;
@@ -881,12 +867,12 @@
{
scrollInfo.nMax--;
}
- scrollInfo.nPos = ListView_GetTopIndex(hwnd) / nCountPerColumn;
+ scrollInfo.nPos = ListView_GetTopIndex(infoPtr->hwndSelf) / nCountPerColumn;
scrollInfo.nPage = nCountPerRow;
scrollInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
TRACE("LVS_LIST\n");
- SetScrollInfo(hwnd, SB_HORZ, &scrollInfo, TRUE);
- ShowScrollBar(hwnd, SB_VERT, FALSE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo, TRUE);
+ ShowScrollBar(infoPtr->hwndSelf, SB_VERT, FALSE);
}
else if (uView == LVS_REPORT)
{
@@ -895,18 +881,18 @@
/* update vertical scrollbar */
scrollInfo.nMin = 0;
scrollInfo.nMax = GETITEMCOUNT(infoPtr) - 1;
- scrollInfo.nPos = ListView_GetTopIndex(hwnd);
- scrollInfo.nPage = LISTVIEW_GetCountPerColumn(hwnd);
+ scrollInfo.nPos = ListView_GetTopIndex(infoPtr->hwndSelf);
+ scrollInfo.nPage = LISTVIEW_GetCountPerColumn(infoPtr);
scrollInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
test = (scrollInfo.nMin >= scrollInfo.nMax - max((INT)scrollInfo.nPage - 1, 0));
TRACE("LVS_REPORT Vert. nMax=%d, nPage=%d, test=%d\n",
scrollInfo.nMax, scrollInfo.nPage, test);
- SetScrollInfo(hwnd, SB_VERT, &scrollInfo, TRUE);
- ShowScrollBar(hwnd, SB_VERT, (test) ? FALSE : TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo, TRUE);
+ ShowScrollBar(infoPtr->hwndSelf, SB_VERT, (test) ? FALSE : TRUE);
/* update horizontal scrollbar */
nListWidth = infoPtr->rcList.right - infoPtr->rcList.left;
- if (GetScrollInfo(hwnd, SB_HORZ, &scrollInfo) == FALSE
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo) == FALSE
|| GETITEMCOUNT(infoPtr) == 0)
{
scrollInfo.nPos = 0;
@@ -918,27 +904,27 @@
test = (scrollInfo.nMin >= scrollInfo.nMax - max((INT)scrollInfo.nPage - 1, 0));
TRACE("LVS_REPORT Horz. nMax=%d, nPage=%d, test=%d\n",
scrollInfo.nMax, scrollInfo.nPage, test);
- SetScrollInfo(hwnd, SB_HORZ, &scrollInfo, TRUE);
- ShowScrollBar(hwnd, SB_HORZ, (test) ? FALSE : TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo, TRUE);
+ ShowScrollBar(infoPtr->hwndSelf, SB_HORZ, (test) ? FALSE : TRUE);
/* Update the Header Control */
scrollInfo.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_HORZ, &scrollInfo);
- LISTVIEW_UpdateHeaderSize(hwnd, scrollInfo.nPos);
+ GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo);
+ LISTVIEW_UpdateHeaderSize(infoPtr, scrollInfo.nPos);
}
else
{
RECT rcView;
- if (LISTVIEW_GetViewRect(hwnd, &rcView) != FALSE)
+ if (LISTVIEW_GetViewRect(infoPtr, &rcView) != FALSE)
{
INT nViewWidth = rcView.right - rcView.left;
INT nViewHeight = rcView.bottom - rcView.top;
/* Update Horizontal Scrollbar */
scrollInfo.fMask = SIF_POS;
- if (GetScrollInfo(hwnd, SB_HORZ, &scrollInfo) == FALSE
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo) == FALSE
|| GETITEMCOUNT(infoPtr) == 0)
{
scrollInfo.nPos = 0;
@@ -948,12 +934,12 @@
scrollInfo.nPage = nListWidth;
scrollInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
TRACE("LVS_ICON/SMALLICON Horz.\n");
- SetScrollInfo(hwnd, SB_HORZ, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo, TRUE);
/* Update Vertical Scrollbar */
nListHeight = infoPtr->rcList.bottom - infoPtr->rcList.top;
scrollInfo.fMask = SIF_POS;
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) == FALSE
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) == FALSE
|| GETITEMCOUNT(infoPtr) == 0)
{
scrollInfo.nPos = 0;
@@ -963,7 +949,7 @@
scrollInfo.nPage = nListHeight;
scrollInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
TRACE("LVS_ICON/SMALLICON Vert.\n");
- SetScrollInfo(hwnd, SB_VERT, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo, TRUE);
}
}
}
@@ -1007,10 +993,9 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_AlignTop(HWND hwnd)
+static VOID LISTVIEW_AlignTop(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nListWidth = infoPtr->rcList.right - infoPtr->rcList.left;
POINT ptItem;
RECT rcView;
@@ -1042,7 +1027,7 @@
ptItem.y += infoPtr->nItemHeight;
}
- LISTVIEW_SetItemPosition(hwnd, i, ptItem.x, ptItem.y);
+ LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
ptItem.x += infoPtr->nItemWidth;
rcView.right = max(rcView.right, ptItem.x);
}
@@ -1054,7 +1039,7 @@
{
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
- LISTVIEW_SetItemPosition(hwnd, i, ptItem.x, ptItem.y);
+ LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
ptItem.y += infoPtr->nItemHeight;
}
@@ -1062,7 +1047,7 @@
rcView.bottom = ptItem.y-off_y;
}
- LISTVIEW_SetViewRect(hwnd, &rcView);
+ LISTVIEW_SetViewRect(infoPtr, &rcView);
}
}
@@ -1076,10 +1061,9 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_AlignLeft(HWND hwnd)
+static VOID LISTVIEW_AlignLeft(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nListHeight = infoPtr->rcList.bottom - infoPtr->rcList.top;
POINT ptItem;
RECT rcView;
@@ -1109,7 +1093,7 @@
ptItem.x += infoPtr->nItemWidth;
}
- LISTVIEW_SetItemPosition(hwnd, i, ptItem.x, ptItem.y);
+ LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
ptItem.y += infoPtr->nItemHeight;
rcView.bottom = max(rcView.bottom, ptItem.y);
}
@@ -1120,7 +1104,7 @@
{
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
- LISTVIEW_SetItemPosition(hwnd, i, ptItem.x, ptItem.y);
+ LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
ptItem.x += infoPtr->nItemWidth;
}
@@ -1128,7 +1112,7 @@
rcView.right = ptItem.x;
}
- LISTVIEW_SetViewRect(hwnd, &rcView);
+ LISTVIEW_SetViewRect(infoPtr, &rcView);
}
}
@@ -1144,12 +1128,11 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetViewRect(HWND hwnd, LPRECT lprcView)
+static LRESULT LISTVIEW_SetViewRect(LISTVIEW_INFO *infoPtr, LPRECT lprcView)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
- TRACE("(hwnd=%x, left=%d, top=%d, right=%d, bottom=%d)\n", hwnd,
+ TRACE("(left=%d, top=%d, right=%d, bottom=%d)\n",
lprcView->left, lprcView->top, lprcView->right, lprcView->bottom);
if (lprcView != NULL)
@@ -1176,17 +1159,16 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_GetViewRect(HWND hwnd, LPRECT lprcView)
+static LRESULT LISTVIEW_GetViewRect(LISTVIEW_INFO *infoPtr, LPRECT lprcView)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
POINT ptOrigin;
- TRACE("(hwnd=%x, lprcView=%p)\n", hwnd, lprcView);
+ TRACE("(lprcView=%p)\n", lprcView);
if (lprcView != NULL)
{
- bResult = LISTVIEW_GetOrigin(hwnd, &ptOrigin);
+ bResult = LISTVIEW_GetOrigin(infoPtr, &ptOrigin);
if (bResult != FALSE)
{
lprcView->left = infoPtr->rcView.left + ptOrigin.x;
@@ -1246,10 +1228,9 @@
* RETURN:
* Returns item width.
*/
-static INT LISTVIEW_GetItemWidth(HWND hwnd)
+static INT LISTVIEW_GetItemWidth(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG style = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG style = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = style & LVS_TYPEMASK;
INT nHeaderItemCount;
RECT rcHeaderItem;
@@ -1257,7 +1238,7 @@
INT nLabelWidth;
INT i;
- TRACE("(hwnd=%x)\n", hwnd);
+ TRACE("()\n");
if (uView == LVS_ICON)
{
@@ -1279,7 +1260,7 @@
{
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, i);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, i);
nItemWidth = max(nItemWidth, nLabelWidth);
}
@@ -1331,16 +1312,15 @@
* RETURN:
* Returns the width of an item width a specified string.
*/
-static INT LISTVIEW_CalculateWidth(HWND hwnd, INT nItem)
+static INT LISTVIEW_CalculateWidth(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nHeaderItemCount;
RECT rcHeaderItem;
INT nItemWidth = 0;
INT i;
- TRACE("(hwnd=%x)\n", hwnd);
+ TRACE("()\n");
if (uView == LVS_ICON)
{
@@ -1361,7 +1341,7 @@
else
{
/* get width of string */
- nItemWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nItemWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
/* default label size */
if (GETITEMCOUNT(infoPtr) == 0)
@@ -1404,11 +1384,10 @@
* [I] HWND : window handle
*
*/
-static VOID LISTVIEW_SaveTextMetrics(HWND hwnd)
+static VOID LISTVIEW_SaveTextMetrics(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
TEXTMETRICW tm;
- HDC hdc = GetDC(hwnd);
+ HDC hdc = GetDC(infoPtr->hwndSelf);
HFONT hOldFont = SelectObject(hdc, infoPtr->hFont);
INT oldHeight, oldACW;
@@ -1420,7 +1399,7 @@
infoPtr->ntmAveCharWidth = tm.tmAveCharWidth;
SelectObject(hdc, hOldFont);
- ReleaseDC(hwnd, hdc);
+ ReleaseDC(infoPtr->hwndSelf, hdc);
TRACE("tmHeight old=%d,new=%d; tmAveCharWidth old=%d,new=%d\n",
oldHeight, infoPtr->ntmHeight, oldACW, infoPtr->ntmAveCharWidth);
}
@@ -1436,10 +1415,9 @@
* RETURN:
* Returns item height.
*/
-static INT LISTVIEW_GetItemHeight(HWND hwnd)
+static INT LISTVIEW_GetItemHeight(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nItemHeight = 0;
if (uView == LVS_ICON)
@@ -1458,9 +1436,8 @@
}
-static void LISTVIEW_PrintSelectionRanges(HWND hwnd)
+static void LISTVIEW_PrintSelectionRanges(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SELECTION *selection;
INT topSelection = infoPtr->hdpaSelectionRanges->nItemCount;
INT i;
@@ -1517,9 +1494,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_AddSelectionRange(HWND hwnd, INT lItem, INT uItem)
+static VOID LISTVIEW_AddSelectionRange(LISTVIEW_INFO *infoPtr, INT lItem, INT uItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SELECTION *selection;
INT topSelection = infoPtr->hdpaSelectionRanges->nItemCount;
BOOL lowerzero=FALSE;
@@ -1665,7 +1641,7 @@
* Incase of error
*/
DPA_Sort(infoPtr->hdpaSelectionRanges,LISTVIEW_CompareSelectionRanges,0);
- LISTVIEW_PrintSelectionRanges(hwnd);
+ LISTVIEW_PrintSelectionRanges(infoPtr);
}
/**
@@ -1679,9 +1655,8 @@
* RETURN:
* None
*/
-static BOOL LISTVIEW_IsSelected(HWND hwnd, INT nItem)
+static BOOL LISTVIEW_IsSelected(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SELECTION selection;
INT index;
@@ -1708,14 +1683,13 @@
* SUCCESS : TRUE
* FAILURE : TRUE
*/
-static LRESULT LISTVIEW_RemoveAllSelections(HWND hwnd)
+static LRESULT LISTVIEW_RemoveAllSelections(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SELECTION *selection;
INT i;
LVITEMW item;
- TRACE("(0x%x)\n",hwnd);
+ TRACE("()\n");
ZeroMemory(&item,sizeof(item));
item.stateMask = LVIS_SELECTED;
@@ -1727,8 +1701,8 @@
{
TRACE("Removing %lu to %lu\n",selection->lower, selection->upper);
for (i = selection->lower; i<=selection->upper; i++)
- LISTVIEW_SetItemState(hwnd,i,&item);
- LISTVIEW_RemoveSelectionRange(hwnd,selection->lower,selection->upper);
+ LISTVIEW_SetItemState(infoPtr,i,&item);
+ LISTVIEW_RemoveSelectionRange(infoPtr,selection->lower,selection->upper);
}
}
while (infoPtr->hdpaSelectionRanges->nItemCount>0);
@@ -1749,9 +1723,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_RemoveSelectionRange(HWND hwnd, INT lItem, INT uItem)
+static VOID LISTVIEW_RemoveSelectionRange(LISTVIEW_INFO *infoPtr, INT lItem, INT uItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SELECTION removeselection,*checkselection;
INT index;
@@ -1759,7 +1732,7 @@
removeselection.upper = uItem;
TRACE("Remove range %lu - %lu\n",removeselection.lower,removeselection.upper);
- LISTVIEW_PrintSelectionRanges(hwnd);
+ LISTVIEW_PrintSelectionRanges(infoPtr);
index = DPA_Search(infoPtr->hdpaSelectionRanges, &removeselection, 0,
LISTVIEW_CompareSelectionRanges,
@@ -1794,7 +1767,7 @@
DPA_DeletePtr(infoPtr->hdpaSelectionRanges,index);
/* do it again because others may also get caught */
TRACE("Case 2\n");
- LISTVIEW_RemoveSelectionRange(hwnd,lItem,uItem);
+ LISTVIEW_RemoveSelectionRange(infoPtr,lItem,uItem);
}
/* case 3: overlap upper */
else if ((checkselection->upper < removeselection.upper) &&
@@ -1802,7 +1775,7 @@
{
checkselection->upper = removeselection.lower - 1;
TRACE("Case 3\n");
- LISTVIEW_RemoveSelectionRange(hwnd,lItem,uItem);
+ LISTVIEW_RemoveSelectionRange(infoPtr,lItem,uItem);
}
/* case 4: overlap lower */
else if ((checkselection->upper > removeselection.upper) &&
@@ -1810,7 +1783,7 @@
{
checkselection->lower = removeselection.upper + 1;
TRACE("Case 4\n");
- LISTVIEW_RemoveSelectionRange(hwnd,lItem,uItem);
+ LISTVIEW_RemoveSelectionRange(infoPtr,lItem,uItem);
}
/* case 5: fully internal */
else if (checkselection->upper == removeselection.upper)
@@ -1831,7 +1804,7 @@
TRACE("Case 5\n");
DPA_Sort(infoPtr->hdpaSelectionRanges,LISTVIEW_CompareSelectionRanges,0);
}
- LISTVIEW_PrintSelectionRanges(hwnd);
+ LISTVIEW_PrintSelectionRanges(infoPtr);
}
/**
@@ -1846,9 +1819,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_ShiftIndices(HWND hwnd, INT nItem, INT direction)
+static VOID LISTVIEW_ShiftIndices(LISTVIEW_INFO *infoPtr, INT nItem, INT direction)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SELECTION selection,*checkselection;
INT index;
@@ -1895,7 +1867,7 @@
if (infoPtr->nFocusedItem >= GETITEMCOUNT(infoPtr))
infoPtr->nFocusedItem = GETITEMCOUNT(infoPtr) - 1;
if (infoPtr->nFocusedItem >= 0)
- LISTVIEW_SetItemFocus(hwnd, infoPtr->nFocusedItem);
+ LISTVIEW_SetItemFocus(infoPtr, infoPtr->nFocusedItem);
}
}
/* But we are not supposed to modify nHotItem! */
@@ -1913,9 +1885,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_AddGroupSelection(HWND hwnd, INT nItem)
+static VOID LISTVIEW_AddGroupSelection(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nFirst = min(infoPtr->nSelectionMark, nItem);
INT nLast = max(infoPtr->nSelectionMark, nItem);
INT i;
@@ -1929,9 +1900,9 @@
item.state = LVIS_SELECTED;
for (i = nFirst; i <= nLast; i++)
- LISTVIEW_SetItemState(hwnd,i,&item);
+ LISTVIEW_SetItemState(infoPtr,i,&item);
- LISTVIEW_SetItemFocus(hwnd, nItem);
+ LISTVIEW_SetItemFocus(infoPtr, nItem);
infoPtr->nSelectionMark = nItem;
}
@@ -1947,18 +1918,17 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_AddSelection(HWND hwnd, INT nItem)
+static VOID LISTVIEW_AddSelection(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LVITEMW item;
ZeroMemory(&item,sizeof(item));
item.state = LVIS_SELECTED;
item.stateMask = LVIS_SELECTED;
- LISTVIEW_SetItemState(hwnd,nItem,&item);
+ LISTVIEW_SetItemState(infoPtr,nItem,&item);
- LISTVIEW_SetItemFocus(hwnd, nItem);
+ LISTVIEW_SetItemFocus(infoPtr, nItem);
infoPtr->nSelectionMark = nItem;
}
@@ -1974,28 +1944,27 @@
* SELECT: TRUE
* UNSELECT : FALSE
*/
-static BOOL LISTVIEW_ToggleSelection(HWND hwnd, INT nItem)
+static BOOL LISTVIEW_ToggleSelection(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult;
LVITEMW item;
ZeroMemory(&item,sizeof(item));
item.stateMask = LVIS_SELECTED;
- if (LISTVIEW_IsSelected(hwnd,nItem))
+ if (LISTVIEW_IsSelected(infoPtr,nItem))
{
- LISTVIEW_SetItemState(hwnd,nItem,&item);
+ LISTVIEW_SetItemState(infoPtr,nItem,&item);
bResult = FALSE;
}
else
{
item.state = LVIS_SELECTED;
- LISTVIEW_SetItemState(hwnd,nItem,&item);
+ LISTVIEW_SetItemState(infoPtr,nItem,&item);
bResult = TRUE;
}
- LISTVIEW_SetItemFocus(hwnd, nItem);
+ LISTVIEW_SetItemFocus(infoPtr, nItem);
infoPtr->nSelectionMark = nItem;
return bResult;
@@ -2012,9 +1981,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_SetSelectionRect(HWND hwnd, RECT rcSelRect)
+static VOID LISTVIEW_SetSelectionRect(LISTVIEW_INFO *infoPtr, RECT rcSelRect)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
POINT ptItem;
INT i;
LVITEMW item;
@@ -2024,13 +1992,13 @@
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
- LISTVIEW_GetItemPosition(hwnd, i, &ptItem);
+ LISTVIEW_GetItemPosition(infoPtr, i, &ptItem);
if (PtInRect(&rcSelRect, ptItem) != FALSE)
item.state = LVIS_SELECTED;
else
item.state = 0;
- LISTVIEW_SetItemState(hwnd,i,&item);
+ LISTVIEW_SetItemState(infoPtr,i,&item);
}
}
@@ -2045,10 +2013,9 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_SetGroupSelection(HWND hwnd, INT nItem)
+static VOID LISTVIEW_SetGroupSelection(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
LVITEMW item;
ZeroMemory(&item,sizeof(item));
@@ -2075,7 +2042,7 @@
item.state = 0;
else
item.state = LVIS_SELECTED;
- LISTVIEW_SetItemState(hwnd,i,&item);
+ LISTVIEW_SetItemState(infoPtr,i,&item);
}
}
else
@@ -2083,13 +2050,13 @@
RECT rcItem;
RECT rcSelMark;
RECT rcSel;
- LISTVIEW_GetItemBoundBox(hwnd, nItem, &rcItem);
- LISTVIEW_GetItemBoundBox(hwnd, infoPtr->nSelectionMark, &rcSelMark);
+ LISTVIEW_GetItemBoundBox(infoPtr, nItem, &rcItem);
+ LISTVIEW_GetItemBoundBox(infoPtr, infoPtr->nSelectionMark, &rcSelMark);
rcSel.left = min(rcSelMark.left, rcItem.left);
rcSel.top = min(rcSelMark.top, rcItem.top);
rcSel.right = max(rcSelMark.right, rcItem.right);
rcSel.bottom = max(rcSelMark.bottom, rcItem.bottom);
- LISTVIEW_SetSelectionRect(hwnd, rcSel);
+ LISTVIEW_SetSelectionRect(infoPtr, rcSel);
TRACE("item %d (%d,%d)-(%d,%d), mark %d (%d,%d)-(%d,%d), sel (%d,%d)-(%d,%d)\n",
nItem, rcItem.left, rcItem.top, rcItem.right, rcItem.bottom,
infoPtr->nSelectionMark,
@@ -2098,7 +2065,7 @@
}
- LISTVIEW_SetItemFocus(hwnd, nItem);
+ LISTVIEW_SetItemFocus(infoPtr, nItem);
}
/***
@@ -2113,9 +2080,8 @@
* TRUE : focused item changed
* FALSE : focused item has NOT changed
*/
-static BOOL LISTVIEW_SetItemFocus(HWND hwnd, INT nItem)
+static BOOL LISTVIEW_SetItemFocus(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
LVITEMW lvItem;
@@ -2128,16 +2094,16 @@
infoPtr->nFocusedItem = -1;
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.stateMask = LVIS_FOCUSED;
- LISTVIEW_SetItemState(hwnd, oldFocus, &lvItem);
+ LISTVIEW_SetItemState(infoPtr, oldFocus, &lvItem);
}
lvItem.state = LVIS_FOCUSED;
lvItem.stateMask = LVIS_FOCUSED;
- LISTVIEW_SetItemState(hwnd, nItem, &lvItem);
+ LISTVIEW_SetItemState(infoPtr, nItem, &lvItem);
infoPtr->nFocusedItem = nItem;
- LISTVIEW_EnsureVisible(hwnd, nItem, FALSE);
+ LISTVIEW_EnsureVisible(infoPtr, nItem, FALSE);
}
return bResult;
@@ -2154,20 +2120,19 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_SetSelection(HWND hwnd, INT nItem)
+static VOID LISTVIEW_SetSelection(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LVITEMW lvItem;
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.stateMask = LVIS_FOCUSED;
- LISTVIEW_SetItemState(hwnd, infoPtr->nFocusedItem, &lvItem);
+ LISTVIEW_SetItemState(infoPtr, infoPtr->nFocusedItem, &lvItem);
- LISTVIEW_RemoveAllSelections(hwnd);
+ LISTVIEW_RemoveAllSelections(infoPtr);
lvItem.state = LVIS_FOCUSED|LVIS_SELECTED;
lvItem.stateMask = LVIS_FOCUSED|LVIS_SELECTED;
- LISTVIEW_SetItemState(hwnd, nItem, &lvItem);
+ LISTVIEW_SetItemState(infoPtr, nItem, &lvItem);
infoPtr->nFocusedItem = nItem;
infoPtr->nSelectionMark = nItem;
@@ -2185,10 +2150,9 @@
* SUCCESS : TRUE (needs to be repainted)
* FAILURE : FALSE (nothing has changed)
*/
-static BOOL LISTVIEW_KeySelection(HWND hwnd, INT nItem)
+static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
WORD wShift = HIWORD(GetKeyState(VK_SHIFT));
WORD wCtrl = HIWORD(GetKeyState(VK_CONTROL));
BOOL bResult = FALSE;
@@ -2198,25 +2162,25 @@
if (lStyle & LVS_SINGLESEL)
{
bResult = TRUE;
- LISTVIEW_SetSelection(hwnd, nItem);
- ListView_EnsureVisible(hwnd, nItem, FALSE);
+ LISTVIEW_SetSelection(infoPtr, nItem);
+ ListView_EnsureVisible(infoPtr->hwndSelf, nItem, FALSE);
}
else
{
if (wShift)
{
bResult = TRUE;
- LISTVIEW_SetGroupSelection(hwnd, nItem);
+ LISTVIEW_SetGroupSelection(infoPtr, nItem);
}
else if (wCtrl)
{
- bResult = LISTVIEW_SetItemFocus(hwnd, nItem);
+ bResult = LISTVIEW_SetItemFocus(infoPtr, nItem);
}
else
{
bResult = TRUE;
- LISTVIEW_SetSelection(hwnd, nItem);
- ListView_EnsureVisible(hwnd, nItem, FALSE);
+ LISTVIEW_SetSelection(infoPtr, nItem);
+ ListView_EnsureVisible(infoPtr->hwndSelf, nItem, FALSE);
}
}
}
@@ -2230,9 +2194,9 @@
* amount of time
*
* PARAMETER(S):
- * [I] HWND : window handle
- * [I] wParam : key indicator
- * [I] lParam : mouse position
+ * [I] infoPtr : pointer to listview strucure (not NULL)
+ * [I] fwKeys : key indicator
+ * [I] pts : mouse position
*
* RETURN:
* 0 if the message was processed, non-zero if there was an error
@@ -2242,17 +2206,13 @@
* over the item for a certain period of time.
*
*/
-static LRESULT LISTVIEW_MouseHover(HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT LISTVIEW_MouseHover(LISTVIEW_INFO *infoPtr, WORD fwKyes, POINTS pts)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- POINT pt;
-
- pt.x = (INT)LOWORD(lParam);
- pt.y = (INT)HIWORD(lParam);
-
+ POINT pt = { pts.x, pts.y };
+
if(infoPtr->dwExStyle & LVS_EX_TRACKSELECT) {
- /* select the item under the cursor */
- LISTVIEW_MouseSelection(hwnd, pt);
+ /* FIXME: select the item under the cursor */
+ LISTVIEW_MouseSelection(infoPtr, pt);
}
return 0;
@@ -2263,16 +2223,15 @@
* Called whenever WM_MOUSEMOVE is received.
*
* PARAMETER(S):
- * [I] HWND : window handle
- * [I] wParam : key indicators
- * [I] lParam : cursor position
+ * [I] infoPtr : pointer to listview strucure (not NULL)
+ * [I] fwKeys : key indicator
+ * [I] pts : mouse position
*
* RETURN:
* 0 if the message is processed, non-zero if there was an error
*/
-static LRESULT LISTVIEW_MouseMove(HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT LISTVIEW_MouseMove(LISTVIEW_INFO *infoPtr, WORD fwKeys, POINTS pts)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
TRACKMOUSEEVENT trackinfo;
/* see if we are supposed to be tracking mouse hovering */
@@ -2280,7 +2239,7 @@
/* fill in the trackinfo struct */
trackinfo.cbSize = sizeof(TRACKMOUSEEVENT);
trackinfo.dwFlags = TME_QUERY;
- trackinfo.hwndTrack = hwnd;
+ trackinfo.hwndTrack = infoPtr->hwndSelf;
trackinfo.dwHoverTime = infoPtr->dwHoverTime;
/* see if we are already tracking this hwnd */
@@ -2302,41 +2261,33 @@
* Selects an item based on coordinates.
*
* PARAMETER(S):
- * [I] HWND : window handle
- * [I] POINT : mouse click ccordinates
+ * [I] infoPtr : pointer to listview strucure (not NULL)
+ * [I] pt : mouse click ccordinates
*
* RETURN:
* SUCCESS : item index
* FAILURE : -1
*/
-static LRESULT LISTVIEW_MouseSelection(HWND hwnd, POINT pt)
+static INT LISTVIEW_MouseSelection(LISTVIEW_INFO *infoPtr, POINT pt)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
+ INT i, topindex, bottomindex;
RECT rcItem;
- INT i,topindex,bottomindex;
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
- UINT uView = lStyle & LVS_TYPEMASK;
- topindex = LISTVIEW_GetTopIndex(hwnd);
- if (uView == LVS_REPORT)
- {
- bottomindex = topindex + LISTVIEW_GetCountPerColumn(hwnd) + 1;
- bottomindex = min(bottomindex,GETITEMCOUNT(infoPtr));
- }
- else
- {
+ topindex = LISTVIEW_GetTopIndex(infoPtr);
+ if ((lStyle & LVS_TYPEMASK) == LVS_REPORT) {
+ bottomindex = topindex + LISTVIEW_GetCountPerColumn(infoPtr) + 1;
+ bottomindex = min(bottomindex, GETITEMCOUNT(infoPtr));
+ } else {
bottomindex = GETITEMCOUNT(infoPtr);
}
for (i = topindex; i < bottomindex; i++)
{
rcItem.left = LVIR_SELECTBOUNDS;
- if (LISTVIEW_GetItemRect(hwnd, i, &rcItem) == TRUE)
+ if (LISTVIEW_GetItemRect(infoPtr, i, &rcItem))
{
- if (PtInRect(&rcItem, pt) != FALSE)
- {
- return i;
- }
+ if (PtInRect(&rcItem, pt)) return i;
}
}
@@ -2518,10 +2469,10 @@
* SUCCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_InitItemT(HWND hwnd, LISTVIEW_ITEM *lpItem,
+static BOOL LISTVIEW_InitItemT(LISTVIEW_INFO *infoPtr, LISTVIEW_ITEM *lpItem,
LPLVITEMW lpLVItem, BOOL isW)
{
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
BOOL bResult = FALSE;
if ((lpItem != NULL) && (lpLVItem != NULL))
@@ -2580,14 +2531,13 @@
* SUCCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_InitSubItemT(HWND hwnd, LISTVIEW_SUBITEM *lpSubItem,
+static BOOL LISTVIEW_InitSubItemT(LISTVIEW_INFO *infoPtr, LISTVIEW_SUBITEM *lpSubItem,
LPLVITEMW lpLVItem, BOOL isW)
{
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
BOOL bResult = FALSE;
- TRACE("(hwnd=%x, lpSubItem=%p, lpLVItem=%s, isW=%d)\n",
- hwnd, lpSubItem, debuglvitem_t(lpLVItem, isW), isW);
+ TRACE("(lpLVItem=%s, isW=%d)\n", debuglvitem_t(lpLVItem, isW), isW);
if ((lpSubItem != NULL) && (lpLVItem != NULL))
{
@@ -2634,16 +2584,15 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_AddSubItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL isW)
+static BOOL LISTVIEW_AddSubItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LISTVIEW_SUBITEM *lpSubItem = NULL;
BOOL bResult = FALSE;
HDPA hdpaSubItems;
INT nPosition, nItem;
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
- TRACE("(hwnd=%x, lpLVItem=%s, isW=%d)\n", hwnd, debuglvitem_t(lpLVItem, isW), isW);
+ TRACE("(lpLVItem=%s, isW=%d)\n", debuglvitem_t(lpLVItem, isW), isW);
if (lStyle & LVS_OWNERDATA)
return FALSE;
@@ -2657,7 +2606,7 @@
if (lpSubItem != NULL)
{
ZeroMemory(lpSubItem, sizeof(LISTVIEW_SUBITEM));
- if (LISTVIEW_InitSubItemT(hwnd, lpSubItem, lpLVItem, isW))
+ if (LISTVIEW_InitSubItemT(infoPtr, lpSubItem, lpLVItem, isW))
{
nPosition = LISTVIEW_FindInsertPosition(hdpaSubItems,
lpSubItem->iSubItem);
@@ -2746,20 +2695,19 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetMainItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL isW)
+static BOOL LISTVIEW_SetMainItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
HDPA hdpaSubItems;
LISTVIEW_ITEM *lpItem;
NMLISTVIEW nmlv;
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uChanged;
UINT uView = lStyle & LVS_TYPEMASK;
INT item_width;
RECT rcItem;
- TRACE("(hwnd=%x, lpLVItem=%s, isW=%d)\n", hwnd, debuglvitem_t(lpLVItem, isW), isW);
+ TRACE("(lpLVItem=%s, isW=%d)\n", debuglvitem_t(lpLVItem, isW), isW);
if (lStyle & LVS_OWNERDATA)
{
@@ -2772,7 +2720,7 @@
itm.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
itm.iItem = lpLVItem->iItem;
itm.iSubItem = 0;
- ListView_GetItemW(hwnd, &itm);
+ ListView_GetItemW(infoPtr->hwndSelf, &itm);
ZeroMemory(&nmlv, sizeof(NMLISTVIEW));
@@ -2800,20 +2748,20 @@
{
if (lpLVItem->state & LVIS_SELECTED)
{
- if (lStyle & LVS_SINGLESEL) LISTVIEW_RemoveAllSelections(hwnd);
- LISTVIEW_AddSelectionRange(hwnd,lpLVItem->iItem,lpLVItem->iItem);
+ if (lStyle & LVS_SINGLESEL) LISTVIEW_RemoveAllSelections(infoPtr);
+ LISTVIEW_AddSelectionRange(infoPtr,lpLVItem->iItem,lpLVItem->iItem);
}
else
- LISTVIEW_RemoveSelectionRange(hwnd,lpLVItem->iItem,
+ LISTVIEW_RemoveSelectionRange(infoPtr,lpLVItem->iItem,
lpLVItem->iItem);
}
- listview_notify(hwnd, LVN_ITEMCHANGED, &nmlv);
+ listview_notify(infoPtr, LVN_ITEMCHANGED, &nmlv);
rcItem.left = LVIR_BOUNDS;
- LISTVIEW_GetItemRect(hwnd, lpLVItem->iItem, &rcItem);
+ LISTVIEW_GetItemRect(infoPtr, lpLVItem->iItem, &rcItem);
if (!infoPtr->bIsDrawing)
- InvalidateRect(hwnd, &rcItem, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, &rcItem, TRUE);
}
return TRUE;
}
@@ -2849,14 +2797,14 @@
* to set the selection.
*/
if (lStyle & LVS_SINGLESEL)
- LISTVIEW_RemoveAllSelections(hwnd);
+ LISTVIEW_RemoveAllSelections(infoPtr);
- LISTVIEW_AddSelectionRange(hwnd,lpLVItem->iItem,
+ LISTVIEW_AddSelectionRange(infoPtr,lpLVItem->iItem,
lpLVItem->iItem);
}
else if (lpLVItem->stateMask & LVIS_SELECTED)
{
- LISTVIEW_RemoveSelectionRange(hwnd,lpLVItem->iItem,
+ LISTVIEW_RemoveSelectionRange(infoPtr,lpLVItem->iItem,
lpLVItem->iItem);
}
if (nmlv.uNewState & LVIS_FOCUSED)
@@ -2868,7 +2816,7 @@
* SetItemFocus call.
*/
if (infoPtr->nFocusedItem >= 0)
- LISTVIEW_SetItemFocus(hwnd, lpLVItem->iItem);
+ LISTVIEW_SetItemFocus(infoPtr, lpLVItem->iItem);
}
}
@@ -2876,23 +2824,23 @@
nmlv.iItem = lpLVItem->iItem;
nmlv.lParam = lpItem->lParam;
/* send LVN_ITEMCHANGING notification */
- listview_notify(hwnd, LVN_ITEMCHANGING, &nmlv);
+ listview_notify(infoPtr, LVN_ITEMCHANGING, &nmlv);
/* copy information */
- bResult = LISTVIEW_InitItemT(hwnd, lpItem, lpLVItem, isW);
+ bResult = LISTVIEW_InitItemT(infoPtr, lpItem, lpLVItem, isW);
/* if LVS_LIST or LVS_SMALLICON, update the width of the items
based on the width of the items text */
if((uView == LVS_LIST) || (uView == LVS_SMALLICON))
{
- item_width = LISTVIEW_GetStringWidthT(hwnd, lpItem->pszText, TRUE);
+ item_width = LISTVIEW_GetStringWidthT(infoPtr, lpItem->pszText, TRUE);
if(item_width > infoPtr->nItemWidth)
infoPtr->nItemWidth = item_width;
}
/* send LVN_ITEMCHANGED notification */
- listview_notify(hwnd, LVN_ITEMCHANGED, &nmlv);
+ listview_notify(infoPtr, LVN_ITEMCHANGED, &nmlv);
}
else
{
@@ -2902,9 +2850,9 @@
if (uChanged)
{
rcItem.left = LVIR_BOUNDS;
- LISTVIEW_GetItemRect(hwnd, lpLVItem->iItem, &rcItem);
+ LISTVIEW_GetItemRect(infoPtr, lpLVItem->iItem, &rcItem);
if (!infoPtr->bIsDrawing)
- InvalidateRect(hwnd, &rcItem, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, &rcItem, TRUE);
}
}
}
@@ -2927,16 +2875,15 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetSubItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL isW)
+static BOOL LISTVIEW_SetSubItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
BOOL bResult = FALSE;
HDPA hdpaSubItems;
LISTVIEW_SUBITEM *lpSubItem;
RECT rcItem;
- TRACE("(hwnd=%x, lpLVItem=%s, isW=%d)\n", hwnd, debuglvitem_t(lpLVItem, isW), isW);
+ TRACE("(lpLVItem=%s, isW=%d)\n", debuglvitem_t(lpLVItem, isW), isW);
if (lStyle & LVS_OWNERDATA)
return FALSE;
@@ -2953,13 +2900,13 @@
{
lpSubItem = LISTVIEW_GetSubItem(hdpaSubItems, lpLVItem->iSubItem);
if (lpSubItem != NULL)
- bResult = LISTVIEW_InitSubItemT(hwnd, lpSubItem, lpLVItem, isW);
+ bResult = LISTVIEW_InitSubItemT(infoPtr, lpSubItem, lpLVItem, isW);
else
- bResult = LISTVIEW_AddSubItemT(hwnd, lpLVItem, isW);
+ bResult = LISTVIEW_AddSubItemT(infoPtr, lpLVItem, isW);
rcItem.left = LVIR_BOUNDS;
- LISTVIEW_GetItemRect(hwnd, lpLVItem->iItem, &rcItem);
- InvalidateRect(hwnd, &rcItem, FALSE);
+ LISTVIEW_GetItemRect(infoPtr, lpLVItem->iItem, &rcItem);
+ InvalidateRect(infoPtr->hwndSelf, &rcItem, FALSE);
}
}
}
@@ -2981,17 +2928,16 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL isW)
+static BOOL LISTVIEW_SetItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
if (!lpLVItem || lpLVItem->iItem < 0 ||
lpLVItem->iItem>=GETITEMCOUNT(infoPtr))
return FALSE;
if (lpLVItem->iSubItem == 0)
- return LISTVIEW_SetMainItemT(hwnd, lpLVItem, isW);
+ return LISTVIEW_SetMainItemT(infoPtr, lpLVItem, isW);
else
- return LISTVIEW_SetSubItemT(hwnd, lpLVItem, isW);
+ return LISTVIEW_SetSubItemT(infoPtr, lpLVItem, isW);
}
/***
@@ -3004,9 +2950,9 @@
* RETURN:
* item index
*/
-static INT LISTVIEW_GetTopIndex(HWND hwnd)
+static INT LISTVIEW_GetTopIndex(LISTVIEW_INFO *infoPtr)
{
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
INT nItem = 0;
SCROLLINFO scrollInfo;
@@ -3017,12 +2963,12 @@
if (uView == LVS_LIST)
{
- if ((lStyle & WS_HSCROLL) && GetScrollInfo(hwnd, SB_HORZ, &scrollInfo))
- nItem = scrollInfo.nPos * LISTVIEW_GetCountPerColumn(hwnd);
+ if ((lStyle & WS_HSCROLL) && GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo))
+ nItem = scrollInfo.nPos * LISTVIEW_GetCountPerColumn(infoPtr);
}
else if (uView == LVS_REPORT)
{
- if ((lStyle & WS_VSCROLL) && GetScrollInfo(hwnd, SB_VERT, &scrollInfo))
+ if ((lStyle & WS_VSCROLL) && GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo))
nItem = scrollInfo.nPos;
}
@@ -3043,10 +2989,9 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_DrawSubItem(HWND hwnd, HDC hdc, INT nItem, INT nSubItem,
+static VOID LISTVIEW_DrawSubItem(LISTVIEW_INFO *infoPtr, HDC hdc, INT nItem, INT nSubItem,
RECT rcItem, BOOL Selected)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
WCHAR szDispText[DISP_TEXT_SIZE];
LVITEMW lvItem;
LVCOLUMNW lvColumn;
@@ -3055,7 +3000,7 @@
INT textLeft;
INT nLabelWidth = 0;
- TRACE("(hwnd=%x, hdc=%x, nItem=%d, nSubItem=%d)\n", hwnd, hdc,
+ TRACE("(hdc=%x, nItem=%d, nSubItem=%d)\n", hdc,
nItem, nSubItem);
/* get information needed for drawing the item */
@@ -3066,17 +3011,17 @@
lvItem.cchTextMax = DISP_TEXT_SIZE;
lvItem.pszText = szDispText;
*lvItem.pszText = '\0';
- LISTVIEW_GetItemW(hwnd, &lvItem, TRUE);
+ LISTVIEW_GetItemW(infoPtr, &lvItem, TRUE);
TRACE(" lvItem=%s\n", debuglvitem_t(&lvItem, TRUE));
ZeroMemory(&lvColumn, sizeof(lvColumn));
lvColumn.mask = LVCF_FMT;
- LISTVIEW_GetColumnT(hwnd, nSubItem, &lvColumn, TRUE);
+ LISTVIEW_GetColumnT(infoPtr, nSubItem, &lvColumn, TRUE);
textLeft = rcItem.left;
TRACE("lvColumn.fmt=%d\n", lvColumn.fmt);
if (lvColumn.fmt != LVCFMT_LEFT)
{
- if ((nLabelWidth = LISTVIEW_GetStringWidthT(hwnd, lvItem.pszText, TRUE)))
+ if ((nLabelWidth = LISTVIEW_GetStringWidthT(infoPtr, lvItem.pszText, TRUE)))
{
if (lvColumn.fmt == LVCFMT_RIGHT)
textLeft = rcItem.right - nLabelWidth;
@@ -3093,10 +3038,10 @@
else
rcTemp.right += WIDTH_PADDING;
- LISTVIEW_FillBackground(hwnd, hdc, &rcTemp);
+ LISTVIEW_FillBackground(infoPtr, hdc, &rcTemp);
/* set item colors */
- if (ListView_GetItemState(hwnd,nItem,LVIS_SELECTED) && Selected)
+ if (ListView_GetItemState(infoPtr->hwndSelf,nItem,LVIS_SELECTED) && Selected)
{
if (infoPtr->bFocus)
{
@@ -3165,9 +3110,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_DrawItem(HWND hwnd, HDC hdc, INT nItem, RECT rcItem, BOOL FullSelect, RECT* SuggestedFocus)
+static VOID LISTVIEW_DrawItem(LISTVIEW_INFO *infoPtr, HDC hdc, INT nItem, RECT rcItem, BOOL FullSelect, RECT* SuggestedFocus)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
WCHAR szDispText[DISP_TEXT_SIZE];
INT nLabelWidth;
LVITEMW lvItem;
@@ -3179,7 +3123,7 @@
UINT textoutOptions = ETO_OPAQUE | ETO_CLIPPED;
RECT rcTemp;
- TRACE("(hwnd=%x, hdc=%x, nItem=%d)\n", hwnd, hdc, nItem);
+ TRACE("(hdc=%x, nItem=%d)\n", hdc, nItem);
/* get information needed for drawing the item */
@@ -3191,7 +3135,7 @@
lvItem.cchTextMax = DISP_TEXT_SIZE;
lvItem.pszText = szDispText;
*lvItem.pszText = '\0';
- LISTVIEW_GetItemW(hwnd, &lvItem, TRUE);
+ LISTVIEW_GetItemW(infoPtr, &lvItem, TRUE);
TRACE(" lvItem=%s\n", debuglvitem_t(&lvItem, TRUE));
/* redraw the background of the item */
@@ -3201,7 +3145,7 @@
else
rcTemp.right+=WIDTH_PADDING;
- LISTVIEW_FillBackground(hwnd, hdc, &rcTemp);
+ LISTVIEW_FillBackground(infoPtr, hdc, &rcTemp);
/* do indent */
if (lvItem.iIndent>0 && infoPtr->iconSize.cx > 0)
@@ -3264,7 +3208,7 @@
/* set raster mode */
nMixMode = SetROP2(hdc, R2_XORPEN);
}
- else if ((GetWindowLongW(hwnd, GWL_STYLE) & LVS_SHOWSELALWAYS) &&
+ else if ((GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_SHOWSELALWAYS) &&
(lvItem.state & LVIS_SELECTED) && (infoPtr->bFocus == FALSE))
{
dwBkColor = SetBkColor(hdc, comctl32_color.clr3dFace);
@@ -3292,7 +3236,7 @@
nMixMode = SetROP2(hdc, R2_COPYPEN);
}
- nLabelWidth = LISTVIEW_GetStringWidthT(hwnd, lvItem.pszText, TRUE);
+ nLabelWidth = LISTVIEW_GetStringWidthT(infoPtr, lvItem.pszText, TRUE);
if (rcItem.left + nLabelWidth < rcItem.right)
{
if (!FullSelect)
@@ -3307,8 +3251,8 @@
dwTextX += IMAGE_PADDING;
if (lvItem.pszText) {
- TRACE("drawing text hwnd=%x, rect=(%d,%d)-(%d,%d)\n",
- hwnd, rcItem.left, rcItem.top, rcItem.right, rcItem.bottom);
+ TRACE("drawing text rect=(%d,%d)-(%d,%d)\n",
+ rcItem.left, rcItem.top, rcItem.right, rcItem.bottom);
ExtTextOutW(hdc, dwTextX, rcItem.top, textoutOptions,
&rcItem, lvItem.pszText, lstrlenW(lvItem.pszText), NULL);
}
@@ -3351,10 +3295,9 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_DrawLargeItem(HWND hwnd, HDC hdc, INT nItem, RECT rcItem,
+static VOID LISTVIEW_DrawLargeItem(LISTVIEW_INFO *infoPtr, HDC hdc, INT nItem, RECT rcItem,
RECT *SuggestedFocus)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
WCHAR szDispText[DISP_TEXT_SIZE] = { '\0' };
LVITEMW lvItem;
UINT uFormat = DT_TOP | DT_CENTER | DT_WORDBREAK | DT_NOPREFIX |
@@ -3362,8 +3305,8 @@
/* Maintain this format in line with the one in LISTVIEW_UpdateLargeItemLabelRect*/
RECT rcTemp;
- TRACE("(hwnd=%x, hdc=%x, nItem=%d, left=%d, top=%d, right=%d, bottom=%d)\n",
- hwnd, hdc, nItem, rcItem.left, rcItem.top, rcItem.right, rcItem.bottom);
+ TRACE("(hdc=%x, nItem=%d, left=%d, top=%d, right=%d, bottom=%d)\n",
+ hdc, nItem, rcItem.left, rcItem.top, rcItem.right, rcItem.bottom);
/* get information needed for drawing the item */
ZeroMemory(&lvItem, sizeof(lvItem));
@@ -3374,7 +3317,7 @@
lvItem.cchTextMax = DISP_TEXT_SIZE;
lvItem.pszText = szDispText;
*lvItem.pszText = '\0';
- LISTVIEW_GetItemW(hwnd, &lvItem, FALSE);
+ LISTVIEW_GetItemW(infoPtr, &lvItem, FALSE);
TRACE(" lvItem=%s\n", debuglvitem_t(&lvItem, TRUE));
/* redraw the background of the item */
@@ -3388,7 +3331,7 @@
TRACE("background rect (%d,%d)-(%d,%d)\n",
rcTemp.left, rcTemp.top, rcTemp.right, rcTemp.bottom);
- LISTVIEW_FillBackground(hwnd, hdc, &rcTemp);
+ LISTVIEW_FillBackground(infoPtr, hdc, &rcTemp);
/* Figure out text colours etc. depending on state
@@ -3540,9 +3483,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_RefreshReport(HWND hwnd, HDC hdc, DWORD cdmode)
+static VOID LISTVIEW_RefreshReport(LISTVIEW_INFO *infoPtr, HDC hdc, DWORD cdmode)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd,0);
SCROLLINFO scrollInfo;
INT nDrawPosY = infoPtr->rcList.top;
INT nColumnCount;
@@ -3552,7 +3494,7 @@
INT nLast;
BOOL FullSelected;
DWORD cditemmode = CDRF_DODEFAULT;
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
INT scrollOffset;
TRACE("\n");
@@ -3560,24 +3502,24 @@
scrollInfo.cbSize = sizeof(SCROLLINFO);
scrollInfo.fMask = SIF_POS;
- nItem = ListView_GetTopIndex(hwnd);
+ nItem = ListView_GetTopIndex(infoPtr->hwndSelf);
/* add 1 for displaying a partial item at the bottom */
- nLast = nItem + LISTVIEW_GetCountPerColumn(hwnd) + 1;
+ nLast = nItem + LISTVIEW_GetCountPerColumn(infoPtr) + 1;
nLast = min(nLast, GETITEMCOUNT(infoPtr));
/* send cache hint notification */
- if (GetWindowLongW(hwnd,GWL_STYLE) & LVS_OWNERDATA)
+ if (lStyle & LVS_OWNERDATA)
{
NMLVCACHEHINT nmlv;
- nmlv.hdr.hwndFrom = hwnd;
- nmlv.hdr.idFrom = GetWindowLongW(hwnd,GWL_ID);
+ nmlv.hdr.hwndFrom = infoPtr->hwndSelf;
+ nmlv.hdr.idFrom = GetWindowLongW(infoPtr->hwndSelf,GWL_ID);
nmlv.hdr.code = LVN_ODCACHEHINT;
nmlv.iFrom = nItem;
nmlv.iTo = nLast;
- SendMessageW(GetParent(hwnd), WM_NOTIFY, (WPARAM)nmlv.hdr.idFrom,
+ SendMessageW(GetParent(infoPtr->hwndSelf), WM_NOTIFY, (WPARAM)nmlv.hdr.idFrom,
(LPARAM)&nmlv);
}
@@ -3587,14 +3529,14 @@
/* clear the background of any part of the control that doesn't contain items */
SubtractRect(&rcTemp, &infoPtr->rcList, &infoPtr->rcView);
- LISTVIEW_FillBackground(hwnd, hdc, &rcTemp);
+ LISTVIEW_FillBackground(infoPtr, hdc, &rcTemp);
/* nothing to draw */
if(GETITEMCOUNT(infoPtr) == 0)
return;
/* Get scroll bar info once before loop */
- GetScrollInfo(hwnd, SB_HORZ, &scrollInfo);
+ GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo);
scrollOffset = scrollInfo.nPos;
for (; nItem < nLast; nItem++)
@@ -3604,7 +3546,7 @@
/* Do Owner Draw */
if (lStyle & LVS_OWNERDRAWFIXED)
{
- UINT uID = GetWindowLongW( hwnd, GWL_ID);
+ UINT uID = GetWindowLongW(infoPtr->hwndSelf, GWL_ID);
DRAWITEMSTRUCT dis;
LVITEMW item;
RECT br;
@@ -3616,10 +3558,10 @@
dis.itemAction = ODA_DRAWENTIRE;
dis.itemState = 0;
- if (LISTVIEW_IsSelected(hwnd,nItem)) dis.itemState|=ODS_SELECTED;
+ if (LISTVIEW_IsSelected(infoPtr,nItem)) dis.itemState|=ODS_SELECTED;
if (nItem==infoPtr->nFocusedItem) dis.itemState|=ODS_FOCUS;
- dis.hwndItem = hwnd;
+ dis.hwndItem = infoPtr->hwndSelf;
dis.hDC = hdc;
Header_GetItemRect(infoPtr->hwndHeader, nColumnCount-1, &br);
@@ -3632,11 +3574,11 @@
ZeroMemory(&item,sizeof(item));
item.iItem = nItem;
item.mask = LVIF_PARAM;
- ListView_GetItemW(hwnd, &item);
+ ListView_GetItemW(infoPtr->hwndSelf, &item);
dis.itemData = item.lParam;
- if (SendMessageW(GetParent(hwnd),WM_DRAWITEM,(WPARAM)uID,(LPARAM)&dis))
+ if (SendMessageW(GetParent(infoPtr->hwndSelf),WM_DRAWITEM,(WPARAM)uID,(LPARAM)&dis))
{
nDrawPosY += infoPtr->nItemHeight;
continue;
@@ -3661,7 +3603,7 @@
for (j = 0; j < nColumnCount; j++)
{
if (cdmode & CDRF_NOTIFYITEMDRAW)
- cditemmode = LISTVIEW_SendCustomDrawItemNotify (hwnd, hdc, nItem, j,
+ cditemmode = LISTVIEW_SendCustomDrawItemNotify (infoPtr, hdc, nItem, j,
CDDS_ITEMPREPAINT);
if (cditemmode & CDRF_SKIPDEFAULT)
continue;
@@ -3679,25 +3621,25 @@
if (j == 0)
{
- LISTVIEW_DrawItem(hwnd, hdc, nItem, rcItem, FullSelected,
+ LISTVIEW_DrawItem(infoPtr, hdc, nItem, rcItem, FullSelected,
&SuggestedFocusRect);
}
else
{
- LISTVIEW_DrawSubItem(hwnd, hdc, nItem, j, rcItem, FullSelected);
+ LISTVIEW_DrawSubItem(infoPtr, hdc, nItem, j, rcItem, FullSelected);
}
if (cditemmode & CDRF_NOTIFYPOSTPAINT)
- LISTVIEW_SendCustomDrawItemNotify(hwnd, hdc, nItem, 0,
+ LISTVIEW_SendCustomDrawItemNotify(infoPtr, hdc, nItem, 0,
CDDS_ITEMPOSTPAINT);
}
/*
* Draw Focus Rect
*/
- if (LISTVIEW_GetItemState(hwnd,nItem,LVIS_FOCUSED) && infoPtr->bFocus)
+ if (LISTVIEW_GetItemState(infoPtr,nItem,LVIS_FOCUSED) && infoPtr->bFocus)
{
BOOL rop=FALSE;
- if (FullSelected && LISTVIEW_GetItemState(hwnd,nItem,LVIS_SELECTED))
+ if (FullSelected && LISTVIEW_GetItemState(infoPtr,nItem,LVIS_SELECTED))
rop = SetROP2(hdc, R2_XORPEN);
Rectangle(hdc, SuggestedFocusRect.left, SuggestedFocusRect.top,
@@ -3720,10 +3662,9 @@
* RETURN:
* Number of items per row.
*/
-static INT LISTVIEW_GetCountPerRow(HWND hwnd)
+static INT LISTVIEW_GetCountPerRow(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd,0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nListWidth = infoPtr->rcList.right - infoPtr->rcList.left;
INT nCountPerRow = 1;
@@ -3750,9 +3691,8 @@
* RETURN:
* Number of items per column.
*/
-static INT LISTVIEW_GetCountPerColumn(HWND hwnd)
+static INT LISTVIEW_GetCountPerColumn(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd,0);
INT nListHeight = infoPtr->rcList.bottom - infoPtr->rcList.top;
INT nCountPerColumn = 1;
@@ -3781,10 +3721,9 @@
* RETURN:
* Number of columns.
*/
-static INT LISTVIEW_GetColumnCount(HWND hwnd)
+static INT LISTVIEW_GetColumnCount(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
INT nColumnCount = 0;
if ((lStyle & LVS_TYPEMASK) == LVS_LIST)
@@ -3808,9 +3747,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_RefreshList(HWND hwnd, HDC hdc, DWORD cdmode)
+static VOID LISTVIEW_RefreshList(LISTVIEW_INFO *infoPtr, HDC hdc, DWORD cdmode)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
RECT rcItem, FocusRect, rcTemp;
INT i, j;
INT nItem;
@@ -3821,16 +3759,16 @@
DWORD cditemmode = CDRF_DODEFAULT;
/* get number of fully visible columns */
- nColumnCount = LISTVIEW_GetColumnCount(hwnd);
+ nColumnCount = LISTVIEW_GetColumnCount(infoPtr);
infoPtr->nColumnCount = nColumnCount;
- nCountPerColumn = LISTVIEW_GetCountPerColumn(hwnd);
- nItem = ListView_GetTopIndex(hwnd);
+ nCountPerColumn = LISTVIEW_GetCountPerColumn(infoPtr);
+ nItem = ListView_GetTopIndex(infoPtr->hwndSelf);
TRACE("nColumnCount=%d, nCountPerColumn=%d, start item=%d\n",
nColumnCount, nCountPerColumn, nItem);
/* paint the background of the control that doesn't contain any items */
SubtractRect(&rcTemp, &infoPtr->rcList, &infoPtr->rcView);
- LISTVIEW_FillBackground(hwnd, hdc, &rcTemp);
+ LISTVIEW_FillBackground(infoPtr, hdc, &rcTemp);
/* nothing to draw, return here */
if(GETITEMCOUNT(infoPtr) == 0)
@@ -3844,7 +3782,7 @@
return;
if (cdmode & CDRF_NOTIFYITEMDRAW)
- cditemmode = LISTVIEW_SendCustomDrawItemNotify (hwnd, hdc, nItem, 0,
+ cditemmode = LISTVIEW_SendCustomDrawItemNotify (infoPtr, hdc, nItem, 0,
CDDS_ITEMPREPAINT);
if (cditemmode & CDRF_SKIPDEFAULT)
continue;
@@ -3853,16 +3791,16 @@
rcItem.left = i * nItemWidth;
rcItem.bottom = rcItem.top + nItemHeight;
rcItem.right = rcItem.left + nItemWidth;
- LISTVIEW_DrawItem(hwnd, hdc, nItem, rcItem, FALSE, &FocusRect);
+ LISTVIEW_DrawItem(infoPtr, hdc, nItem, rcItem, FALSE, &FocusRect);
/*
* Draw Focus Rect
*/
- if (LISTVIEW_GetItemState(hwnd,nItem,LVIS_FOCUSED) && infoPtr->bFocus)
+ if (LISTVIEW_GetItemState(infoPtr,nItem,LVIS_FOCUSED) && infoPtr->bFocus)
Rectangle(hdc, FocusRect.left, FocusRect.top,
FocusRect.right,FocusRect.bottom);
if (cditemmode & CDRF_NOTIFYPOSTPAINT)
- LISTVIEW_SendCustomDrawItemNotify(hwnd, hdc, nItem, 0,
+ LISTVIEW_SendCustomDrawItemNotify(infoPtr, hdc, nItem, 0,
CDDS_ITEMPOSTPAINT);
}
@@ -3880,9 +3818,8 @@
* RETURN:
* None
*/
-static VOID LISTVIEW_RefreshIcon(HWND hwnd, HDC hdc, BOOL bSmall, DWORD cdmode)
+static VOID LISTVIEW_RefreshIcon(LISTVIEW_INFO *infoPtr, HDC hdc, BOOL bSmall, DWORD cdmode)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
POINT ptPosition;
POINT ptOrigin;
RECT rcItem, SuggestedFocus, rcTemp;
@@ -3895,22 +3832,22 @@
/* paint the background of the control that doesn't contain any items */
SubtractRect(&rcTemp, &infoPtr->rcList, &infoPtr->rcView);
- LISTVIEW_FillBackground(hwnd, hdc, &rcTemp);
+ LISTVIEW_FillBackground(infoPtr, hdc, &rcTemp);
/* nothing to draw, return here */
if(GETITEMCOUNT(infoPtr) == 0)
return;
- LISTVIEW_GetOrigin(hwnd, &ptOrigin);
+ LISTVIEW_GetOrigin(infoPtr, &ptOrigin);
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
if (cdmode & CDRF_NOTIFYITEMDRAW)
- cditemmode = LISTVIEW_SendCustomDrawItemNotify (hwnd, hdc, i, 0,
+ cditemmode = LISTVIEW_SendCustomDrawItemNotify (infoPtr, hdc, i, 0,
CDDS_ITEMPREPAINT);
if (cditemmode & CDRF_SKIPDEFAULT)
continue;
- LISTVIEW_GetItemPosition(hwnd, i, &ptPosition);
+ LISTVIEW_GetItemPosition(infoPtr, i, &ptPosition);
ptPosition.x += ptOrigin.x;
ptPosition.y += ptOrigin.y;
@@ -3927,13 +3864,13 @@
rcItem.bottom = rcItem.top + infoPtr->nItemHeight;
rcItem.right = rcItem.left + infoPtr->nItemWidth;
if (bSmall)
- LISTVIEW_DrawItem(hwnd, hdc, i, rcItem, FALSE, &SuggestedFocus);
+ LISTVIEW_DrawItem(infoPtr, hdc, i, rcItem, FALSE, &SuggestedFocus);
else
- LISTVIEW_DrawLargeItem(hwnd, hdc, i, rcItem, &SuggestedFocus);
+ LISTVIEW_DrawLargeItem(infoPtr, hdc, i, rcItem, &SuggestedFocus);
/*
* Draw Focus Rect
*/
- if (LISTVIEW_GetItemState(hwnd,i,LVIS_FOCUSED) &&
+ if (LISTVIEW_GetItemState(infoPtr,i,LVIS_FOCUSED) &&
infoPtr->bFocus && !IsRectEmpty(&SuggestedFocus))
Rectangle(hdc, SuggestedFocus.left, SuggestedFocus.top,
SuggestedFocus.right,SuggestedFocus.bottom);
@@ -3942,7 +3879,7 @@
}
}
if (cditemmode & CDRF_NOTIFYPOSTPAINT)
- LISTVIEW_SendCustomDrawItemNotify(hwnd, hdc, i, 0,
+ LISTVIEW_SendCustomDrawItemNotify(infoPtr, hdc, i, 0,
CDDS_ITEMPOSTPAINT);
}
}
@@ -3958,10 +3895,9 @@
* RETURN:
* NoneX
*/
-static VOID LISTVIEW_Refresh(HWND hwnd, HDC hdc)
+static VOID LISTVIEW_Refresh(LISTVIEW_INFO *infoPtr, HDC hdc)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
HFONT hOldFont;
HPEN hPen, hOldPen;
DWORD cdmode;
@@ -3970,8 +3906,8 @@
infoPtr->bIsDrawing = TRUE;
LISTVIEW_DumpListview (infoPtr, __LINE__);
- GetClientRect(hwnd, &rect);
- cdmode = LISTVIEW_SendCustomDrawNotify(hwnd,CDDS_PREPAINT,hdc,rect);
+ GetClientRect(infoPtr->hwndSelf, &rect);
+ cdmode = LISTVIEW_SendCustomDrawNotify(infoPtr,CDDS_PREPAINT,hdc,rect);
if (cdmode == CDRF_SKIPDEFAULT) return;
@@ -3987,13 +3923,13 @@
TRACE("\n");
if (uView == LVS_LIST)
- LISTVIEW_RefreshList(hwnd, hdc, cdmode);
+ LISTVIEW_RefreshList(infoPtr, hdc, cdmode);
else if (uView == LVS_REPORT)
- LISTVIEW_RefreshReport(hwnd, hdc, cdmode);
+ LISTVIEW_RefreshReport(infoPtr, hdc, cdmode);
else if (uView == LVS_SMALLICON)
- LISTVIEW_RefreshIcon(hwnd, hdc, TRUE, cdmode);
+ LISTVIEW_RefreshIcon(infoPtr, hdc, TRUE, cdmode);
else if (uView == LVS_ICON)
- LISTVIEW_RefreshIcon(hwnd, hdc, FALSE, cdmode);
+ LISTVIEW_RefreshIcon(infoPtr, hdc, FALSE, cdmode);
/* unselect objects */
SelectObject(hdc, hOldFont);
@@ -4003,7 +3939,7 @@
DeleteObject(hPen);
if (cdmode & CDRF_NOTIFYPOSTPAINT)
- LISTVIEW_SendCustomDrawNotify(hwnd, CDDS_POSTPAINT, hdc, rect);
+ LISTVIEW_SendCustomDrawNotify(infoPtr, CDDS_POSTPAINT, hdc, rect);
infoPtr->bIsDrawing = FALSE;
}
@@ -4022,11 +3958,10 @@
* RETURN:
* Returns a DWORD. The width in the low word and the height in high word.
*/
-static LRESULT LISTVIEW_ApproximateViewRect(HWND hwnd, INT nItemCount,
+static LRESULT LISTVIEW_ApproximateViewRect(LISTVIEW_INFO *infoPtr, INT nItemCount,
WORD wWidth, WORD wHeight)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nItemCountPerColumn = 1;
INT nColumnCount = 0;
DWORD dwViewRect = 0;
@@ -4088,9 +4023,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_Arrange(HWND hwnd, INT nAlignCode)
+static LRESULT LISTVIEW_Arrange(LISTVIEW_INFO *infoPtr, INT nAlignCode)
{
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
BOOL bResult = FALSE;
if ((uView == LVS_ICON) || (uView == LVS_SMALLICON))
@@ -4129,10 +4064,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_DeleteAllItems(HWND hwnd)
+static LRESULT LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
LISTVIEW_ITEM *lpItem;
LISTVIEW_SUBITEM *lpSubItem;
@@ -4141,9 +4075,9 @@
BOOL bResult = FALSE;
HDPA hdpaSubItems;
- TRACE("(hwnd=%x,)\n", hwnd);
+ TRACE("()\n");
- LISTVIEW_RemoveAllSelections(hwnd);
+ LISTVIEW_RemoveAllSelections(infoPtr);
infoPtr->nSelectionMark=-1;
infoPtr->nFocusedItem=-1;
/* But we are supposed to leave nHotItem as is! */
@@ -4151,7 +4085,7 @@
if (lStyle & LVS_OWNERDATA)
{
infoPtr->hdpaItems->nItemCount = 0;
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return TRUE;
}
@@ -4164,7 +4098,7 @@
suppressed */
ZeroMemory(&nmlv, sizeof(NMLISTVIEW));
nmlv.iItem = -1;
- bSuppress = listview_notify(hwnd, LVN_DELETEALLITEMS, &nmlv);
+ bSuppress = listview_notify(infoPtr, LVN_DELETEALLITEMS, &nmlv);
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
@@ -4193,7 +4127,7 @@
/* send LVN_DELETEITEM notification */
nmlv.iItem = i;
nmlv.lParam = lpItem->lParam;
- listview_notify(hwnd, LVN_DELETEITEM, &nmlv);
+ listview_notify(infoPtr, LVN_DELETEITEM, &nmlv);
}
/* free item string */
@@ -4216,18 +4150,18 @@
{
if (lStyle & LVS_ALIGNLEFT)
{
- LISTVIEW_AlignLeft(hwnd);
+ LISTVIEW_AlignLeft(infoPtr);
}
else
{
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
}
}
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
/* invalidate client area (optimization needed) */
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
return bResult;
@@ -4245,11 +4179,10 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_DeleteColumn(HWND hwnd, INT nColumn)
+static LRESULT LISTVIEW_DeleteColumn(LISTVIEW_INFO *infoPtr, INT nColumn)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
- UINT uOwnerData = GetWindowLongW(hwnd, GWL_STYLE) & LVS_OWNERDATA;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uOwnerData = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_OWNERDATA;
BOOL bResult = FALSE;
if (Header_DeleteItem(infoPtr->hwndHeader, nColumn) != FALSE)
@@ -4257,16 +4190,16 @@
bResult = uOwnerData ? TRUE : LISTVIEW_RemoveColumn(infoPtr->hdpaItems, nColumn);
/* Need to reset the item width when deleting a column */
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
/* reset scroll parameters */
if (uView == LVS_REPORT)
{
/* update scrollbar(s) */
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
/* refresh client area */
- InvalidateRect(hwnd, NULL, FALSE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
}
}
@@ -4285,12 +4218,11 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_DeleteItem(HWND hwnd, INT nItem)
+static LRESULT LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
- LONG lCtrlId = GetWindowLongW(hwnd, GWL_ID);
+ LONG lCtrlId = GetWindowLongW(infoPtr->hwndSelf, GWL_ID);
NMLISTVIEW nmlv;
BOOL bResult = FALSE;
HDPA hdpaSubItems;
@@ -4299,28 +4231,28 @@
INT i;
LVITEMW item;
- TRACE("(hwnd=%x, nItem=%d)\n", hwnd, nItem);
+ TRACE("(nItem=%d)\n", nItem);
/* First, send LVN_DELETEITEM notification. */
memset(&nmlv, 0, sizeof (NMLISTVIEW));
- nmlv.hdr.hwndFrom = hwnd;
+ nmlv.hdr.hwndFrom = infoPtr->hwndSelf;
nmlv.hdr.idFrom = lCtrlId;
nmlv.hdr.code = LVN_DELETEITEM;
nmlv.iItem = nItem;
- SendMessageW(GetParent(hwnd), WM_NOTIFY, (WPARAM)lCtrlId,
+ SendMessageW(GetParent(infoPtr->hwndSelf), WM_NOTIFY, (WPARAM)lCtrlId,
(LPARAM)&nmlv);
/* remove it from the selection range */
ZeroMemory(&item,sizeof(item));
item.stateMask = LVIS_SELECTED;
- LISTVIEW_SetItemState(hwnd,nItem,&item);
+ LISTVIEW_SetItemState(infoPtr,nItem,&item);
if (lStyle & LVS_OWNERDATA)
{
infoPtr->hdpaItems->nItemCount --;
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return TRUE;
}
@@ -4360,21 +4292,21 @@
bResult = DPA_Destroy(hdpaSubItems);
}
- LISTVIEW_ShiftIndices(hwnd,nItem,-1);
+ LISTVIEW_ShiftIndices(infoPtr,nItem,-1);
/* align items (set position of each item) */
if ((uView == LVS_SMALLICON) || (uView == LVS_ICON))
{
if (lStyle & LVS_ALIGNLEFT)
- LISTVIEW_AlignLeft(hwnd);
+ LISTVIEW_AlignLeft(infoPtr);
else
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
}
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
/* refresh client area */
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
return bResult;
@@ -4392,9 +4324,8 @@
* SUCCESS : HWND
* FAILURE : 0
*/
-static LRESULT LISTVIEW_GetEditControl(HWND hwnd)
+static LRESULT LISTVIEW_GetEditControl(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
return (LRESULT)infoPtr->hwndEdit;
}
@@ -4413,10 +4344,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_EndEditLabelT(HWND hwnd, LPWSTR pszText, DWORD nItem, BOOL isW)
+static BOOL LISTVIEW_EndEditLabelT(LISTVIEW_INFO *infoPtr, LPWSTR pszText, INT nItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
NMLVDISPINFOW dispInfo;
LISTVIEW_ITEM *lpItem;
HDPA hdpaSubItems;
@@ -4424,7 +4354,7 @@
LVITEMW item;
BOOL bResult = TRUE;
- TRACE("(hwnd=%x, pszText=%s, nItem=%ld, isW=%d)\n", hwnd, debugstr_t(pszText, isW), nItem, isW);
+ TRACE("(pszText=%s, nItem=%d, isW=%d)\n", debugstr_t(pszText, isW), nItem, isW);
if (!(lStyle & LVS_OWNERDATA))
{
@@ -4441,7 +4371,7 @@
item.iItem = nItem;
item.iSubItem = 0;
item.mask = LVIF_PARAM | LVIF_STATE;
- ListView_GetItemW(hwnd, &item);
+ ListView_GetItemW(infoPtr->hwndSelf, &item);
lvItemRef.state = item.state;
lvItemRef.iImage = item.iImage;
lvItemRef.lParam = item.lParam;
@@ -4460,7 +4390,7 @@
infoPtr->Editing = FALSE;
/* Do we need to update the Item Text */
- if(dispinfo_notifyT(hwnd, LVN_ENDLABELEDITW, &dispInfo, isW))
+ if(dispinfo_notifyT(infoPtr, LVN_ENDLABELEDITW, &dispInfo, isW))
if (lpItem->pszText != LPSTR_TEXTCALLBACKW && !(lStyle & LVS_OWNERDATA))
bResult = textsetptrT(&lpItem->pszText, pszText, isW);
@@ -4469,42 +4399,6 @@
/***
* DESCRIPTION:
- * Callback implementation for editlabel control
- *
- * PARAMETER(S):
- * [I] HWND : window handle
- * [I] LPSTR : modified text
- * [I] DWORD : item index
- *
- * RETURN:
- * SUCCESS : TRUE
- * FAILURE : FALSE
- */
-static BOOL LISTVIEW_EndEditLabelW(HWND hwnd, LPWSTR pszText, DWORD nItem)
-{
- return LISTVIEW_EndEditLabelT(hwnd, pszText, nItem, TRUE);
-}
-
-/***
- * DESCRIPTION:
- * Callback implementation for editlabel control
- *
- * PARAMETER(S):
- * [I] HWND : window handle
- * [I] LPSTR : modified text
- * [I] DWORD : item index
- *
- * RETURN:
- * SUCCESS : TRUE
- * FAILURE : FALSE
- */
-static BOOL LISTVIEW_EndEditLabelA(HWND hwnd, LPSTR pszText, DWORD nItem)
-{
- return LISTVIEW_EndEditLabelT(hwnd, (LPWSTR)pszText, nItem, FALSE);
-}
-
-/***
- * DESCRIPTION:
* Begin in place editing of specified list view item
*
* PARAMETER(S):
@@ -4516,32 +4410,32 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static HWND LISTVIEW_EditLabelT(HWND hwnd, INT nItem, BOOL isW)
+static HWND LISTVIEW_EditLabelT(LISTVIEW_INFO *infoPtr, INT nItem, BOOL isW)
{
NMLVDISPINFOW dispInfo;
RECT rect;
LISTVIEW_ITEM *lpItem;
HWND hedit;
- HINSTANCE hinst = GetWindowLongW(hwnd, GWL_HINSTANCE);
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
HDPA hdpaSubItems;
WCHAR szDispText[DISP_TEXT_SIZE];
LVITEMW lvItem;
LISTVIEW_ITEM lvItemRef;
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
- if (~GetWindowLongW(hwnd, GWL_STYLE) & LVS_EDITLABELS)
+ if (~GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_EDITLABELS)
return FALSE;
+ TRACE("(nItem=%d, isW=%d)\n", nItem, isW);
+
/* Is the EditBox still there, if so remove it */
if(infoPtr->hwndEdit != 0)
{
- SetFocus(hwnd);
+ SetFocus(infoPtr->hwndSelf);
infoPtr->hwndEdit = 0;
}
- LISTVIEW_SetSelection(hwnd, nItem);
- LISTVIEW_SetItemFocus(hwnd, nItem);
+ LISTVIEW_SetSelection(infoPtr, nItem);
+ LISTVIEW_SetItemFocus(infoPtr, nItem);
if (!(lStyle & LVS_OWNERDATA))
{
@@ -4559,7 +4453,7 @@
item.iItem = nItem;
item.iSubItem = 0;
item.mask = LVIF_PARAM | LVIF_STATE;
- ListView_GetItemW(hwnd, &item);
+ ListView_GetItemW(infoPtr->hwndSelf, &item);
lvItemRef.iImage = item.iImage;
lvItemRef.state = item.state;
lvItemRef.lParam = item.lParam;
@@ -4574,7 +4468,7 @@
lvItem.cchTextMax = DISP_TEXT_SIZE;
lvItem.pszText = szDispText;
*lvItem.pszText = '\0';
- LISTVIEW_GetItemT(hwnd, &lvItem, FALSE, isW);
+ LISTVIEW_GetItemT(infoPtr, &lvItem, FALSE, isW);
ZeroMemory(&dispInfo, sizeof(dispInfo));
dispInfo.item.mask = 0;
@@ -4586,16 +4480,15 @@
dispInfo.item.iImage = lpItem->iImage;
dispInfo.item.lParam = lpItem->lParam;
- if (dispinfo_notifyT(hwnd, LVN_BEGINLABELEDITW, &dispInfo, isW))
+ if (dispinfo_notifyT(infoPtr, LVN_BEGINLABELEDITW, &dispInfo, isW))
return 0;
rect.left = LVIR_LABEL;
- if (!LISTVIEW_GetItemRect(hwnd, nItem, &rect))
+ if (!LISTVIEW_GetItemRect(infoPtr, nItem, &rect))
return 0;
- if (!(hedit = CreateEditLabelT(szDispText , WS_VISIBLE,
- rect.left-2, rect.top-1, 0, rect.bottom - rect.top+2, hwnd, hinst,
- isW ? LISTVIEW_EndEditLabelW : (EditlblCallbackW)LISTVIEW_EndEditLabelA,
+ if (!(hedit = CreateEditLabelT(infoPtr, szDispText, WS_VISIBLE,
+ rect.left-2, rect.top-1, 0, rect.bottom - rect.top+2,
nItem, isW)))
return 0;
@@ -4622,10 +4515,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_EnsureVisible(HWND hwnd, INT nItem, BOOL bPartial)
+static BOOL LISTVIEW_EnsureVisible(LISTVIEW_INFO *infoPtr, INT nItem, BOOL bPartial)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nScrollPosHeight = 0;
INT nScrollPosWidth = 0;
SCROLLINFO scrollInfo;
@@ -4639,11 +4531,11 @@
/* ALWAYS bPartial == FALSE, FOR NOW! */
rcItem.left = LVIR_BOUNDS;
- if (LISTVIEW_GetItemRect(hwnd, nItem, &rcItem) != FALSE)
+ if (LISTVIEW_GetItemRect(infoPtr, nItem, &rcItem) != FALSE)
{
if (rcItem.left < infoPtr->rcList.left)
{
- if (GetScrollInfo(hwnd, SB_HORZ, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo) != FALSE)
{
/* scroll left */
bRedraw = TRUE;
@@ -4667,13 +4559,13 @@
else
scrollInfo.nPos += rcItem.left / nScrollPosWidth - 1;
- SetScrollInfo(hwnd, SB_HORZ, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo, TRUE);
}
}
}
else if (rcItem.right > infoPtr->rcList.right)
{
- if (GetScrollInfo(hwnd, SB_HORZ, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo) != FALSE)
{
/* scroll right */
bRedraw = TRUE;
@@ -4697,7 +4589,7 @@
else
scrollInfo.nPos += rcItem.right / nScrollPosWidth + 1;
- SetScrollInfo(hwnd, SB_HORZ, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo, TRUE);
}
}
}
@@ -4706,7 +4598,7 @@
{
/* scroll up */
bRedraw = TRUE;
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) != FALSE)
{
if (uView == LVS_REPORT)
{
@@ -4724,14 +4616,14 @@
else
scrollInfo.nPos += rcItem.top / nScrollPosHeight - 1;
- SetScrollInfo(hwnd, SB_VERT, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo, TRUE);
}
}
else if (rcItem.bottom > infoPtr->rcList.bottom)
{
/* scroll down */
bRedraw = TRUE;
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) != FALSE)
{
if (uView == LVS_REPORT)
{
@@ -4749,13 +4641,13 @@
else
scrollInfo.nPos += rcItem.bottom / nScrollPosHeight + 1;
- SetScrollInfo(hwnd, SB_VERT, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo, TRUE);
}
}
}
if(bRedraw)
- InvalidateRect(hwnd,NULL,TRUE);
+ InvalidateRect(infoPtr->hwndSelf,NULL,TRUE);
return TRUE;
}
@@ -4771,9 +4663,8 @@
* RETURN:
* Item index if successdful, -1 otherwise.
*/
-static INT LISTVIEW_GetNearestItem(HWND hwnd, POINT pt, UINT vkDirection)
+static INT LISTVIEW_GetNearestItem(LISTVIEW_INFO *infoPtr, POINT pt, UINT vkDirection)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LV_INTHIT lvIntHit;
INT nItem = -1;
RECT rcView;
@@ -4783,10 +4674,10 @@
((vkDirection == VK_UP) ? "VK_UP" :
((vkDirection == VK_LEFT) ? "VK_LEFT" : "VK_RIGHT")));
- if (LISTVIEW_GetViewRect(hwnd, &rcView) != FALSE)
+ if (LISTVIEW_GetViewRect(infoPtr, &rcView) != FALSE)
{
ZeroMemory(&lvIntHit, sizeof(lvIntHit));
- LISTVIEW_GetOrigin(hwnd, &lvIntHit.ht.pt);
+ LISTVIEW_GetOrigin(infoPtr, &lvIntHit.ht.pt);
lvIntHit.ht.pt.x += pt.x;
lvIntHit.ht.pt.y += pt.y;
@@ -4803,7 +4694,7 @@
return -1;
else
{
- nItem = LISTVIEW_SuperHitTestItem(hwnd, &lvIntHit, TRUE);
+ nItem = LISTVIEW_SuperHitTestItem(infoPtr, &lvIntHit, TRUE);
return nItem == -1 ? lvIntHit.iDistItem : nItem;
}
}
@@ -4824,10 +4715,9 @@
* SUCCESS : index of item
* FAILURE : -1
*/
-static LRESULT LISTVIEW_FindItemW(HWND hwnd, INT nStart,
+static LRESULT LISTVIEW_FindItemW(LISTVIEW_INFO *infoPtr, INT nStart,
LPLVFINDINFOW lpFindInfo)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
POINT ptItem;
WCHAR szDispText[DISP_TEXT_SIZE] = { '\0' };
LVITEMW lvItem;
@@ -4866,12 +4756,12 @@
{
if (lpFindInfo->flags & LVFI_NEARESTXY)
{
- nItem = LISTVIEW_GetNearestItem(hwnd, ptItem,
+ nItem = LISTVIEW_GetNearestItem(infoPtr, ptItem,
lpFindInfo->vkDirection);
if (nItem != -1)
{
/* get position of the new item index */
- if (ListView_GetItemPosition(hwnd, nItem, &ptItem) == FALSE)
+ if (ListView_GetItemPosition(infoPtr->hwndSelf, nItem, &ptItem) == FALSE)
return -1;
}
else
@@ -4884,7 +4774,7 @@
lvItem.iItem = nItem;
lvItem.iSubItem = 0;
- if (LISTVIEW_GetItemW(hwnd, &lvItem, TRUE))
+ if (LISTVIEW_GetItemW(infoPtr, &lvItem, TRUE))
{
if (lvItem.mask & LVIF_TEXT)
{
@@ -4939,7 +4829,7 @@
* SUCCESS : index of item
* FAILURE : -1
*/
-static LRESULT LISTVIEW_FindItemA(HWND hwnd, INT nStart,
+static LRESULT LISTVIEW_FindItemA(LISTVIEW_INFO *infoPtr, INT nStart,
LPLVFINDINFOA lpFindInfo)
{
BOOL hasText = lpFindInfo->flags & (LVFI_STRING | LVFI_PARTIAL);
@@ -4948,7 +4838,7 @@
memcpy(&fiw, lpFindInfo, sizeof(fiw));
if (hasText) fiw.psz = textdupTtoW((LPCWSTR)lpFindInfo->psz, FALSE);
- res = LISTVIEW_FindItemW(hwnd, nStart, &fiw);
+ res = LISTVIEW_FindItemW(infoPtr, nStart, &fiw);
if (hasText) textfreeT((LPWSTR)fiw.psz, FALSE);
return res;
}
@@ -4963,10 +4853,8 @@
* RETURN:
* COLORREF associated with the background.
*/
-static LRESULT LISTVIEW_GetBkColor(HWND hwnd)
+static LRESULT LISTVIEW_GetBkColor(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return infoPtr->clrBk;
}
@@ -4982,7 +4870,7 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-/* static LRESULT LISTVIEW_GetBkImage(HWND hwnd, LPLVBKIMAGE lpBkImage) */
+/* static LRESULT LISTVIEW_GetBkImage(LISTVIEW_INFO *infoPtr, LPLVBKIMAGE lpBkImage) */
/* { */
/* FIXME (listview, "empty stub!\n"); */
/* return FALSE; */
@@ -4998,10 +4886,8 @@
* RETURN:
* Value of mask
*/
-static UINT LISTVIEW_GetCallbackMask(HWND hwnd)
+static UINT LISTVIEW_GetCallbackMask(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return infoPtr->uCallbackMask;
}
@@ -5020,9 +4906,8 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_GetColumnT(HWND hwnd, INT nItem, LPLVCOLUMNW lpColumn, BOOL isW)
+static LRESULT LISTVIEW_GetColumnT(LISTVIEW_INFO *infoPtr, INT nItem, LPLVCOLUMNW lpColumn, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
HDITEMW hdi;
BOOL bResult = FALSE;
@@ -5085,8 +4970,8 @@
if (lpColumn->mask & LVCF_ORDER)
lpColumn->iOrder = hdi.iOrder;
- TRACE("(hwnd=%x, col=%d, lpColumn=%s, isW=%d)\n",
- hwnd, nItem, debuglvcolumn_t(lpColumn, isW), isW);
+ TRACE("(col=%d, lpColumn=%s, isW=%d)\n",
+ nItem, debuglvcolumn_t(lpColumn, isW), isW);
}
}
@@ -5095,15 +4980,14 @@
}
-static LRESULT LISTVIEW_GetColumnOrderArray(HWND hwnd, INT iCount, LPINT lpiArray)
+static LRESULT LISTVIEW_GetColumnOrderArray(LISTVIEW_INFO *infoPtr, INT iCount, LPINT lpiArray)
{
-/* LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0); */
INT i;
if (!lpiArray)
return FALSE;
- /* little hack */
+ /* FIXME: little hack */
for (i = 0; i < iCount; i++)
lpiArray[i] = i;
@@ -5122,10 +5006,9 @@
* SUCCESS : column width
* FAILURE : zero
*/
-static LRESULT LISTVIEW_GetColumnWidth(HWND hwnd, INT nColumn)
+static LRESULT LISTVIEW_GetColumnWidth(LISTVIEW_INFO *infoPtr, INT nColumn)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nColumnWidth = 0;
HDITEMW hdi;
@@ -5157,23 +5040,22 @@
* RETURN:
* Number of fully visible items.
*/
-static LRESULT LISTVIEW_GetCountPerPage(HWND hwnd)
+static LRESULT LISTVIEW_GetCountPerPage(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nItemCount = 0;
if (uView == LVS_LIST)
{
if (infoPtr->rcList.right > infoPtr->nItemWidth)
{
- nItemCount = LISTVIEW_GetCountPerRow(hwnd) *
- LISTVIEW_GetCountPerColumn(hwnd);
+ nItemCount = LISTVIEW_GetCountPerRow(infoPtr) *
+ LISTVIEW_GetCountPerColumn(infoPtr);
}
}
else if (uView == LVS_REPORT)
{
- nItemCount = LISTVIEW_GetCountPerColumn(hwnd);
+ nItemCount = LISTVIEW_GetCountPerColumn(infoPtr);
}
else
{
@@ -5196,15 +5078,9 @@
* SUCCESS : previous style
* FAILURE : 0
*/
-static LRESULT LISTVIEW_GetExtendedListViewStyle(HWND hwnd)
+static LRESULT LISTVIEW_GetExtendedListViewStyle(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr;
-
- /* make sure we can get the listview info */
- if (!(infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0)))
- return (0);
-
- return (infoPtr->dwExStyle);
+ return infoPtr->dwExStyle;
}
/***
@@ -5217,15 +5093,11 @@
* RETURN:
* Header handle.
*/
-static LRESULT LISTVIEW_GetHeader(HWND hwnd)
+static LRESULT LISTVIEW_GetHeader(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return (LRESULT)infoPtr->hwndHeader;
}
-/* LISTVIEW_GetHotCursor */
-
/***
* DESCRIPTION:
* Returns the time that the mouse cursor must hover over an item
@@ -5238,10 +5110,8 @@
* Returns the previously set hover time or (DWORD)-1 to indicate that the
* hover time is set to the default hover time.
*/
-static LRESULT LISTVIEW_GetHoverTime(HWND hwnd)
+static LRESULT LISTVIEW_GetHoverTime(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return infoPtr->dwHoverTime;
}
@@ -5257,9 +5127,8 @@
* SUCCESS : image list handle
* FAILURE : NULL
*/
-static LRESULT LISTVIEW_GetImageList(HWND hwnd, INT nImageList)
+static LRESULT LISTVIEW_GetImageList(LISTVIEW_INFO *infoPtr, INT nImageList)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
HIMAGELIST himl = NULL;
switch (nImageList)
@@ -5296,10 +5165,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_GetItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL internal, BOOL isW)
+static LRESULT LISTVIEW_GetItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL internal, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
NMLVDISPINFOW dispInfo;
LISTVIEW_SUBITEM *lpSubItem;
LISTVIEW_ITEM *lpItem;
@@ -5322,8 +5190,8 @@
* information from the application
*/
- TRACE("(hwnd=%x, lpLVItem=%s, internal=%d, isW=%d)\n",
- hwnd, debuglvitem_t(lpLVItem, isW), internal, isW);
+ TRACE("(lpLVItem=%s, internal=%d, isW=%d)\n",
+ debuglvitem_t(lpLVItem, isW), internal, isW);
if ((lpLVItem == NULL) || (lpLVItem->iItem < 0) ||
(lpLVItem->iItem >= GETITEMCOUNT(infoPtr)))
@@ -5336,7 +5204,7 @@
if (lpLVItem->mask & ~LVIF_STATE)
{
memcpy(&dispInfo.item, lpLVItem, sizeof(LVITEMW));
- dispinfo_notifyT(hwnd, LVN_GETDISPINFOW, &dispInfo, isW);
+ dispinfo_notifyT(infoPtr, LVN_GETDISPINFOW, &dispInfo, isW);
memcpy(lpLVItem, &dispInfo.item, sizeof(LVITEMW));
TRACE(" getdispinfo(1):lpLVItem=%s\n", debuglvitem_t(lpLVItem, isW));
}
@@ -5346,7 +5214,7 @@
lpLVItem->state = 0;
if (infoPtr->nFocusedItem == lpLVItem->iItem)
lpLVItem->state |= LVIS_FOCUSED;
- if (LISTVIEW_IsSelected(hwnd,lpLVItem->iItem))
+ if (LISTVIEW_IsSelected(infoPtr,lpLVItem->iItem))
lpLVItem->state |= LVIS_SELECTED;
}
@@ -5403,7 +5271,7 @@
dispInfo.item.iItem = lpLVItem->iItem;
dispInfo.item.iSubItem = lpLVItem->iSubItem;
dispInfo.item.lParam = lpItem->lParam;
- dispinfo_notifyT(hwnd, LVN_GETDISPINFOW, &dispInfo, isW);
+ dispinfo_notifyT(infoPtr, LVN_GETDISPINFOW, &dispInfo, isW);
TRACE(" getdispinfo(2):lpLVItem=%s\n", debuglvitem_t(&dispInfo.item, isW));
}
@@ -5454,7 +5322,7 @@
lpLVItem->state &= ~LVIS_SELECTED;
if ((dispInfo.item.stateMask & LVIS_SELECTED) &&
- LISTVIEW_IsSelected(hwnd,dispInfo.item.iItem))
+ LISTVIEW_IsSelected(infoPtr,dispInfo.item.iItem))
lpLVItem->state |= LVIS_SELECTED;
}
else if (lpLVItem->mask & LVIF_STATE)
@@ -5463,7 +5331,7 @@
lpLVItem->state &= ~LVIS_SELECTED;
if ((lpLVItem->stateMask & LVIS_SELECTED) &&
- LISTVIEW_IsSelected(hwnd,lpLVItem->iItem))
+ LISTVIEW_IsSelected(infoPtr,lpLVItem->iItem))
lpLVItem->state |= LVIS_SELECTED;
}
@@ -5477,8 +5345,6 @@
return TRUE;
}
-/* LISTVIEW_GetHotCursor */
-
/***
* DESCRIPTION:
* Retrieves the index of the hot item.
@@ -5490,10 +5356,8 @@
* SUCCESS : hot item index
* FAILURE : -1 (no hot item)
*/
-static LRESULT LISTVIEW_GetHotItem(HWND hwnd)
+static LRESULT LISTVIEW_GetHotItem(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return infoPtr->nHotItem;
}
@@ -5509,10 +5373,8 @@
* RETURN:
* Number of items.
*/
-static LRESULT LISTVIEW_GetItemCount(HWND hwnd)
+static LRESULT LISTVIEW_GetItemCount(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return GETITEMCOUNT(infoPtr);
}
@@ -5529,10 +5391,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_GetItemBoundBox(HWND hwnd, INT nItem, LPRECT lpRect)
+static BOOL LISTVIEW_GetItemBoundBox(LISTVIEW_INFO *infoPtr, INT nItem, LPRECT lpRect)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
BOOL bResult = FALSE;
HDPA hdpaSubItems;
@@ -5540,7 +5401,7 @@
INT nCountPerColumn;
INT nRow;
- TRACE("(hwnd=%x,nItem=%d,lpRect=%p)\n", hwnd, nItem, lpRect);
+ TRACE("(nItem=%d,lpRect=%p)\n", nItem, lpRect);
if ((nItem >= 0) && (nItem < GETITEMCOUNT(infoPtr)) &&
(lpRect != NULL))
@@ -5548,8 +5409,8 @@
if (uView == LVS_LIST)
{
bResult = TRUE;
- nItem = nItem - ListView_GetTopIndex(hwnd);
- nCountPerColumn = LISTVIEW_GetCountPerColumn(hwnd);
+ nItem = nItem - ListView_GetTopIndex(infoPtr->hwndSelf);
+ nCountPerColumn = LISTVIEW_GetCountPerColumn(infoPtr);
if (nItem < 0)
{
nRow = nItem % nCountPerColumn;
@@ -5574,7 +5435,7 @@
{
bResult = TRUE;
lpRect->left = REPORT_MARGINX;
- lpRect->top = ((nItem - ListView_GetTopIndex(hwnd)) *
+ lpRect->top = ((nItem - ListView_GetTopIndex(infoPtr->hwndSelf)) *
infoPtr->nItemHeight) + infoPtr->rcList.top;
if (!(lStyle & LVS_NOSCROLL))
@@ -5584,7 +5445,7 @@
ZeroMemory(&scrollInfo, sizeof(SCROLLINFO));
scrollInfo.cbSize = sizeof(SCROLLINFO);
scrollInfo.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_HORZ, &scrollInfo);
+ GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo);
lpRect->left -= scrollInfo.nPos;
}
}
@@ -5623,19 +5484,18 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_GetItemPosition(HWND hwnd, INT nItem, LPPOINT lpptPosition)
+static BOOL LISTVIEW_GetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem, LPPOINT lpptPosition)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0);
- UINT uView = GetWindowLongA(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongA(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
BOOL bResult = FALSE;
RECT rcBounding;
- TRACE("(hwnd=%x, nItem=%d, lpptPosition=%p)\n", hwnd, nItem, lpptPosition);
+ TRACE("(nItem=%d, lpptPosition=%p)\n", nItem, lpptPosition);
if ((nItem >= 0) && (nItem < GETITEMCOUNT(infoPtr)) &&
(lpptPosition != NULL))
{
- bResult = LISTVIEW_GetItemBoundBox(hwnd, nItem, &rcBounding);
+ bResult = LISTVIEW_GetItemBoundBox(infoPtr, nItem, &rcBounding);
lpptPosition->x = rcBounding.left;
lpptPosition->y = rcBounding.top;
if (uView == LVS_ICON)
@@ -5656,16 +5516,16 @@
* On return the bottom will also be set and the width may have been
* modified.
*
+ * PARAMETER
+ * [I] infoPtr : pointer to the listview structure
+ * [I] nItem : the item for which we are calculating this
+ * [I] rect : the rectangle to be updated
+ *
* This appears to be weird, even in the Microsoft implementation.
*/
-
-static void ListView_UpdateLargeItemLabelRect (
- HWND hwnd, /* The window of the listview */
- const LISTVIEW_INFO *infoPtr, /* The listview itself */
- int nItem, /* The item for which we are calculating this */
- RECT *rect) /* The rectangle to be updated */
+static void LISTVIEW_UpdateLargeItemLabelRect (LISTVIEW_INFO *infoPtr, int nItem, RECT *rect)
{
- HDC hdc = GetDC (hwnd);
+ HDC hdc = GetDC (infoPtr->hwndSelf);
HFONT hOldFont = SelectObject (hdc, infoPtr->hFont);
if (infoPtr->bFocus && infoPtr->nFocusedItem == nItem)
@@ -5688,7 +5548,7 @@
* pointer to the text, rather than specifying a buffer to which
* to copy it.
*/
- LISTVIEW_GetItemW (hwnd, &lvItem, TRUE);
+ LISTVIEW_GetItemW (infoPtr, &lvItem, TRUE);
DrawTextW (hdc, lvItem.pszText, -1, rect, DT_CALCRECT |
DT_NOCLIP | DT_EDITCONTROL | DT_TOP | DT_CENTER |
DT_WORDBREAK | DT_NOPREFIX);
@@ -5709,7 +5569,7 @@
}
SelectObject (hdc, hOldFont);
- ReleaseDC (hwnd, hdc);
+ ReleaseDC (infoPtr->hwndSelf, hdc);
}
/***
@@ -5740,10 +5600,9 @@
* is the one with the focus. Ensure that the control's record of which
* item has the focus agrees with the items' records.
*/
-static LRESULT LISTVIEW_GetItemRect(HWND hwnd, INT nItem, LPRECT lprc)
+static LRESULT LISTVIEW_GetItemRect(LISTVIEW_INFO *infoPtr, INT nItem, LPRECT lprc)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
BOOL bResult = FALSE;
POINT ptOrigin;
POINT ptItem;
@@ -5753,7 +5612,7 @@
LVITEMW lvItem;
RECT rcInternal;
- TRACE("(hwnd=%x, nItem=%d, lprc=%p)\n", hwnd, nItem, lprc);
+ TRACE("(nItem=%d, lprc=%p)\n", nItem, lprc);
if (uView & LVS_REPORT)
{
@@ -5761,7 +5620,7 @@
lvItem.mask = LVIF_INDENT;
lvItem.iItem = nItem;
lvItem.iSubItem = 0;
- LISTVIEW_GetItemW(hwnd, &lvItem, TRUE);
+ LISTVIEW_GetItemW(infoPtr, &lvItem, TRUE);
/* do indent */
if (lvItem.iIndent>0 && infoPtr->iconSize.cx > 0)
@@ -5777,12 +5636,12 @@
switch(lprc->left)
{
case LVIR_ICON:
- if (!LISTVIEW_GetItemPosition(hwnd, nItem, &ptItem)) break;
+ if (!LISTVIEW_GetItemPosition(infoPtr, nItem, &ptItem)) break;
if (uView == LVS_ICON)
{
if (infoPtr->himlNormal != NULL)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
lprc->left = ptItem.x + ptOrigin.x;
@@ -5795,7 +5654,7 @@
}
else if (uView == LVS_SMALLICON)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
lprc->left = ptItem.x + ptOrigin.x;
@@ -5831,18 +5690,18 @@
break;
case LVIR_LABEL:
- if (!LISTVIEW_GetItemPosition(hwnd, nItem, &ptItem)) break;
+ if (!LISTVIEW_GetItemPosition(infoPtr, nItem, &ptItem)) break;
if (uView == LVS_ICON)
{
if (infoPtr->himlNormal != NULL)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
lprc->left = ptItem.x + ptOrigin.x;
lprc->top = (ptItem.y + ptOrigin.y + infoPtr->iconSize.cy +
ICON_BOTTOM_PADDING);
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
if (infoPtr->iconSpacing.cx - nLabelWidth > 1)
{
lprc->left += (infoPtr->iconSpacing.cx - nLabelWidth) / 2;
@@ -5852,7 +5711,7 @@
{
lprc->left += 1;
lprc->right = lprc->left + infoPtr->iconSpacing.cx - 1;
- ListView_UpdateLargeItemLabelRect (hwnd, infoPtr, nItem, lprc);
+ LISTVIEW_UpdateLargeItemLabelRect (infoPtr, nItem, lprc);
}
lprc->bottom = lprc->top + infoPtr->ntmHeight + HEIGHT_PADDING;
}
@@ -5860,7 +5719,7 @@
}
else if (uView == LVS_SMALLICON)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
nLeftPos = lprc->left = ptItem.x + ptOrigin.x;
@@ -5873,7 +5732,7 @@
if (infoPtr->himlSmall != NULL)
lprc->left += infoPtr->iconSize.cx;
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
nLabelWidth += TRAILING_PADDING;
if (lprc->left + nLabelWidth < nLeftPos + infoPtr->nItemWidth)
lprc->right = lprc->left + nLabelWidth;
@@ -5899,13 +5758,13 @@
if (uView != LVS_REPORT)
{
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
nLabelWidth += TRAILING_PADDING;
if (infoPtr->himlSmall)
nLabelWidth += IMAGE_PADDING;
}
else
- nLabelWidth = LISTVIEW_GetColumnWidth(hwnd, 0)-lprc->left;
+ nLabelWidth = LISTVIEW_GetColumnWidth(infoPtr, 0)-lprc->left;
if (lprc->left + nLabelWidth < nLeftPos + infoPtr->nItemWidth)
lprc->right = lprc->left + nLabelWidth;
else
@@ -5914,14 +5773,14 @@
break;
case LVIR_BOUNDS:
- if (!LISTVIEW_GetItemBoundBox(hwnd, nItem, &rcInternal)) break;
+ if (!LISTVIEW_GetItemBoundBox(infoPtr, nItem, &rcInternal)) break;
ptItem.x = rcInternal.left;
ptItem.y = rcInternal.top;
if (uView == LVS_ICON)
{
if (infoPtr->himlNormal != NULL)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
RECT label_rect;
INT text_left, text_right, icon_left, text_pos_x;
@@ -5939,7 +5798,7 @@
ptItem.y += ICON_TOP_PADDING;
/* Compute the label left and right */
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
text_pos_x = infoPtr->iconSpacing.cx - 2*CAPTION_BORDER - nLabelWidth;
if (text_pos_x > 1)
{
@@ -5963,14 +5822,14 @@
CopyRect (&label_rect, lprc);
label_rect.top = lprc->bottom;
- ListView_UpdateLargeItemLabelRect (hwnd, infoPtr, nItem, &label_rect);
+ LISTVIEW_UpdateLargeItemLabelRect (infoPtr, nItem, &label_rect);
UnionRect (lprc, lprc, &label_rect);
}
}
}
else if (uView == LVS_SMALLICON)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
lprc->left = ptItem.x + ptOrigin.x;
@@ -5982,7 +5841,7 @@
if (infoPtr->himlSmall != NULL)
lprc->right += infoPtr->iconSize.cx;
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
nLabelWidth += TRAILING_PADDING;
if (infoPtr->himlSmall)
nLabelWidth += IMAGE_PADDING;
@@ -6018,7 +5877,7 @@
if (infoPtr->himlSmall != NULL)
lprc->right += infoPtr->iconSize.cx;
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
nLabelWidth += TRAILING_PADDING;
if (lprc->right + nLabelWidth < lprc->left + infoPtr->nItemWidth)
lprc->right += nLabelWidth;
@@ -6029,12 +5888,12 @@
break;
case LVIR_SELECTBOUNDS:
- if (!LISTVIEW_GetItemPosition(hwnd, nItem, &ptItem)) break;
+ if (!LISTVIEW_GetItemPosition(infoPtr, nItem, &ptItem)) break;
if (uView == LVS_ICON)
{
if (infoPtr->himlNormal != NULL)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
lprc->left = ptItem.x + ptOrigin.x;
@@ -6046,7 +5905,7 @@
}
else if (uView == LVS_SMALLICON)
{
- if (LISTVIEW_GetOrigin(hwnd, &ptOrigin) != FALSE)
+ if (LISTVIEW_GetOrigin(infoPtr, &ptOrigin) != FALSE)
{
bResult = TRUE;
nLeftPos= lprc->left = ptItem.x + ptOrigin.x;
@@ -6061,7 +5920,7 @@
if (infoPtr->himlSmall != NULL)
lprc->right += infoPtr->iconSize.cx;
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
nLabelWidth += TRAILING_PADDING;
if (lprc->right + nLabelWidth < nLeftPos + infoPtr->nItemWidth)
lprc->right += nLabelWidth;
@@ -6097,7 +5956,7 @@
if (infoPtr->himlSmall != NULL)
lprc->right += infoPtr->iconSize.cx;
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, nItem);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, nItem);
nLabelWidth += TRAILING_PADDING;
if (infoPtr->himlSmall)
nLabelWidth += IMAGE_PADDING;
@@ -6121,13 +5980,13 @@
}
-static LRESULT LISTVIEW_GetSubItemRect(HWND hwnd, INT nItem, INT nSubItem, INT
+static LRESULT LISTVIEW_GetSubItemRect(LISTVIEW_INFO *infoPtr, INT nItem, INT nSubItem, INT
flags, LPRECT lprc)
{
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT count;
- TRACE("(hwnd=%x, nItem=%d, nSubItem=%d lprc=%p)\n", hwnd, nItem, nSubItem,
+ TRACE("(nItem=%d, nSubItem=%d lprc=%p)\n", nItem, nSubItem,
lprc);
if (!(uView & LVS_REPORT))
@@ -6140,14 +5999,13 @@
}
else
{
- int top = min(((LISTVIEW_INFO *)GetWindowLongW(hwnd, 0))->nColumnCount,
- nSubItem - 1);
+ int top = min(infoPtr->nColumnCount, nSubItem - 1);
- LISTVIEW_GetItemRect(hwnd,nItem,lprc);
+ LISTVIEW_GetItemRect(infoPtr,nItem,lprc);
for (count = 0; count < top; count++)
- lprc->left += LISTVIEW_GetColumnWidth(hwnd,count);
+ lprc->left += LISTVIEW_GetColumnWidth(infoPtr,count);
- lprc->right = LISTVIEW_GetColumnWidth(hwnd,(nSubItem-1)) +
+ lprc->right = LISTVIEW_GetColumnWidth(infoPtr,(nSubItem-1)) +
lprc->left;
}
return TRUE;
@@ -6165,21 +6023,21 @@
* SUCCESS : string width (in pixels)
* FAILURE : zero
*/
-static INT LISTVIEW_GetLabelWidth(HWND hwnd, INT nItem)
+static INT LISTVIEW_GetLabelWidth(LISTVIEW_INFO *infoPtr, INT nItem)
{
WCHAR szDispText[DISP_TEXT_SIZE] = { '\0' };
INT nLabelWidth = 0;
LVITEMW lvItem;
- TRACE("(hwnd=%x, nItem=%d)\n", hwnd, nItem);
+ TRACE("(nItem=%d)\n", nItem);
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.mask = LVIF_TEXT;
lvItem.iItem = nItem;
lvItem.cchTextMax = DISP_TEXT_SIZE;
lvItem.pszText = szDispText;
- if (LISTVIEW_GetItemW(hwnd, &lvItem, TRUE))
- nLabelWidth = LISTVIEW_GetStringWidthT(hwnd, lvItem.pszText, TRUE);
+ if (LISTVIEW_GetItemW(infoPtr, &lvItem, TRUE))
+ nLabelWidth = LISTVIEW_GetStringWidthT(infoPtr, lvItem.pszText, TRUE);
return nLabelWidth;
}
@@ -6195,9 +6053,8 @@
* RETURN:
* Horizontal + vertical spacing
*/
-static LRESULT LISTVIEW_GetItemSpacing(HWND hwnd, BOOL bSmall)
+static LRESULT LISTVIEW_GetItemSpacing(LISTVIEW_INFO *infoPtr, BOOL bSmall)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LONG lResult;
if (bSmall == FALSE)
@@ -6206,7 +6063,7 @@
}
else
{
- LONG style = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG style = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
if ((style & LVS_TYPEMASK) == LVS_ICON)
lResult = MAKELONG(DEFAULT_COLUMN_WIDTH, GetSystemMetrics(SM_CXSMICON)+HEIGHT_PADDING);
else
@@ -6227,9 +6084,8 @@
* RETURN:
* State specified by the mask.
*/
-static LRESULT LISTVIEW_GetItemState(HWND hwnd, INT nItem, UINT uMask)
+static LRESULT LISTVIEW_GetItemState(LISTVIEW_INFO *infoPtr, INT nItem, UINT uMask)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
LVITEMW lvItem;
UINT uState = 0;
@@ -6239,7 +6095,7 @@
lvItem.iItem = nItem;
lvItem.stateMask = uMask;
lvItem.mask = LVIF_STATE;
- if (LISTVIEW_GetItemW(hwnd, &lvItem, TRUE))
+ if (LISTVIEW_GetItemW(infoPtr, &lvItem, TRUE))
uState = lvItem.state;
}
@@ -6260,9 +6116,8 @@
* SUCCESS : string length
* FAILURE : 0
*/
-static LRESULT LISTVIEW_GetItemTextT(HWND hwnd, INT nItem, LPLVITEMW lpLVItem, BOOL isW)
+static LRESULT LISTVIEW_GetItemTextT(LISTVIEW_INFO *infoPtr, INT nItem, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nLength = 0;
if (lpLVItem != NULL)
@@ -6271,7 +6126,7 @@
{
lpLVItem->mask = LVIF_TEXT;
lpLVItem->iItem = nItem;
- if (LISTVIEW_GetItemT(hwnd, lpLVItem, FALSE, isW))
+ if (LISTVIEW_GetItemT(infoPtr, lpLVItem, FALSE, isW))
nLength = textlenT(lpLVItem->pszText, isW);
}
}
@@ -6292,10 +6147,9 @@
* SUCCESS : item index
* FAILURE : -1
*/
-static LRESULT LISTVIEW_GetNextItem(HWND hwnd, INT nItem, UINT uFlags)
+static LRESULT LISTVIEW_GetNextItem(LISTVIEW_INFO *infoPtr, INT nItem, UINT uFlags)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
UINT uMask = 0;
LVFINDINFOW lvFindInfo;
INT nCountPerColumn;
@@ -6324,7 +6178,7 @@
while (nItem >= 0)
{
nItem--;
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6332,10 +6186,10 @@
{
lvFindInfo.flags = LVFI_NEARESTXY;
lvFindInfo.vkDirection = VK_UP;
- ListView_GetItemPosition(hwnd, nItem, &lvFindInfo.pt);
- while ((nItem = ListView_FindItemW(hwnd, nItem, &lvFindInfo)) != -1)
+ ListView_GetItemPosition(infoPtr->hwndSelf, nItem, &lvFindInfo.pt);
+ while ((nItem = ListView_FindItemW(infoPtr->hwndSelf, nItem, &lvFindInfo)) != -1)
{
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6347,7 +6201,7 @@
while (nItem < GETITEMCOUNT(infoPtr))
{
nItem++;
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6355,10 +6209,10 @@
{
lvFindInfo.flags = LVFI_NEARESTXY;
lvFindInfo.vkDirection = VK_DOWN;
- ListView_GetItemPosition(hwnd, nItem, &lvFindInfo.pt);
- while ((nItem = ListView_FindItemW(hwnd, nItem, &lvFindInfo)) != -1)
+ ListView_GetItemPosition(infoPtr->hwndSelf, nItem, &lvFindInfo.pt);
+ while ((nItem = ListView_FindItemW(infoPtr->hwndSelf, nItem, &lvFindInfo)) != -1)
{
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6367,11 +6221,11 @@
{
if (uView == LVS_LIST)
{
- nCountPerColumn = LISTVIEW_GetCountPerColumn(hwnd);
+ nCountPerColumn = LISTVIEW_GetCountPerColumn(infoPtr);
while (nItem - nCountPerColumn >= 0)
{
nItem -= nCountPerColumn;
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6379,10 +6233,10 @@
{
lvFindInfo.flags = LVFI_NEARESTXY;
lvFindInfo.vkDirection = VK_LEFT;
- ListView_GetItemPosition(hwnd, nItem, &lvFindInfo.pt);
- while ((nItem = ListView_FindItemW(hwnd, nItem, &lvFindInfo)) != -1)
+ ListView_GetItemPosition(infoPtr->hwndSelf, nItem, &lvFindInfo.pt);
+ while ((nItem = ListView_FindItemW(infoPtr->hwndSelf, nItem, &lvFindInfo)) != -1)
{
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6391,11 +6245,11 @@
{
if (uView == LVS_LIST)
{
- nCountPerColumn = LISTVIEW_GetCountPerColumn(hwnd);
+ nCountPerColumn = LISTVIEW_GetCountPerColumn(infoPtr);
while (nItem + nCountPerColumn < GETITEMCOUNT(infoPtr))
{
nItem += nCountPerColumn;
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6403,10 +6257,10 @@
{
lvFindInfo.flags = LVFI_NEARESTXY;
lvFindInfo.vkDirection = VK_RIGHT;
- ListView_GetItemPosition(hwnd, nItem, &lvFindInfo.pt);
- while ((nItem = ListView_FindItemW(hwnd, nItem, &lvFindInfo)) != -1)
+ ListView_GetItemPosition(infoPtr->hwndSelf, nItem, &lvFindInfo.pt);
+ while ((nItem = ListView_FindItemW(infoPtr->hwndSelf, nItem, &lvFindInfo)) != -1)
{
- if ((ListView_GetItemState(hwnd, nItem, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, nItem, uMask) & uMask) == uMask)
return nItem;
}
}
@@ -6418,7 +6272,7 @@
/* search by index */
for (i = nItem; i < GETITEMCOUNT(infoPtr); i++)
{
- if ((ListView_GetItemState(hwnd, i, uMask) & uMask) == uMask)
+ if ((ListView_GetItemState(infoPtr->hwndSelf, i, uMask) & uMask) == uMask)
return i;
}
}
@@ -6441,13 +6295,13 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_GetOrigin(HWND hwnd, LPPOINT lpptOrigin)
+static LRESULT LISTVIEW_GetOrigin(LISTVIEW_INFO *infoPtr, LPPOINT lpptOrigin)
{
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
BOOL bResult = FALSE;
- TRACE("(hwnd=%x, lpptOrigin=%p)\n", hwnd, lpptOrigin);
+ TRACE("(lpptOrigin=%p)\n", lpptOrigin);
if ((uView == LVS_SMALLICON) || (uView == LVS_ICON))
{
@@ -6459,20 +6313,20 @@
if (lStyle & WS_HSCROLL)
{
scrollInfo.fMask = SIF_POS;
- if (GetScrollInfo(hwnd, SB_HORZ, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo) != FALSE)
lpptOrigin->x = -scrollInfo.nPos;
}
if (lStyle & WS_VSCROLL)
{
scrollInfo.fMask = SIF_POS;
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) != FALSE)
lpptOrigin->y = -scrollInfo.nPos;
}
bResult = TRUE;
- TRACE("(hwnd=%x, pt=(%ld,%ld))\n", hwnd, lpptOrigin->x, lpptOrigin->y);
+ TRACE("(pt=(%ld,%ld))\n", lpptOrigin->x, lpptOrigin->y);
}
@@ -6489,16 +6343,15 @@
* RETURN:
* Number of items selected.
*/
-static LRESULT LISTVIEW_GetSelectedCount(HWND hwnd)
+static LRESULT LISTVIEW_GetSelectedCount(LISTVIEW_INFO *infoPtr)
{
/* REDO THIS */
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nSelectedCount = 0;
INT i;
for (i = 0; i < GETITEMCOUNT(infoPtr); i++)
{
- if (ListView_GetItemState(hwnd, i, LVIS_SELECTED) & LVIS_SELECTED)
+ if (ListView_GetItemState(infoPtr->hwndSelf, i, LVIS_SELECTED) & LVIS_SELECTED)
nSelectedCount++;
}
@@ -6515,10 +6368,8 @@
* RETURN:
* Index number or -1 if there is no selection mark.
*/
-static LRESULT LISTVIEW_GetSelectionMark(HWND hwnd)
+static LRESULT LISTVIEW_GetSelectionMark(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
return infoPtr->nSelectionMark;
}
@@ -6536,13 +6387,12 @@
* SUCCESS : string width (in pixels)
* FAILURE : zero
*/
-static LRESULT LISTVIEW_GetStringWidthT(HWND hwnd, LPCWSTR lpszText, BOOL isW)
+static LRESULT LISTVIEW_GetStringWidthT(LISTVIEW_INFO *infoPtr, LPCWSTR lpszText, BOOL isW)
{
if (is_textT(lpszText, isW))
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
HFONT hFont = infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont;
- HDC hdc = GetDC(hwnd);
+ HDC hdc = GetDC(infoPtr->hwndSelf);
HFONT hOldFont = SelectObject(hdc, hFont);
SIZE stringSize;
ZeroMemory(&stringSize, sizeof(SIZE));
@@ -6551,7 +6401,7 @@
else
GetTextExtentPointA(hdc, (LPCSTR)lpszText, lstrlenA((LPCSTR)lpszText), &stringSize);
SelectObject(hdc, hOldFont);
- ReleaseDC(hwnd, hdc);
+ ReleaseDC(infoPtr->hwndSelf, hdc);
return stringSize.cx;
}
return 0;
@@ -6567,10 +6417,8 @@
* RETURN:
* COLORREF associated with the the background.
*/
-static LRESULT LISTVIEW_GetTextBkColor(HWND hwnd)
+static LRESULT LISTVIEW_GetTextBkColor(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
-
return infoPtr->clrTextBk;
}
@@ -6584,10 +6432,8 @@
* RETURN:
* COLORREF associated with the text.
*/
-static LRESULT LISTVIEW_GetTextColor(HWND hwnd)
+static LRESULT LISTVIEW_GetTextColor(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
-
return infoPtr->clrText;
}
@@ -6604,21 +6450,20 @@
* SUCCESS : item index of hit
* FAILURE : -1
*/
-static INT LISTVIEW_SuperHitTestItem(HWND hwnd, LPLV_INTHIT lpInt, BOOL subitem)
+static INT LISTVIEW_SuperHitTestItem(LISTVIEW_INFO *infoPtr, LPLV_INTHIT lpInt, BOOL subitem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
INT i,j,topindex,bottomindex;
RECT rcItem,rcSubItem;
DWORD xterm, yterm, dist;
- TRACE("(hwnd=%x, x=%ld, y=%ld)\n", hwnd, lpInt->ht.pt.x, lpInt->ht.pt.y);
+ TRACE("(x=%ld, y=%ld)\n", lpInt->ht.pt.x, lpInt->ht.pt.y);
- topindex = LISTVIEW_GetTopIndex(hwnd);
+ topindex = LISTVIEW_GetTopIndex(infoPtr);
if (uView == LVS_REPORT)
{
- bottomindex = topindex + LISTVIEW_GetCountPerColumn(hwnd) + 1;
+ bottomindex = topindex + LISTVIEW_GetCountPerColumn(infoPtr) + 1;
bottomindex = min(bottomindex,GETITEMCOUNT(infoPtr));
}
else
@@ -6632,13 +6477,13 @@
for (i = topindex; i < bottomindex; i++)
{
rcItem.left = LVIR_BOUNDS;
- if (LISTVIEW_GetItemRect(hwnd, i, &rcItem))
+ if (LISTVIEW_GetItemRect(infoPtr, i, &rcItem))
{
if (PtInRect(&rcItem, lpInt->ht.pt))
{
rcSubItem = rcItem;
rcItem.left = LVIR_ICON;
- if (LISTVIEW_GetItemRect(hwnd, i, &rcItem))
+ if (LISTVIEW_GetItemRect(infoPtr, i, &rcItem))
{
if (PtInRect(&rcItem, lpInt->ht.pt))
{
@@ -6649,7 +6494,7 @@
}
rcItem.left = LVIR_LABEL;
- if (LISTVIEW_GetItemRect(hwnd, i, &rcItem))
+ if (LISTVIEW_GetItemRect(infoPtr, i, &rcItem))
{
if (PtInRect(&rcItem, lpInt->ht.pt))
{
@@ -6669,7 +6514,7 @@
for (j = 0; j < infoPtr->nColumnCount; j++)
{
rcSubItem.left = rcSubItem.right;
- rcSubItem.right += LISTVIEW_GetColumnWidth(hwnd, j);
+ rcSubItem.right += LISTVIEW_GetColumnWidth(infoPtr, j);
if (PtInRect(&rcSubItem, lpInt->ht.pt))
{
lpInt->ht.iSubItem = j;
@@ -6717,16 +6562,16 @@
* SUCCESS : item index
* FAILURE : -1
*/
-static INT LISTVIEW_HitTestItem(HWND hwnd, LPLVHITTESTINFO lpHitTestInfo, BOOL subitem)
+static INT LISTVIEW_HitTestItem(LISTVIEW_INFO *infoPtr, LPLVHITTESTINFO lpHitTestInfo, BOOL subitem)
{
INT ret;
LV_INTHIT lv_inthit;
- TRACE("(hwnd=%x, x=%ld, y=%ld)\n", hwnd, lpHitTestInfo->pt.x,
+ TRACE("(x=%ld, y=%ld)\n", lpHitTestInfo->pt.x,
lpHitTestInfo->pt.y);
memcpy(&lv_inthit, lpHitTestInfo, sizeof(LVHITTESTINFO));
- ret = LISTVIEW_SuperHitTestItem(hwnd, &lv_inthit, subitem);
+ ret = LISTVIEW_SuperHitTestItem(infoPtr, &lv_inthit, subitem);
memcpy(lpHitTestInfo, &lv_inthit, sizeof(LVHITTESTINFO));
return ret;
}
@@ -6743,9 +6588,8 @@
* SUCCESS : item index
* FAILURE : -1
*/
-static LRESULT LISTVIEW_HitTest(HWND hwnd, LPLVHITTESTINFO lpHitTestInfo)
+static LRESULT LISTVIEW_HitTest(LISTVIEW_INFO *infoPtr, LPLVHITTESTINFO lpHitTestInfo)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nItem = -1;
lpHitTestInfo->flags = 0;
@@ -6765,7 +6609,7 @@
* an app might pass only a structure with space up to iItem!
* (MS Office 97 does that for instance in the file open dialog)
*/
- nItem = LISTVIEW_HitTestItem(hwnd, lpHitTestInfo, FALSE);
+ nItem = LISTVIEW_HitTestItem(infoPtr, lpHitTestInfo, FALSE);
}
return nItem;
@@ -6783,9 +6627,8 @@
* SUCCESS : item index
* FAILURE : -1
*/
-static LRESULT LISTVIEW_SubItemHitTest(HWND hwnd, LPLVHITTESTINFO lpHitTestInfo)
+static LRESULT LISTVIEW_SubItemHitTest(LISTVIEW_INFO *infoPtr, LPLVHITTESTINFO lpHitTestInfo)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nItem = -1;
lpHitTestInfo->flags = 0;
@@ -6800,7 +6643,7 @@
lpHitTestInfo->flags |= LVHT_BELOW;
if (lpHitTestInfo->flags == 0)
- nItem = LISTVIEW_HitTestItem(hwnd, lpHitTestInfo, TRUE);
+ nItem = LISTVIEW_HitTestItem(infoPtr, lpHitTestInfo, TRUE);
return nItem;
}
@@ -6818,14 +6661,13 @@
* SUCCESS : new column index
* FAILURE : -1
*/
-static LRESULT LISTVIEW_InsertColumnT(HWND hwnd, INT nColumn,
+static LRESULT LISTVIEW_InsertColumnT(LISTVIEW_INFO *infoPtr, INT nColumn,
LPLVCOLUMNW lpColumn, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nNewColumn = -1;
HDITEMW hdi;
- TRACE("(hwnd=%x, nColumn=%d, lpColumn=%p)\n",hwnd, nColumn, lpColumn);
+ TRACE("(nColumn=%d, lpColumn=%p)\n", nColumn, lpColumn);
if (lpColumn != NULL)
{
@@ -6898,7 +6740,7 @@
}
/* retrieve the layout of the header */
- GetClientRect(hwnd, &rcHeader);
+ GetClientRect(infoPtr->hwndSelf, &rcHeader);
/* GetWindowRect(infoPtr->hwndHeader, &rcHeader);*/
TRACE("start cxy=%d left=%d right=%d\n", hdi.cxy, rcHeader.left, rcHeader.right);
@@ -6933,10 +6775,10 @@
(WPARAM)nColumn, (LPARAM)&hdi);
/* Need to reset the item width when inserting a new column */
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
- LISTVIEW_UpdateScroll(hwnd);
- InvalidateRect(hwnd, NULL, FALSE);
+ LISTVIEW_UpdateScroll(infoPtr);
+ InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
}
return nNewColumn;
@@ -6981,18 +6823,17 @@
* SUCCESS : new item index
* FAILURE : -1
*/
-static LRESULT LISTVIEW_InsertItemT(HWND hwnd, LPLVITEMW lpLVItem, BOOL isW)
+static LRESULT LISTVIEW_InsertItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
INT nItem = -1;
HDPA hdpaSubItems;
INT nItemWidth = 0;
LISTVIEW_ITEM *lpItem = NULL;
- TRACE("(hwnd=%x, lpLVItem=%s, isW=%d)\n",
- hwnd, debuglvitem_t(lpLVItem, isW), isW);
+ TRACE("(lpLVItem=%s, isW=%d)\n",
+ debuglvitem_t(lpLVItem, isW), isW);
if (lStyle & LVS_OWNERDATA)
{
@@ -7009,7 +6850,7 @@
if ( (lpItem = (LISTVIEW_ITEM *)COMCTL32_Alloc(sizeof(LISTVIEW_ITEM))) )
{
ZeroMemory(lpItem, sizeof(LISTVIEW_ITEM));
- if (LISTVIEW_InitItemT(hwnd, lpItem, lpLVItem, isW))
+ if (LISTVIEW_InitItemT(infoPtr, lpItem, lpLVItem, isW))
{
/* insert item in listview control data structure */
if ( (hdpaSubItems = DPA_Create(8)) )
@@ -7024,7 +6865,7 @@
member. See comments for LISTVIEW_InsertCompare() for greater detail */
nItem = DPA_InsertPtr( infoPtr->hdpaItems,
GETITEMCOUNT( infoPtr ) + 1, hdpaSubItems );
- DPA_Sort( infoPtr->hdpaItems, LISTVIEW_InsertCompare, (LPARAM)hwnd );
+ DPA_Sort( infoPtr->hdpaItems, LISTVIEW_InsertCompare, (LPARAM)infoPtr->hwndSelf );
nItem = DPA_GetPtrIndex( infoPtr->hdpaItems, hdpaSubItems );
}
else
@@ -7036,27 +6877,27 @@
{
NMLISTVIEW nmlv;
- LISTVIEW_ShiftIndices(hwnd,nItem,1);
+ LISTVIEW_ShiftIndices(infoPtr,nItem,1);
/* manage item focus */
if (lpLVItem->mask & LVIF_STATE)
{
lpItem->state &= ~(LVIS_FOCUSED|LVIS_SELECTED);
if (lpLVItem->stateMask & LVIS_SELECTED)
- LISTVIEW_SetSelection(hwnd, nItem);
+ LISTVIEW_SetSelection(infoPtr, nItem);
else if (lpLVItem->stateMask & LVIS_FOCUSED)
- LISTVIEW_SetItemFocus(hwnd, nItem);
+ LISTVIEW_SetItemFocus(infoPtr, nItem);
}
/* send LVN_INSERTITEM notification */
ZeroMemory(&nmlv, sizeof(NMLISTVIEW));
nmlv.iItem = nItem;
nmlv.lParam = lpItem->lParam;
- listview_notify(hwnd, LVN_INSERTITEM, &nmlv);
+ listview_notify(infoPtr, LVN_INSERTITEM, &nmlv);
if ((uView == LVS_SMALLICON) || (uView == LVS_LIST))
{
- nItemWidth = LISTVIEW_CalculateWidth(hwnd, lpLVItem->iItem);
+ nItemWidth = LISTVIEW_CalculateWidth(infoPtr, lpLVItem->iItem);
if (nItemWidth > infoPtr->nItemWidth)
infoPtr->nItemWidth = nItemWidth;
}
@@ -7065,14 +6906,14 @@
if ((uView == LVS_SMALLICON) || (uView == LVS_ICON))
{
if (lStyle & LVS_ALIGNLEFT)
- LISTVIEW_AlignLeft(hwnd);
+ LISTVIEW_AlignLeft(infoPtr);
else
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
}
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
/* refresh client area */
- InvalidateRect(hwnd, NULL, FALSE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
}
}
}
@@ -7101,9 +6942,8 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_RedrawItems(HWND hwnd, INT nFirst, INT nLast)
+static LRESULT LISTVIEW_RedrawItems(LISTVIEW_INFO *infoPtr, INT nFirst, INT nLast)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
RECT rcItem;
INT i;
@@ -7117,8 +6957,8 @@
for (i = nFirst; i <= nLast; i++)
{
rcItem.left = LVIR_BOUNDS;
- LISTVIEW_GetItemRect(hwnd, i, &rcItem);
- InvalidateRect(hwnd, &rcItem, TRUE);
+ LISTVIEW_GetItemRect(infoPtr, i, &rcItem);
+ InvalidateRect(infoPtr->hwndSelf, &rcItem, TRUE);
}
}
}
@@ -7160,10 +7000,10 @@
* dy= see above
*
*/
-static LRESULT LISTVIEW_Scroll(HWND hwnd, INT dx, INT dy)
+static LRESULT LISTVIEW_Scroll(LISTVIEW_INFO *infoPtr, INT dx, INT dy)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
+ HWND hwnd = infoPtr->hwndSelf;
UINT uView = lStyle & LVS_TYPEMASK;
INT rows, mode, i;
@@ -7174,14 +7014,14 @@
{
mode = (dy>0) ? SB_INTERNAL_DOWN : SB_INTERNAL_UP;
for ( i=0; i<rows; i++)
- LISTVIEW_VScroll(hwnd, mode, 0, hwnd);
+ LISTVIEW_VScroll(infoPtr, mode, 0, hwnd);
}
if (dx != 0)
{
mode = (dx>0) ? SB_INTERNAL_RIGHT : SB_INTERNAL_LEFT;
for ( i=0; i<abs(dx); i++)
- LISTVIEW_HScroll(hwnd, mode, 0, hwnd);
+ LISTVIEW_HScroll(infoPtr, mode, 0, hwnd);
}
return TRUE;
}
@@ -7191,7 +7031,7 @@
mode = (dy>0) ? SB_INTERNAL_DOWN : SB_INTERNAL_UP;
for(i=0; i<abs(dy); i++)
- LISTVIEW_VScroll(hwnd, mode, 0, hwnd);
+ LISTVIEW_VScroll(infoPtr, mode, 0, hwnd);
return TRUE;
}
else if (uView == LVS_SMALLICON)
@@ -7200,7 +7040,7 @@
mode = (dy>0) ? SB_INTERNAL_DOWN : SB_INTERNAL_UP;
for(i=0; i<abs(dy); i++)
- LISTVIEW_VScroll(hwnd, mode, 0, hwnd);
+ LISTVIEW_VScroll(infoPtr, mode, 0, hwnd);
return TRUE;
}
else if (uView == LVS_LIST)
@@ -7208,7 +7048,7 @@
if (dy != 0) return FALSE;
if (dx == 0) return TRUE;
mode = (dx>0) ? SB_INTERNAL_RIGHT : SB_INTERNAL_LEFT;
- LISTVIEW_HScroll(hwnd, mode, 0, hwnd);
+ LISTVIEW_HScroll(infoPtr, mode, 0, hwnd);
return TRUE;
}
return FALSE;
@@ -7226,13 +7066,11 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetBkColor(HWND hwnd, COLORREF clrBk)
+static LRESULT LISTVIEW_SetBkColor(LISTVIEW_INFO *infoPtr, COLORREF clrBk)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
if(infoPtr->clrBk!=clrBk){
infoPtr->clrBk = clrBk;
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
return TRUE;
@@ -7253,10 +7091,8 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetCallbackMask(HWND hwnd, UINT uMask)
+static BOOL LISTVIEW_SetCallbackMask(LISTVIEW_INFO *infoPtr, UINT uMask)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
infoPtr->uCallbackMask = uMask;
return TRUE;
@@ -7277,10 +7113,9 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetColumnT(HWND hwnd, INT nColumn,
+static LRESULT LISTVIEW_SetColumnT(LISTVIEW_INFO *infoPtr, INT nColumn,
LPLVCOLUMNW lpColumn, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
HDITEMW hdi, hdiget;
@@ -7378,10 +7213,8 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetColumnOrderArray(HWND hwnd, INT iCount, LPINT lpiArray)
+static LRESULT LISTVIEW_SetColumnOrderArray(LISTVIEW_INFO *infoPtr, INT iCount, LPINT lpiArray)
{
- /* LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0); */
-
FIXME("iCount %d lpiArray %p\n", iCount, lpiArray);
if (!lpiArray)
@@ -7404,12 +7237,11 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetColumnWidth(HWND hwnd, INT iCol, INT cx)
+static LRESULT LISTVIEW_SetColumnWidth(LISTVIEW_INFO *infoPtr, INT iCol, INT cx)
{
- LISTVIEW_INFO *infoPtr;
HDITEMW hdi;
LRESULT lret;
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
HDC hdc;
HFONT header_font;
@@ -7423,10 +7255,6 @@
LVITEMW lvItem;
WCHAR szDispText[DISP_TEXT_SIZE];
- /* make sure we can get the listview info */
- if (!(infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0)))
- return (FALSE);
-
if (!infoPtr->hwndHeader) /* make sure we have a header */
return (FALSE);
@@ -7434,7 +7262,7 @@
if ((uView != LVS_REPORT) && (uView != LVS_LIST))
return (FALSE);
- TRACE("(hwnd=%x, iCol=%d, cx=%d\n", hwnd, iCol, cx);
+ TRACE("(iCol=%d, cx=%d\n", iCol, cx);
/* take care of invalid cx values */
if((uView == LVS_REPORT) && (cx < -2))
@@ -7445,7 +7273,7 @@
/* resize all columns if in LVS_LIST mode */
if(uView == LVS_LIST) {
infoPtr->nItemWidth = cx;
- InvalidateRect(hwnd, NULL, TRUE); /* force redraw of the listview */
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); /* force redraw of the listview */
return TRUE;
}
@@ -7458,7 +7286,7 @@
cx = 0;
for(item_index = 0; item_index < GETITEMCOUNT(infoPtr); item_index++)
{
- nLabelWidth = LISTVIEW_GetLabelWidth(hwnd, item_index);
+ nLabelWidth = LISTVIEW_GetLabelWidth(infoPtr, item_index);
cx = (nLabelWidth>cx)?nLabelWidth:cx;
}
if (infoPtr->himlSmall)
@@ -7476,8 +7304,8 @@
for(item_index = 0; item_index < GETITEMCOUNT(infoPtr); item_index++)
{
lvItem.iItem = item_index;
- LISTVIEW_GetItemT(hwnd, &lvItem, FALSE, TRUE);
- nLabelWidth = LISTVIEW_GetStringWidthT(hwnd, lvItem.pszText, TRUE);
+ LISTVIEW_GetItemT(infoPtr, &lvItem, FALSE, TRUE);
+ nLabelWidth = LISTVIEW_GetStringWidthT(infoPtr, lvItem.pszText, TRUE);
cx = (nLabelWidth>cx)?nLabelWidth:cx;
}
}
@@ -7523,13 +7351,13 @@
Header_GetItemW(infoPtr->hwndHeader, iCol, (LPARAM)(&hdi));
/* determine the width of the text in the header */
- hdc = GetDC(hwnd);
+ hdc = GetDC(infoPtr->hwndSelf);
old_font = SelectObject(hdc, header_font); /* select the font into hdc */
GetTextExtentPoint32W(hdc, text_buffer, lstrlenW(text_buffer), &size);
SelectObject(hdc, old_font); /* restore the old font */
- ReleaseDC(hwnd, hdc);
+ ReleaseDC(infoPtr->hwndSelf, hdc);
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.iSubItem = iCol;
@@ -7541,8 +7369,8 @@
for(item_index = 0; item_index < GETITEMCOUNT(infoPtr); item_index++)
{
lvItem.iItem = item_index;
- LISTVIEW_GetItemT(hwnd, &lvItem, FALSE, TRUE);
- nLabelWidth = LISTVIEW_GetStringWidthT(hwnd, lvItem.pszText, TRUE);
+ LISTVIEW_GetItemT(infoPtr, &lvItem, FALSE, TRUE);
+ nLabelWidth = LISTVIEW_GetStringWidthT(infoPtr, lvItem.pszText, TRUE);
nLabelWidth += TRAILING_PADDING;
/* While it is possible for subitems to have icons, even MS messes
up the positioning, so I suspect no applications actually use
@@ -7560,7 +7388,7 @@
hdi.cxy = cx;
lret = Header_SetItemW(infoPtr->hwndHeader, (WPARAM)iCol, (LPARAM)&hdi);
- InvalidateRect(hwnd, NULL, TRUE); /* force redraw of the listview */
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); /* force redraw of the listview */
return lret;
}
@@ -7578,9 +7406,8 @@
* SUCCESS : previous style
* FAILURE : 0
*/
-static LRESULT LISTVIEW_SetExtendedListViewStyle(HWND hwnd, DWORD dwMask, DWORD dwStyle)
+static LRESULT LISTVIEW_SetExtendedListViewStyle(LISTVIEW_INFO *infoPtr, DWORD dwMask, DWORD dwStyle)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
DWORD dwOldStyle = infoPtr->dwExStyle;
/* set new style */
@@ -7592,7 +7419,24 @@
return dwOldStyle;
}
-/* LISTVIEW_SetHotCursor */
+/***
+ * DESCRIPTION:
+ * Sets the new hot cursor used during hot tracking and hover selection.
+ *
+ * PARAMETER(S):
+ * [I] infoPtr : pointer to listview strucure (not NULL)
+ * [I} hCurosr : the new hot cursor handle
+ *
+ * RETURN:
+ * Returns the previous hot cursor
+ */
+static HCURSOR LISTVIEW_SetHotCursor(LISTVIEW_INFO *infoPtr, HCURSOR hCursor)
+{
+ HCURSOR oldCursor = infoPtr->hHotCursor;
+ infoPtr->hHotCursor = hCursor;
+ return oldCursor;
+}
+
/***
* DESCRIPTION:
@@ -7606,9 +7450,8 @@
* SUCCESS : previous hot item index
* FAILURE : -1 (no hot item)
*/
-static LRESULT LISTVIEW_SetHotItem(HWND hwnd, INT iIndex)
+static LRESULT LISTVIEW_SetHotItem(LISTVIEW_INFO *infoPtr, INT iIndex)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT iOldIndex = infoPtr->nHotItem;
/* set new style */
@@ -7617,6 +7460,7 @@
return iOldIndex;
}
+
/***
* DESCRIPTION:
* Sets the amount of time the cursor must hover over an item before it is selected.
@@ -7628,9 +7472,8 @@
* RETURN:
* Returns the previous hover time
*/
-static LRESULT LISTVIEW_SetHoverTime(HWND hwnd, DWORD dwHoverTime)
+static LRESULT LISTVIEW_SetHoverTime(LISTVIEW_INFO *infoPtr, DWORD dwHoverTime)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
DWORD oldHoverTime = infoPtr->dwHoverTime;
infoPtr->dwHoverTime = dwHoverTime;
@@ -7649,13 +7492,12 @@
* RETURN:
* MAKELONG(oldcx, oldcy)
*/
-static LRESULT LISTVIEW_SetIconSpacing(HWND hwnd, DWORD spacing)
+static LRESULT LISTVIEW_SetIconSpacing(LISTVIEW_INFO *infoPtr, DWORD spacing)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0);
INT cy = HIWORD(spacing);
INT cx = LOWORD(spacing);
DWORD oldspacing;
- LONG lStyle = GetWindowLongA(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongA(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
oldspacing = MAKELONG(infoPtr->iconSpacing.cx, infoPtr->iconSpacing.cy);
@@ -7675,7 +7517,7 @@
* icon or label, then make that the width
*/
else /* FIXME: unknown computation for non LVS_ICON - this is a guess */
- infoPtr->iconSpacing.cx = LISTVIEW_GetItemWidth(hwnd);
+ infoPtr->iconSpacing.cx = LISTVIEW_GetItemWidth(infoPtr);
}
if (cy)
infoPtr->iconSpacing.cy = cy;
@@ -7686,7 +7528,7 @@
+ ICON_BOTTOM_PADDING + ICON_TOP_PADDING + LABEL_VERT_OFFSET;
/* FIXME. I don't think so; I think it is based on twice the ntmHeight */
else /* FIXME: unknown computation for non LVS_ICON - this is a guess */
- infoPtr->iconSpacing.cy = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->iconSpacing.cy = LISTVIEW_GetItemHeight(infoPtr);
}
TRACE("old=(%d,%d), new=(%ld,%ld), iconSize=(%ld,%ld), ntmH=%d\n",
@@ -7696,8 +7538,8 @@
infoPtr->ntmHeight);
/* these depend on the iconSpacing */
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
return oldspacing;
}
@@ -7715,12 +7557,11 @@
* SUCCESS : old image list
* FAILURE : NULL
*/
-static HIMAGELIST LISTVIEW_SetImageList(HWND hwnd, INT nType, HIMAGELIST himl)
+static HIMAGELIST LISTVIEW_SetImageList(LISTVIEW_INFO *infoPtr, INT nType, HIMAGELIST himl)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
HIMAGELIST himlOld = 0;
INT oldHeight;
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
switch (nType)
{
@@ -7735,7 +7576,7 @@
infoPtr->iconSize.cx, infoPtr->iconSize.cy, cx, cy);
infoPtr->iconSize.cx = cx;
infoPtr->iconSize.cy = cy;
- LISTVIEW_SetIconSpacing(hwnd,0);
+ LISTVIEW_SetIconSpacing(infoPtr,0);
}
break;
@@ -7752,9 +7593,9 @@
}
oldHeight = infoPtr->nItemHeight;
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
if (infoPtr->nItemHeight != oldHeight)
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
return himlOld;
}
@@ -7772,13 +7613,11 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetItemCount(HWND hwnd, INT nItems, DWORD dwFlags)
+static BOOL LISTVIEW_SetItemCount(LISTVIEW_INFO *infoPtr, INT nItems, DWORD dwFlags)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
+ TRACE("(nItems=%d, dwFlags=%lx)\n", nItems, dwFlags);
- TRACE("(hwnd=%x, nItems=%d, dwFlags=%lx)\n", hwnd, nItems, dwFlags);
-
- if (GetWindowLongW(hwnd, GWL_STYLE) & LVS_OWNERDATA)
+ if (GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_OWNERDATA)
{
int precount,topvisible;
@@ -7797,25 +7636,25 @@
LISTVIEW_SELECTION *selection;
selection = DPA_GetPtr(infoPtr->hdpaSelectionRanges,0);
if (selection)
- LISTVIEW_RemoveSelectionRange(hwnd,selection->lower,
+ LISTVIEW_RemoveSelectionRange(infoPtr,selection->lower,
selection->upper);
}
while (infoPtr->hdpaSelectionRanges->nItemCount>0);
precount = infoPtr->hdpaItems->nItemCount;
- topvisible = ListView_GetTopIndex(hwnd) +
- LISTVIEW_GetCountPerColumn(hwnd) + 1;
+ topvisible = ListView_GetTopIndex(infoPtr->hwndSelf) +
+ LISTVIEW_GetCountPerColumn(infoPtr) + 1;
infoPtr->hdpaItems->nItemCount = nItems;
- infoPtr->nItemWidth = max(LISTVIEW_GetItemWidth(hwnd),
+ infoPtr->nItemWidth = max(LISTVIEW_GetItemWidth(infoPtr),
DEFAULT_COLUMN_WIDTH);
- LISTVIEW_UpdateSize(hwnd);
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateSize(infoPtr);
+ LISTVIEW_UpdateScroll(infoPtr);
if (min(precount,infoPtr->hdpaItems->nItemCount)<topvisible)
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
else
{
@@ -7845,17 +7684,16 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetItemPosition(HWND hwnd, INT nItem,
+static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem,
LONG nPosX, LONG nPosY)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
- UINT lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ UINT lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
LISTVIEW_ITEM *lpItem;
HDPA hdpaSubItems;
BOOL bResult = FALSE;
- TRACE("(hwnd=%x, nItem=%d, X=%ld, Y=%ld)\n", hwnd, nItem, nPosX, nPosY);
+ TRACE("(nItem=%d, X=%ld, Y=%ld)\n", nItem, nPosX, nPosY);
if (lStyle & LVS_OWNERDATA)
return FALSE;
@@ -7878,7 +7716,7 @@
* the true beginning of the list. I will assume the origin.
*/
POINT pt1;
- if (!LISTVIEW_GetOrigin(hwnd, &pt1))
+ if (!LISTVIEW_GetOrigin(infoPtr, &pt1))
{
pt1.x = 0;
pt1.y = 0;
@@ -7937,14 +7775,13 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetItemState(HWND hwnd, INT nItem, LPLVITEMW lpLVItem)
+static LRESULT LISTVIEW_SetItemState(LISTVIEW_INFO *infoPtr, INT nItem, LPLVITEMW lpLVItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult = TRUE;
LVITEMW lvItem;
- TRACE("(hwnd=%x, nItem=%d, lpLVItem=%s)\n",
- hwnd, nItem, debuglvitem_t(lpLVItem, TRUE));
+ TRACE("(nItem=%d, lpLVItem=%s)\n",
+ nItem, debuglvitem_t(lpLVItem, TRUE));
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.mask = LVIF_STATE;
@@ -7956,10 +7793,10 @@
{
/* apply to all items */
for (lvItem.iItem = 0; lvItem.iItem < GETITEMCOUNT(infoPtr); lvItem.iItem++)
- if (!LISTVIEW_SetItemT(hwnd, &lvItem, TRUE)) bResult = FALSE;
+ if (!LISTVIEW_SetItemT(infoPtr, &lvItem, TRUE)) bResult = FALSE;
}
else
- bResult = LISTVIEW_SetItemT(hwnd, &lvItem, TRUE);
+ bResult = LISTVIEW_SetItemT(infoPtr, &lvItem, TRUE);
return bResult;
}
@@ -7978,14 +7815,13 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static BOOL LISTVIEW_SetItemTextT(HWND hwnd, INT nItem, LPLVITEMW lpLVItem, BOOL isW)
+static BOOL LISTVIEW_SetItemTextT(LISTVIEW_INFO *infoPtr, INT nItem, LPLVITEMW lpLVItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult = FALSE;
LVITEMW lvItem;
- TRACE("(hwnd=%x, nItem=%d, lpLVItem=%s, isW=%d)\n",
- hwnd, nItem, debuglvitem_t(lpLVItem, isW), isW);
+ TRACE("(nItem=%d, lpLVItem=%s, isW=%d)\n",
+ nItem, debuglvitem_t(lpLVItem, isW), isW);
if ((nItem >= 0) && (nItem < GETITEMCOUNT(infoPtr)))
{
@@ -7994,8 +7830,8 @@
lvItem.pszText = lpLVItem->pszText;
lvItem.iItem = nItem;
lvItem.iSubItem = lpLVItem->iSubItem;
- if(isW) bResult = ListView_SetItemW(hwnd, &lvItem);
- else bResult = ListView_SetItemA(hwnd, &lvItem);
+ if(isW) bResult = ListView_SetItemW(infoPtr->hwndSelf, &lvItem);
+ else bResult = ListView_SetItemA(infoPtr->hwndSelf, &lvItem);
}
return bResult;
@@ -8012,12 +7848,11 @@
* RETURN:
* Index number or -1 if there is no selection mark.
*/
-static LRESULT LISTVIEW_SetSelectionMark(HWND hwnd, INT nIndex)
+static LRESULT LISTVIEW_SetSelectionMark(LISTVIEW_INFO *infoPtr, INT nIndex)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
INT nOldIndex = infoPtr->nSelectionMark;
- TRACE("(hwnd=%x, nIndex=%d)\n", hwnd, nIndex);
+ TRACE("(nIndex=%d)\n", nIndex);
infoPtr->nSelectionMark = nIndex;
@@ -8036,14 +7871,12 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetTextBkColor(HWND hwnd, COLORREF clrTextBk)
+static LRESULT LISTVIEW_SetTextBkColor(LISTVIEW_INFO *infoPtr, COLORREF clrTextBk)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x, clrTextBk=%lx)\n", hwnd, clrTextBk);
+ TRACE("(clrTextBk=%lx)\n", clrTextBk);
infoPtr->clrTextBk = clrTextBk;
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return TRUE;
}
@@ -8060,14 +7893,12 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SetTextColor (HWND hwnd, COLORREF clrText)
+static LRESULT LISTVIEW_SetTextColor (LISTVIEW_INFO *infoPtr, COLORREF clrText)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x, clrText=%lx)\n", hwnd, clrText);
+ TRACE("(clrText=%lx)\n", clrText);
infoPtr->clrText = clrText;
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return TRUE;
}
@@ -8091,7 +7922,7 @@
* if first and second are equivalent : zero
*/
static INT WINAPI LISTVIEW_CallBackCompare(LPVOID first, LPVOID second, LPARAM lParam)
-{
+{
LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW((HWND)lParam, 0);
LISTVIEW_ITEM* lv_first = (LISTVIEW_ITEM*) DPA_GetPtr( (HDPA)first, 0 );
LISTVIEW_ITEM* lv_second = (LISTVIEW_ITEM*) DPA_GetPtr( (HDPA)second, 0 );
@@ -8113,16 +7944,15 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_SortItems(HWND hwnd, PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
+static LRESULT LISTVIEW_SortItems(LISTVIEW_INFO *infoPtr, PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ UINT lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
HDPA hdpaSubItems=NULL;
LISTVIEW_ITEM *pLVItem=NULL;
LPVOID selectionMarkItem;
int nCount, i;
- TRACE("(hwnd=%x, pfnCompare=%p, lParamSort=%lx)\n", hwnd, pfnCompare, lParamSort);
+ TRACE("(pfnCompare=%p, lParamSort=%lx)\n", pfnCompare, lParamSort);
if (lStyle & LVS_OWNERDATA) return FALSE;
@@ -8135,7 +7965,7 @@
infoPtr->pfnCompare = pfnCompare;
infoPtr->lParamSort = lParamSort;
- DPA_Sort(infoPtr->hdpaItems, LISTVIEW_CallBackCompare, (LPARAM)hwnd);
+ DPA_Sort(infoPtr->hdpaItems, LISTVIEW_CallBackCompare, (LPARAM)infoPtr->hwndSelf);
/* Adjust selections and indices so that they are the way they should
* be after the sort (otherwise, the list items move around, but
@@ -8149,9 +7979,9 @@
pLVItem = (LISTVIEW_ITEM *)DPA_GetPtr(hdpaSubItems, 0);
if (pLVItem->state & LVIS_SELECTED)
- LISTVIEW_AddSelectionRange(hwnd, i, i);
+ LISTVIEW_AddSelectionRange(infoPtr, i, i);
else
- LISTVIEW_RemoveSelectionRange(hwnd, i, i);
+ LISTVIEW_RemoveSelectionRange(infoPtr, i, i);
if (pLVItem->state & LVIS_FOCUSED)
infoPtr->nFocusedItem=i;
}
@@ -8160,10 +7990,10 @@
/* I believe nHotItem should be left alone, see LISTVIEW_ShiftIndices */
/* align the items */
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
/* refresh the display */
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return TRUE;
}
@@ -8182,14 +8012,13 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_Update(HWND hwnd, INT nItem)
+static LRESULT LISTVIEW_Update(LISTVIEW_INFO *infoPtr, INT nItem)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
BOOL bResult = FALSE;
RECT rc;
- TRACE("(hwnd=%x, nItem=%d)\n", hwnd, nItem);
+ TRACE("(nItem=%d)\n", nItem);
if ((nItem >= 0) && (nItem < GETITEMCOUNT(infoPtr)))
{
@@ -8199,13 +8028,13 @@
if ((lStyle & LVS_AUTOARRANGE) && (((lStyle & LVS_TYPEMASK) == LVS_ICON) ||
((lStyle & LVS_TYPEMASK) == LVS_SMALLICON)))
{
- ListView_Arrange(hwnd, 0);
+ ListView_Arrange(infoPtr->hwndSelf, 0);
}
else
{
/* get item bounding rectangle */
- ListView_GetItemRect(hwnd, nItem, &rc, LVIR_BOUNDS);
- InvalidateRect(hwnd, &rc, TRUE);
+ ListView_GetItemRect(infoPtr->hwndSelf, nItem, &rc, LVIR_BOUNDS);
+ InvalidateRect(infoPtr->hwndSelf, &rc, TRUE);
}
}
@@ -8228,14 +8057,14 @@
UINT uView = lpcs->style & LVS_TYPEMASK;
LOGFONTW logFont;
- TRACE("(hwnd=%x, lpcs=%p)\n", hwnd, lpcs);
+ TRACE("(lpcs=%p)\n", lpcs);
/* initialize info pointer */
ZeroMemory(infoPtr, sizeof(LISTVIEW_INFO));
/* determine the type of structures to use */
- infoPtr->notifyFormat = SendMessageW(GetParent(hwnd), WM_NOTIFYFORMAT,
- (WPARAM)hwnd, (LPARAM)NF_QUERY);
+ infoPtr->notifyFormat = SendMessageW(GetParent(infoPtr->hwndSelf), WM_NOTIFYFORMAT,
+ (WPARAM)infoPtr->hwndSelf, (LPARAM)NF_QUERY);
/* initialize color information */
infoPtr->clrBk = comctl32_color.clrWindow;
@@ -8253,7 +8082,6 @@
ZeroMemory(&infoPtr->rcList, sizeof(RECT));
infoPtr->hwndEdit = 0;
infoPtr->Editing = FALSE;
- infoPtr->pedititem = NULL;
infoPtr->nEditLabelItem = -1;
infoPtr->bIsDrawing = FALSE;
@@ -8261,7 +8089,7 @@
SystemParametersInfoW(SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
infoPtr->hDefaultFont = CreateFontIndirectW(&logFont);
infoPtr->hFont = infoPtr->hDefaultFont;
- LISTVIEW_SaveTextMetrics(hwnd);
+ LISTVIEW_SaveTextMetrics(infoPtr);
/* create header */
infoPtr->hwndHeader = CreateWindowW(WC_HEADERW, (LPCWSTR)NULL,
@@ -8314,8 +8142,8 @@
infoPtr->hdpaSelectionRanges = DPA_Create(10);
/* initialize size of items */
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
/* initialize the hover time to -1(indicating the default system hover time) */
infoPtr->dwHoverTime = -1;
@@ -8336,23 +8164,22 @@
* SUCCESS : TRUE
* FAILURE : FALSE
*/
-static LRESULT LISTVIEW_EraseBackground(HWND hwnd, WPARAM wParam,
+static LRESULT LISTVIEW_EraseBackground(LISTVIEW_INFO *infoPtr, WPARAM wParam,
LPARAM lParam)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
BOOL bResult;
- TRACE("(hwnd=%x, wParam=%x, lParam=%lx)\n", hwnd, wParam, lParam);
+ TRACE("(wParam=%x, lParam=%lx)\n", wParam, lParam);
if (infoPtr->clrBk == CLR_NONE)
{
- bResult = SendMessageW(GetParent(hwnd), WM_ERASEBKGND, wParam, lParam);
+ bResult = SendMessageW(GetParent(infoPtr->hwndSelf), WM_ERASEBKGND, wParam, lParam);
}
else
{
RECT rc;
HBRUSH hBrush = CreateSolidBrush(infoPtr->clrBk);
- GetClientRect(hwnd, &rc);
+ GetClientRect(infoPtr->hwndSelf, &rc);
FillRect((HDC)wParam, &rc, hBrush);
DeleteObject(hBrush);
bResult = TRUE;
@@ -8362,11 +8189,9 @@
}
-static void LISTVIEW_FillBackground(HWND hwnd, HDC hdc, LPRECT rc)
+static void LISTVIEW_FillBackground(LISTVIEW_INFO *infoPtr, HDC hdc, LPRECT rc)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x, hdc=%x, rc=%p)\n", hwnd, hdc, rc);
+ TRACE("(hdc=%x, rc=%p)\n", hdc, rc);
if (infoPtr->clrBk != CLR_NONE)
{
@@ -8386,11 +8211,9 @@
* RETURN:
* Font handle.
*/
-static LRESULT LISTVIEW_GetFont(HWND hwnd)
+static LRESULT LISTVIEW_GetFont(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x)\n", hwnd);
+ TRACE("()\n");
return infoPtr->hFont;
}
@@ -8416,16 +8239,15 @@
* for LVS_LIST cannot occur ??? (implemented as LVS_REPORT)
*
*/
-static LRESULT LISTVIEW_VScroll(HWND hwnd, INT nScrollCode, SHORT nCurrentPos,
+static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *infoPtr, INT nScrollCode, SHORT nCurrentPos,
HWND hScrollWnd)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
SCROLLINFO scrollInfo;
BOOL is_an_icon;
- TRACE("(hwnd=%x, nScrollCode=%d, nCurrentPos=%d, hScrollWnd=%x)\n",
- hwnd, nScrollCode, nCurrentPos, hScrollWnd);
+ TRACE("(nScrollCode=%d, nCurrentPos=%d, hScrollWnd=%x)\n",
+ nScrollCode, nCurrentPos, hScrollWnd);
SendMessageW(infoPtr->hwndEdit, WM_KILLFOCUS, 0, 0);
@@ -8435,7 +8257,7 @@
is_an_icon = ((uView == LVS_ICON) || (uView == LVS_SMALLICON));
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) != FALSE)
{
INT nOldScrollPos = scrollInfo.nPos;
switch (nScrollCode)
@@ -8497,13 +8319,13 @@
if (nOldScrollPos != scrollInfo.nPos)
{
scrollInfo.fMask = SIF_POS;
- SetScrollInfo(hwnd, SB_VERT, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo, TRUE);
/* Get real position value, the value we set might have been changed
* by SetScrollInfo (especially if we went too far.
*/
scrollInfo.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_VERT, &scrollInfo);
+ GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo);
/* only if the scroll position really changed, do we update screen */
if (nOldScrollPos != scrollInfo.nPos)
@@ -8511,14 +8333,14 @@
if (IsWindowVisible(infoPtr->hwndHeader))
{
RECT rListview, rcHeader, rDest;
- GetClientRect(hwnd, &rListview);
+ GetClientRect(infoPtr->hwndSelf, &rListview);
GetWindowRect(infoPtr->hwndHeader, &rcHeader);
- MapWindowPoints((HWND) NULL, hwnd, (LPPOINT) &rcHeader, 2);
+ MapWindowPoints((HWND) NULL, infoPtr->hwndSelf, (LPPOINT) &rcHeader, 2);
SubtractRect(&rDest, &rListview, &rcHeader);
- InvalidateRect(hwnd, &rDest, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, &rDest, TRUE);
}
else
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
}
}
@@ -8548,16 +8370,15 @@
* scroll is based on columns not pixels
*
*/
-static LRESULT LISTVIEW_HScroll(HWND hwnd, INT nScrollCode, SHORT nCurrentPos,
+static LRESULT LISTVIEW_HScroll(LISTVIEW_INFO *infoPtr, INT nScrollCode, SHORT nCurrentPos,
HWND hScrollWnd)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
SCROLLINFO scrollInfo;
BOOL is_a_list;
- TRACE("(hwnd=%x, nScrollCode=%d, nCurrentPos=%d, hScrollWnd=%x)\n",
- hwnd, nScrollCode, nCurrentPos, hScrollWnd);
+ TRACE("(nScrollCode=%d, nCurrentPos=%d, hScrollWnd=%x)\n",
+ nScrollCode, nCurrentPos, hScrollWnd);
SendMessageW(infoPtr->hwndEdit, WM_KILLFOCUS, 0, 0);
@@ -8567,7 +8388,7 @@
is_a_list = (uView == LVS_LIST);
- if (GetScrollInfo(hwnd, SB_HORZ, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo) != FALSE)
{
INT nOldScrollPos = scrollInfo.nPos;
@@ -8627,37 +8448,37 @@
if (nOldScrollPos != scrollInfo.nPos)
{
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
scrollInfo.fMask = SIF_POS;
- SetScrollInfo(hwnd, SB_HORZ, &scrollInfo, TRUE);
+ SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo, TRUE);
/* Get real position value, the value we set might have been changed
* by SetScrollInfo (especially if we went too far.
*/
scrollInfo.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_HORZ, &scrollInfo);
+ GetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &scrollInfo);
if(uView == LVS_REPORT)
{
- LISTVIEW_UpdateHeaderSize(hwnd, scrollInfo.nPos);
+ LISTVIEW_UpdateHeaderSize(infoPtr, scrollInfo.nPos);
}
/* only if the scroll position really changed, do we update screen */
if (nOldScrollPos != scrollInfo.nPos)
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
}
return 0;
}
-static LRESULT LISTVIEW_MouseWheel(HWND hwnd, INT wheelDelta)
+static LRESULT LISTVIEW_MouseWheel(LISTVIEW_INFO *infoPtr, INT wheelDelta)
{
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT gcWheelDelta = 0;
UINT pulScrollLines = 3;
SCROLLINFO scrollInfo;
- TRACE("(hwnd=%x, wheelDelta=%d)\n", hwnd, wheelDelta);
+ TRACE("(wheelDelta=%d)\n", wheelDelta);
SystemParametersInfoW(SPI_GETWHEELSCROLLLINES,0, &pulScrollLines, 0);
gcWheelDelta -= wheelDelta;
@@ -8674,8 +8495,8 @@
* listview should be scrolled by a multiple of 37 dependently on its dimension or its visible item number
* should be fixed in the future.
*/
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) != FALSE)
- LISTVIEW_VScroll(hwnd, SB_THUMBPOSITION,
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) != FALSE)
+ LISTVIEW_VScroll(infoPtr, SB_THUMBPOSITION,
scrollInfo.nPos + (gcWheelDelta < 0) ?
LISTVIEW_SCROLL_ICON_LINE_SIZE :
-LISTVIEW_SCROLL_ICON_LINE_SIZE, 0);
@@ -8684,17 +8505,17 @@
case LVS_REPORT:
if (abs(gcWheelDelta) >= WHEEL_DELTA && pulScrollLines)
{
- if (GetScrollInfo(hwnd, SB_VERT, &scrollInfo) != FALSE)
+ if (GetScrollInfo(infoPtr->hwndSelf, SB_VERT, &scrollInfo) != FALSE)
{
- int cLineScroll = min(LISTVIEW_GetCountPerColumn(hwnd), pulScrollLines);
+ int cLineScroll = min(LISTVIEW_GetCountPerColumn(infoPtr), pulScrollLines);
cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
- LISTVIEW_VScroll(hwnd, SB_THUMBPOSITION, scrollInfo.nPos + cLineScroll, 0);
+ LISTVIEW_VScroll(infoPtr, SB_THUMBPOSITION, scrollInfo.nPos + cLineScroll, 0);
}
}
break;
case LVS_LIST:
- LISTVIEW_HScroll(hwnd, (gcWheelDelta < 0) ? SB_LINELEFT : SB_LINERIGHT, 0, 0);
+ LISTVIEW_HScroll(infoPtr, (gcWheelDelta < 0) ? SB_LINELEFT : SB_LINERIGHT, 0, 0);
break;
}
return 0;
@@ -8712,27 +8533,26 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_KeyDown(HWND hwnd, INT nVirtualKey, LONG lKeyData)
+static LRESULT LISTVIEW_KeyDown(LISTVIEW_INFO *infoPtr, INT nVirtualKey, LONG lKeyData)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT nItem = -1;
NMLVKEYDOWN nmKeyDown;
- TRACE("(hwnd=%x, nVirtualKey=%d, lKeyData=%ld)\n", hwnd, nVirtualKey, lKeyData);
+ TRACE("(nVirtualKey=%d, lKeyData=%ld)\n", nVirtualKey, lKeyData);
/* send LVN_KEYDOWN notification */
nmKeyDown.wVKey = nVirtualKey;
nmKeyDown.flags = 0;
- notify(hwnd, LVN_KEYDOWN, &nmKeyDown.hdr);
+ notify(infoPtr, LVN_KEYDOWN, &nmKeyDown.hdr);
switch (nVirtualKey)
{
case VK_RETURN:
if ((GETITEMCOUNT(infoPtr) > 0) && (infoPtr->nFocusedItem != -1))
{
- hdr_notify(hwnd, NM_RETURN); /* NM_RETURN notification */
- hdr_notify(hwnd, LVN_ITEMACTIVATE); /* LVN_ITEMACTIVATE notification */
+ hdr_notify(infoPtr, NM_RETURN); /* NM_RETURN notification */
+ hdr_notify(infoPtr, LVN_ITEMACTIVATE); /* LVN_ITEMACTIVATE notification */
}
break;
@@ -8747,44 +8567,44 @@
break;
case VK_LEFT:
- nItem = ListView_GetNextItem(hwnd, infoPtr->nFocusedItem, LVNI_TOLEFT);
+ nItem = ListView_GetNextItem(infoPtr->hwndSelf, infoPtr->nFocusedItem, LVNI_TOLEFT);
break;
case VK_UP:
- nItem = ListView_GetNextItem(hwnd, infoPtr->nFocusedItem, LVNI_ABOVE);
+ nItem = ListView_GetNextItem(infoPtr->hwndSelf, infoPtr->nFocusedItem, LVNI_ABOVE);
break;
case VK_RIGHT:
- nItem = ListView_GetNextItem(hwnd, infoPtr->nFocusedItem, LVNI_TORIGHT);
+ nItem = ListView_GetNextItem(infoPtr->hwndSelf, infoPtr->nFocusedItem, LVNI_TORIGHT);
break;
case VK_DOWN:
- nItem = ListView_GetNextItem(hwnd, infoPtr->nFocusedItem, LVNI_BELOW);
+ nItem = ListView_GetNextItem(infoPtr->hwndSelf, infoPtr->nFocusedItem, LVNI_BELOW);
break;
case VK_PRIOR:
if (uView == LVS_REPORT)
- nItem = infoPtr->nFocusedItem - LISTVIEW_GetCountPerColumn(hwnd);
+ nItem = infoPtr->nFocusedItem - LISTVIEW_GetCountPerColumn(infoPtr);
else
- nItem = infoPtr->nFocusedItem - LISTVIEW_GetCountPerColumn(hwnd)
- * LISTVIEW_GetCountPerRow(hwnd);
+ nItem = infoPtr->nFocusedItem - LISTVIEW_GetCountPerColumn(infoPtr)
+ * LISTVIEW_GetCountPerRow(infoPtr);
if(nItem < 0) nItem = 0;
break;
case VK_NEXT:
if (uView == LVS_REPORT)
- nItem = infoPtr->nFocusedItem + LISTVIEW_GetCountPerColumn(hwnd);
+ nItem = infoPtr->nFocusedItem + LISTVIEW_GetCountPerColumn(infoPtr);
else
- nItem = infoPtr->nFocusedItem + LISTVIEW_GetCountPerColumn(hwnd)
- * LISTVIEW_GetCountPerRow(hwnd);
+ nItem = infoPtr->nFocusedItem + LISTVIEW_GetCountPerColumn(infoPtr)
+ * LISTVIEW_GetCountPerRow(infoPtr);
if(nItem >= GETITEMCOUNT(infoPtr)) nItem = GETITEMCOUNT(infoPtr) - 1;
break;
}
if ((nItem != -1) && (nItem != infoPtr->nFocusedItem))
{
- if (LISTVIEW_KeySelection(hwnd, nItem))
- UpdateWindow(hwnd); /* update client area */
+ if (LISTVIEW_KeySelection(infoPtr, nItem))
+ UpdateWindow(infoPtr->hwndSelf); /* update client area */
}
return 0;
@@ -8800,16 +8620,15 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_KillFocus(HWND hwnd)
+static LRESULT LISTVIEW_KillFocus(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
INT i,nTop,nBottom;
- TRACE("(hwnd=%x)\n", hwnd);
+ TRACE("()\n");
/* send NM_KILLFOCUS notification */
- hdr_notify(hwnd, NM_KILLFOCUS);
+ hdr_notify(infoPtr, NM_KILLFOCUS);
/* set window focus flag */
infoPtr->bFocus = FALSE;
@@ -8817,9 +8636,9 @@
/* NEED drawing optimization ; redraw the selected items */
if (uView & LVS_REPORT)
{
- nTop = LISTVIEW_GetTopIndex(hwnd);
+ nTop = LISTVIEW_GetTopIndex(infoPtr);
nBottom = nTop +
- LISTVIEW_GetCountPerColumn(hwnd) + 1;
+ LISTVIEW_GetCountPerColumn(infoPtr) + 1;
}
else
{
@@ -8828,12 +8647,12 @@
}
for (i = nTop; i<nBottom; i++)
{
- if (LISTVIEW_IsSelected(hwnd,i))
+ if (LISTVIEW_IsSelected(infoPtr,i))
{
RECT rcItem;
rcItem.left = LVIR_BOUNDS;
- LISTVIEW_GetItemRect(hwnd, i, &rcItem);
- InvalidateRect(hwnd, &rcItem, FALSE);
+ LISTVIEW_GetItemRect(infoPtr, i, &rcItem);
+ InvalidateRect(infoPtr->hwndSelf, &rcItem, FALSE);
}
}
@@ -8846,27 +8665,25 @@
*
* PARAMETER(S):
* [I] HWND : window handle
- * [I] WORD : key flag
- * [I] WORD : x coordinate
- * [I] WORD : y coordinate
+ * [I] wKey : key flag
+ * [I] pts : mouse coordinate
*
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_LButtonDblClk(HWND hwnd, WORD wKey, WORD wPosX,
- WORD wPosY)
+static LRESULT LISTVIEW_LButtonDblClk(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pts)
{
LVHITTESTINFO htInfo;
NMLISTVIEW nmlv;
- TRACE("(hwnd=%x, key=%hu, X=%hu, Y=%hu)\n", hwnd, wKey, wPosX, wPosY);
+ TRACE("(key=%hu, X=%hu, Y=%hu)\n", wKey, pts.x, pts.y);
- htInfo.pt.x = wPosX;
- htInfo.pt.y = wPosY;
+ htInfo.pt.x = pts.x;
+ htInfo.pt.y = pts.y;
/* send NM_DBLCLK notification */
ZeroMemory(&nmlv, sizeof(NMLISTVIEW));
- if (LISTVIEW_HitTestItem(hwnd, &htInfo, TRUE) != -1)
+ if (LISTVIEW_HitTestItem(infoPtr, &htInfo, TRUE) != -1)
{
nmlv.iItem = htInfo.iItem;
nmlv.iSubItem = htInfo.iSubItem;
@@ -8876,14 +8693,14 @@
nmlv.iItem = -1;
nmlv.iSubItem = 0;
}
- nmlv.ptAction.x = wPosX;
- nmlv.ptAction.y = wPosY;
- listview_notify(hwnd, NM_DBLCLK, &nmlv);
+ nmlv.ptAction.x = pts.x;
+ nmlv.ptAction.y = pts.y;
+ listview_notify(infoPtr, NM_DBLCLK, &nmlv);
/* To send the LVN_ITEMACTIVATE, it must be on an Item */
if(nmlv.iItem != -1)
- hdr_notify(hwnd, LVN_ITEMACTIVATE);
+ hdr_notify(infoPtr, LVN_ITEMACTIVATE);
return 0;
}
@@ -8894,70 +8711,65 @@
*
* PARAMETER(S):
* [I] HWND : window handle
- * [I] WORD : key flag
- * [I] WORD : x coordinate
- * [I] WORD : y coordinate
+ * [I] wKey : key flag
+ * [I] pts : mouse coordinate
*
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_LButtonDown(HWND hwnd, WORD wKey, WORD wPosX,
- WORD wPosY)
+static LRESULT LISTVIEW_LButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pts)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
static BOOL bGroupSelect = TRUE;
- POINT ptPosition;
+ POINT pt = { pts.x, pts.y };
INT nItem;
- TRACE("(hwnd=%x, key=%hu, X=%hu, Y=%hu)\n", hwnd, wKey, wPosX, wPosY);
+ TRACE("(key=%hu, X=%hu, Y=%hu)\n", wKey, pts.x, pts.y);
/* send NM_RELEASEDCAPTURE notification */
- hdr_notify(hwnd, NM_RELEASEDCAPTURE);
+ hdr_notify(infoPtr, NM_RELEASEDCAPTURE);
if (infoPtr->bFocus == FALSE)
- SetFocus(hwnd);
+ SetFocus(infoPtr->hwndSelf);
/* set left button down flag */
infoPtr->bLButtonDown = TRUE;
- ptPosition.x = wPosX;
- ptPosition.y = wPosY;
- nItem = LISTVIEW_MouseSelection(hwnd, ptPosition);
+ nItem = LISTVIEW_MouseSelection(infoPtr, pt);
if ((nItem >= 0) && (nItem < GETITEMCOUNT(infoPtr)))
{
if (lStyle & LVS_SINGLESEL)
{
- if ((LISTVIEW_GetItemState(hwnd, nItem, LVIS_SELECTED) & LVIS_SELECTED)
+ if ((LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED) & LVIS_SELECTED)
&& infoPtr->nEditLabelItem == -1)
infoPtr->nEditLabelItem = nItem;
else
- LISTVIEW_SetSelection(hwnd, nItem);
+ LISTVIEW_SetSelection(infoPtr, nItem);
}
else
{
if ((wKey & MK_CONTROL) && (wKey & MK_SHIFT))
{
if (bGroupSelect)
- LISTVIEW_AddGroupSelection(hwnd, nItem);
+ LISTVIEW_AddGroupSelection(infoPtr, nItem);
else
- LISTVIEW_AddSelection(hwnd, nItem);
+ LISTVIEW_AddSelection(infoPtr, nItem);
}
else if (wKey & MK_CONTROL)
{
- bGroupSelect = LISTVIEW_ToggleSelection(hwnd, nItem);
+ bGroupSelect = LISTVIEW_ToggleSelection(infoPtr, nItem);
}
else if (wKey & MK_SHIFT)
{
- LISTVIEW_SetGroupSelection(hwnd, nItem);
+ LISTVIEW_SetGroupSelection(infoPtr, nItem);
}
else
{
BOOL was_selected =
- (LISTVIEW_GetItemState(hwnd, nItem, LVIS_SELECTED) & LVIS_SELECTED);
+ (LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED) & LVIS_SELECTED);
/* set selection (clears other pre-existing selections) */
- LISTVIEW_SetSelection(hwnd, nItem);
+ LISTVIEW_SetSelection(infoPtr, nItem);
if (was_selected && infoPtr->nEditLabelItem == -1)
infoPtr->nEditLabelItem = nItem;
@@ -8967,11 +8779,11 @@
else
{
/* remove all selections */
- LISTVIEW_RemoveAllSelections(hwnd);
+ LISTVIEW_RemoveAllSelections(infoPtr);
}
/* redraw if we could have possibly selected something */
- if(!GETITEMCOUNT(infoPtr)) InvalidateRect(hwnd, NULL, TRUE);
+ if(!GETITEMCOUNT(infoPtr)) InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return 0;
}
@@ -8982,31 +8794,27 @@
*
* PARAMETER(S):
* [I] HWND : window handle
- * [I] WORD : key flag
- * [I] WORD : x coordinate
- * [I] WORD : y coordinate
+ * [I] wKey : key flag
+ * [I] pts : mouse coordinate
*
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_LButtonUp(HWND hwnd, WORD wKey, WORD wPosX,
- WORD wPosY)
+static LRESULT LISTVIEW_LButtonUp(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pts)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x, key=%hu, X=%hu, Y=%hu)\n", hwnd, wKey, wPosX, wPosY);
+ TRACE("(key=%hu, X=%hu, Y=%hu)\n", wKey, pts.x, pts.y);
if (infoPtr->bLButtonDown != FALSE)
{
LVHITTESTINFO lvHitTestInfo;
NMLISTVIEW nmlv;
- lvHitTestInfo.pt.x = wPosX;
- lvHitTestInfo.pt.y = wPosY;
+ lvHitTestInfo.pt.x = pts.x;
+ lvHitTestInfo.pt.y = pts.y;
/* send NM_CLICK notification */
ZeroMemory(&nmlv, sizeof(NMLISTVIEW));
- if (LISTVIEW_HitTestItem(hwnd, &lvHitTestInfo, TRUE) != -1)
+ if (LISTVIEW_HitTestItem(infoPtr, &lvHitTestInfo, TRUE) != -1)
{
nmlv.iItem = lvHitTestInfo.iItem;
nmlv.iSubItem = lvHitTestInfo.iSubItem;
@@ -9016,17 +8824,18 @@
nmlv.iItem = -1;
nmlv.iSubItem = 0;
}
- nmlv.ptAction.x = wPosX;
- nmlv.ptAction.y = wPosY;
- listview_notify(hwnd, NM_CLICK, &nmlv);
+ nmlv.ptAction.x = pts.x;
+ nmlv.ptAction.y = pts.y;
+ listview_notify(infoPtr, NM_CLICK, &nmlv);
/* set left button flag */
infoPtr->bLButtonDown = FALSE;
-
+
if(infoPtr->nEditLabelItem != -1)
{
- if(lvHitTestInfo.iItem == infoPtr->nEditLabelItem && lvHitTestInfo.flags & LVHT_ONITEMLABEL)
- LISTVIEW_EditLabelT(hwnd, lvHitTestInfo.iItem, TRUE);
+ if(lvHitTestInfo.iItem == infoPtr->nEditLabelItem && lvHitTestInfo.flags & LVHT_ONITEMLABEL) {
+ LISTVIEW_EditLabelT(infoPtr, lvHitTestInfo.iItem, TRUE);
+ }
infoPtr->nEditLabelItem = -1;
}
}
@@ -9046,28 +8855,23 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_NCCreate(HWND hwnd, WPARAM wParam, LPARAM lParam)
+static BOOL LISTVIEW_NCCreate(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
LISTVIEW_INFO *infoPtr;
- TRACE("(hwnd=%x, wParam=%x, lParam=%lx)\n", hwnd, wParam, lParam);
+ TRACE("(wParam=%x, lParam=%lx)\n", wParam, lParam);
/* allocate memory for info structure */
infoPtr = (LISTVIEW_INFO *)COMCTL32_Alloc(sizeof(LISTVIEW_INFO));
if (infoPtr == NULL)
{
ERR("could not allocate info memory!\n");
- return 0;
- }
-
- SetWindowLongW(hwnd, 0, (LONG)infoPtr);
- if ((LISTVIEW_INFO *)GetWindowLongW(hwnd, 0) != infoPtr)
- {
- ERR("pointer assignment error!\n");
- return 0;
+ return FALSE;
}
+ infoPtr->hwndSelf = hwnd;
+ SetWindowLongW(infoPtr->hwndSelf, 0, (LONG)infoPtr);
- return DefWindowProcW(hwnd, WM_NCCREATE, wParam, lParam);
+ return (BOOL)DefWindowProcW(hwnd, WM_NCCREATE, wParam, lParam);
}
/***
@@ -9080,15 +8884,14 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_NCDestroy(HWND hwnd)
+static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
- TRACE("(hwnd=%x)\n", hwnd);
+ TRACE("()\n");
/* delete all items */
- LISTVIEW_DeleteAllItems(hwnd);
+ LISTVIEW_DeleteAllItems(infoPtr);
/* destroy data structure */
DPA_Destroy(infoPtr->hdpaItems);
@@ -9125,7 +8928,7 @@
/* free listview info pointer*/
COMCTL32_Free(infoPtr);
- SetWindowLongW(hwnd, 0, 0);
+ SetWindowLongW(infoPtr->hwndSelf, 0, 0);
return 0;
}
@@ -9141,19 +8944,17 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_Notify(HWND hwnd, INT nCtrlId, LPNMHDR lpnmh)
+static LRESULT LISTVIEW_Notify(LISTVIEW_INFO *infoPtr, INT nCtrlId, LPNMHDR lpnmh)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x, nCtrlId=%d, lpnmh=%p)\n", hwnd, nCtrlId, lpnmh);
+ TRACE("(nCtrlId=%d, lpnmh=%p)\n", nCtrlId, lpnmh);
if (lpnmh->hwndFrom == infoPtr->hwndHeader)
{
/* handle notification from header control */
if (lpnmh->code == HDN_ENDTRACKW)
{
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- InvalidateRect(hwnd, NULL, TRUE);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
else if(lpnmh->code == HDN_ITEMCLICKW || lpnmh->code == HDN_ITEMCLICKA)
{
@@ -9163,7 +8964,7 @@
ZeroMemory(&nmlv, sizeof(NMLISTVIEW));
nmlv.iItem = -1;
nmlv.iSubItem = ((LPNMHEADERW)lpnmh)->iItem;
- listview_notify(hwnd, LVN_COLUMNCLICK, &nmlv);
+ listview_notify(infoPtr, LVN_COLUMNCLICK, &nmlv);
}
else if(lpnmh->code == NM_RELEASEDCAPTURE)
{
@@ -9173,9 +8974,9 @@
* update of the scroll bar here (Header.c works fine as it is,
* no need to disturb it)
*/
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- LISTVIEW_UpdateScroll(hwnd);
- InvalidateRect(hwnd, NULL, TRUE);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ LISTVIEW_UpdateScroll(infoPtr);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
}
@@ -9195,15 +8996,13 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_NotifyFormat(HWND hwndFrom, HWND hwnd, INT nCommand)
+static LRESULT LISTVIEW_NotifyFormat(LISTVIEW_INFO *infoPtr, HWND hwndFrom, INT nCommand)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwndFrom=%x, hwnd=%x, nCommand=%d)\n", hwndFrom, hwnd, nCommand);
+ TRACE("(hwndFrom=%x, nCommand=%d)\n", hwndFrom, nCommand);
if (nCommand == NF_REQUERY)
infoPtr->notifyFormat = SendMessageW(hwndFrom, WM_NOTIFYFORMAT,
- (WPARAM)hwnd, (LPARAM)NF_QUERY);
+ (WPARAM)infoPtr->hwndSelf, (LPARAM)NF_QUERY);
return 0;
}
@@ -9218,21 +9017,21 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_Paint(HWND hwnd, HDC hdc)
+static LRESULT LISTVIEW_Paint(LISTVIEW_INFO *infoPtr, HDC hdc)
{
PAINTSTRUCT ps;
- TRACE("(hwnd=%x, hdc=%x)\n", hwnd, hdc);
+ TRACE("(hdc=%x)\n", hdc);
if (hdc == 0)
{
- hdc = BeginPaint(hwnd, &ps);
- LISTVIEW_Refresh(hwnd, hdc);
- EndPaint(hwnd, &ps);
+ hdc = BeginPaint(infoPtr->hwndSelf, &ps);
+ LISTVIEW_Refresh(infoPtr, hdc);
+ EndPaint(infoPtr->hwndSelf, &ps);
}
else
{
- LISTVIEW_Refresh(hwnd, hdc);
+ LISTVIEW_Refresh(infoPtr, hdc);
}
return 0;
@@ -9244,23 +9043,21 @@
*
* PARAMETER(S):
* [I] HWND : window handle
- * [I] WORD : key flag
- * [I] WORD : x coordinate
- * [I] WORD : y coordinate
+ * [I] wKey : key flag
+ * [I] pts : mouse coordinate
*
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_RButtonDblClk(HWND hwnd, WORD wKey, WORD wPosX,
- WORD wPosY)
+static LRESULT LISTVIEW_RButtonDblClk(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pts)
{
- TRACE("(hwnd=%x,key=%hu,X=%hu,Y=%hu)\n", hwnd, wKey, wPosX, wPosY);
+ TRACE("(key=%hu,X=%hu,Y=%hu)\n", wKey, pts.x, pts.y);
/* send NM_RELEASEDCAPTURE notification */
- hdr_notify(hwnd, NM_RELEASEDCAPTURE);
+ hdr_notify(infoPtr, NM_RELEASEDCAPTURE);
/* send NM_RDBLCLK notification */
- hdr_notify(hwnd, NM_RDBLCLK);
+ hdr_notify(infoPtr, NM_RDBLCLK);
return 0;
}
@@ -9271,56 +9068,51 @@
*
* PARAMETER(S):
* [I] HWND : window handle
- * [I] WORD : key flag
- * [I] WORD : x coordinate
- * [I] WORD : y coordinate
+ * [I] wKey : key flag
+ * [I] pts : mouse coordinate
*
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_RButtonDown(HWND hwnd, WORD wKey, WORD wPosX,
- WORD wPosY)
+static LRESULT LISTVIEW_RButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pts)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- POINT ptPosition;
INT nItem;
NMLISTVIEW nmlv;
LVHITTESTINFO lvHitTestInfo;
+ POINT pt = { pts.x, pts.y };
- TRACE("(hwnd=%x,key=%hu,X=%hu,Y=%hu)\n", hwnd, wKey, wPosX, wPosY);
+ TRACE("(key=%hu,X=%hu,Y=%hu)\n", wKey, pts.x, pts.y);
/* send NM_RELEASEDCAPTURE notification */
- hdr_notify(hwnd, NM_RELEASEDCAPTURE);
+ hdr_notify(infoPtr, NM_RELEASEDCAPTURE);
/* make sure the listview control window has the focus */
if (infoPtr->bFocus == FALSE)
- SetFocus(hwnd);
+ SetFocus(infoPtr->hwndSelf);
/* set right button down flag */
infoPtr->bRButtonDown = TRUE;
/* determine the index of the selected item */
- ptPosition.x = wPosX;
- ptPosition.y = wPosY;
- nItem = LISTVIEW_MouseSelection(hwnd, ptPosition);
+ nItem = LISTVIEW_MouseSelection(infoPtr, pt);
if ((nItem >= 0) && (nItem < GETITEMCOUNT(infoPtr)))
{
- LISTVIEW_SetItemFocus(hwnd,nItem);
+ LISTVIEW_SetItemFocus(infoPtr,nItem);
if (!((wKey & MK_SHIFT) || (wKey & MK_CONTROL)) &&
- !LISTVIEW_IsSelected(hwnd,nItem))
- LISTVIEW_SetSelection(hwnd, nItem);
+ !LISTVIEW_IsSelected(infoPtr,nItem))
+ LISTVIEW_SetSelection(infoPtr, nItem);
}
else
{
- LISTVIEW_RemoveAllSelections(hwnd);
+ LISTVIEW_RemoveAllSelections(infoPtr);
}
- lvHitTestInfo.pt.x = wPosX;
- lvHitTestInfo.pt.y = wPosY;
+ lvHitTestInfo.pt.x = pts.x;
+ lvHitTestInfo.pt.y = pts.y;
/* Send NM_RClICK notification */
ZeroMemory(&nmlv, sizeof(nmlv));
- if (LISTVIEW_HitTestItem(hwnd, &lvHitTestInfo, TRUE) != -1)
+ if (LISTVIEW_HitTestItem(infoPtr, &lvHitTestInfo, TRUE) != -1)
{
nmlv.iItem = lvHitTestInfo.iItem;
nmlv.iSubItem = lvHitTestInfo.iSubItem;
@@ -9330,9 +9122,9 @@
nmlv.iItem = -1;
nmlv.iSubItem = 0;
}
- nmlv.ptAction.x = wPosX;
- nmlv.ptAction.y = wPosY;
- listview_notify(hwnd, NM_RCLICK, &nmlv);
+ nmlv.ptAction.x = pts.x;
+ nmlv.ptAction.y = pts.y;
+ listview_notify(infoPtr, NM_RCLICK, &nmlv);
return 0;
}
@@ -9343,40 +9135,63 @@
*
* PARAMETER(S):
* [I] HWND : window handle
- * [I] WORD : key flag
- * [I] WORD : x coordinate
- * [I] WORD : y coordinate
+ * [I] wKey : key flag
+ * [I] pts : mouse coordinate
*
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_RButtonUp(HWND hwnd, WORD wKey, WORD wPosX,
- WORD wPosY)
+static LRESULT LISTVIEW_RButtonUp(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pts)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x,key=%hu,X=%hu,Y=%hu)\n", hwnd, wKey, wPosX, wPosY);
+ TRACE("(key=%hu,X=%hu,Y=%hu)\n", wKey, pts.x, pts.y);
if (infoPtr->bRButtonDown)
{
- POINT pt;
-
- pt.x = wPosX;
- pt.y = wPosY;
+ POINT pt = { pts.x, pts.y };
/* set button flag */
infoPtr->bRButtonDown = FALSE;
/* Change to screen coordinate for WM_CONTEXTMENU */
- ClientToScreen(hwnd, &pt);
+ ClientToScreen(infoPtr->hwndSelf, &pt);
/* Send a WM_CONTEXTMENU message in response to the RBUTTONUP */
- SendMessageW( hwnd, WM_CONTEXTMENU, (WPARAM) hwnd, MAKELPARAM(pt.x, pt.y));
+ SendMessageW(infoPtr->hwndSelf, WM_CONTEXTMENU,
+ (WPARAM)infoPtr->hwndSelf, MAKELPARAM(pt.x, pt.y));
}
return 0;
}
+
+/***
+ * DESCRIPTION:
+ * Sets the cursor.
+ *
+ * PARAMETER(S):
+ * [I] infoPtr : pointer to listview strucure (not NULL)
+ * [I] hwnd : window handle of window containing the cursor
+ * [I] nHittest : hit-test code
+ * [I] wMouseMsg : ideintifier of the mouse message
+ *
+ * RETURN:
+ * TRUE if cursor is set
+ * FALSE otherwise
+ */
+static BOOL LISTVIEW_SetCursor(LISTVIEW_INFO *infoPtr, HWND hwnd, UINT nHittest, UINT wMouseMsg)
+{
+ POINT pt;
+
+ if(!(infoPtr->dwExStyle & LVS_EX_TRACKSELECT)) return FALSE;
+
+ GetCursorPos(&pt);
+ if (LISTVIEW_MouseSelection(infoPtr, pt) < 0) return FALSE;
+
+ SetCursor(infoPtr->hHotCursor);
+
+ return TRUE;
+}
+
/***
* DESCRIPTION:
* Sets the focus.
@@ -9388,19 +9203,17 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_SetFocus(HWND hwnd, HWND hwndLoseFocus)
+static LRESULT LISTVIEW_SetFocus(LISTVIEW_INFO *infoPtr, HWND hwndLoseFocus)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
-
- TRACE("(hwnd=%x, hwndLoseFocus=%x)\n", hwnd, hwndLoseFocus);
+ TRACE("(hwndLoseFocus=%x)\n", hwndLoseFocus);
/* send NM_SETFOCUS notification */
- hdr_notify(hwnd, NM_SETFOCUS);
+ hdr_notify(infoPtr, NM_SETFOCUS);
/* set window focus flag */
infoPtr->bFocus = TRUE;
- UpdateWindow(hwnd);
+ UpdateWindow(infoPtr->hwndSelf);
return 0;
}
@@ -9417,15 +9230,14 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_SetFont(HWND hwnd, HFONT hFont, WORD fRedraw)
+static LRESULT LISTVIEW_SetFont(LISTVIEW_INFO *infoPtr, HFONT hFont, WORD fRedraw)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- UINT uView = GetWindowLongW(hwnd, GWL_STYLE) & LVS_TYPEMASK;
+ UINT uView = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & LVS_TYPEMASK;
- TRACE("(hwnd=%x,hfont=%x,redraw=%hu)\n", hwnd, hFont, fRedraw);
+ TRACE("(hfont=%x,redraw=%hu)\n", hFont, fRedraw);
infoPtr->hFont = hFont ? hFont : infoPtr->hDefaultFont;
- LISTVIEW_SaveTextMetrics(hwnd);
+ LISTVIEW_SaveTextMetrics(infoPtr);
if (uView == LVS_REPORT)
{
@@ -9435,10 +9247,10 @@
}
/* invalidate listview control client area */
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
if (fRedraw != FALSE)
- UpdateWindow(hwnd);
+ UpdateWindow(infoPtr->hwndSelf);
return 0;
}
@@ -9455,11 +9267,11 @@
* RETURN:
* DefWinProc return value
*/
-static LRESULT LISTVIEW_SetRedraw(HWND hwnd, BOOL bRedraw)
+static LRESULT LISTVIEW_SetRedraw(LISTVIEW_INFO *infoPtr, BOOL bRedraw)
{
- LRESULT lResult = DefWindowProcW(hwnd, WM_SETREDRAW, bRedraw, 0);
+ LRESULT lResult = DefWindowProcW(infoPtr->hwndSelf, WM_SETREDRAW, bRedraw, 0);
if(bRedraw)
- RedrawWindow(hwnd, NULL, 0,
+ RedrawWindow(infoPtr->hwndSelf, NULL, 0,
RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ALLCHILDREN | RDW_ERASENOW);
return lResult;
}
@@ -9477,27 +9289,27 @@
* RETURN:
* Zero
*/
-static LRESULT LISTVIEW_Size(HWND hwnd, int Width, int Height)
+static LRESULT LISTVIEW_Size(LISTVIEW_INFO *infoPtr, int Width, int Height)
{
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
- TRACE("(hwnd=%x, width=%d, height=%d)\n", hwnd, Width, Height);
+ TRACE("(width=%d, height=%d)\n", Width, Height);
- if (LISTVIEW_UpdateSize(hwnd))
+ if (LISTVIEW_UpdateSize(infoPtr))
{
if ((uView == LVS_SMALLICON) || (uView == LVS_ICON))
{
if (lStyle & LVS_ALIGNLEFT)
- LISTVIEW_AlignLeft(hwnd);
+ LISTVIEW_AlignLeft(infoPtr);
else
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
}
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
/* invalidate client area + erase background */
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
return 0;
@@ -9514,17 +9326,14 @@
* Zero if no size change
* 1 of size changed
*/
-static BOOL LISTVIEW_UpdateSize(HWND hwnd)
+static BOOL LISTVIEW_UpdateSize(LISTVIEW_INFO *infoPtr)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
- LONG lStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ LONG lStyle = GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE);
UINT uView = lStyle & LVS_TYPEMASK;
RECT rcList;
RECT rcOld;
- TRACE("(hwnd=%x)\n", hwnd);
-
- GetClientRect(hwnd, &rcList);
+ GetClientRect(infoPtr->hwndSelf, &rcList);
CopyRect(&rcOld,&(infoPtr->rcList));
infoPtr->rcList.left = 0;
infoPtr->rcList.right = max(rcList.right - rcList.left, 1);
@@ -9581,16 +9390,15 @@
* RETURN:
* Zero
*/
-static INT LISTVIEW_StyleChanged(HWND hwnd, WPARAM wStyleType,
+static INT LISTVIEW_StyleChanged(LISTVIEW_INFO *infoPtr, WPARAM wStyleType,
LPSTYLESTRUCT lpss)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
UINT uNewView = lpss->styleNew & LVS_TYPEMASK;
UINT uOldView = lpss->styleOld & LVS_TYPEMASK;
RECT rcList = infoPtr->rcList;
- TRACE("(hwnd=%x, styletype=%x, styleOld=0x%08lx, styleNew=0x%08lx)\n",
- hwnd, wStyleType, lpss->styleOld, lpss->styleNew);
+ TRACE("(styletype=%x, styleOld=0x%08lx, styleNew=0x%08lx)\n",
+ wStyleType, lpss->styleOld, lpss->styleNew);
if (wStyleType == GWL_STYLE)
{
@@ -9599,17 +9407,17 @@
if (((lpss->styleOld & WS_HSCROLL) != 0)&&
((lpss->styleNew & WS_HSCROLL) == 0))
- ShowScrollBar(hwnd, SB_HORZ, FALSE);
+ ShowScrollBar(infoPtr->hwndSelf, SB_HORZ, FALSE);
if (((lpss->styleOld & WS_VSCROLL) != 0)&&
((lpss->styleNew & WS_VSCROLL) == 0))
- ShowScrollBar(hwnd, SB_VERT, FALSE);
+ ShowScrollBar(infoPtr->hwndSelf, SB_VERT, FALSE);
/* If switching modes, then start with no scroll bars and then
* decide.
*/
if (uNewView != uOldView)
- ShowScrollBar(hwnd, SB_BOTH, FALSE);
+ ShowScrollBar(infoPtr->hwndSelf, SB_BOTH, FALSE);
if (uNewView == LVS_ICON)
{
@@ -9631,16 +9439,16 @@
{
TRACE("icon old size=(%d,%d), new size=(%ld,%ld)\n",
oldcx, oldcy, infoPtr->iconSize.cx, infoPtr->iconSize.cy);
- LISTVIEW_SetIconSpacing(hwnd,0);
+ LISTVIEW_SetIconSpacing(infoPtr,0);
}
/* Now update the full item width and height */
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
if (lpss->styleNew & LVS_ALIGNLEFT)
- LISTVIEW_AlignLeft(hwnd);
+ LISTVIEW_AlignLeft(infoPtr);
else
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
}
else if (uNewView == LVS_REPORT)
{
@@ -9650,43 +9458,43 @@
hl.prc = &rcList;
hl.pwpos = ℘
Header_Layout(infoPtr->hwndHeader, &hl);
- SetWindowPos(infoPtr->hwndHeader, hwnd, wp.x, wp.y, wp.cx, wp.cy,
+ SetWindowPos(infoPtr->hwndHeader, infoPtr->hwndSelf, wp.x, wp.y, wp.cx, wp.cy,
wp.flags);
if (!(LVS_NOCOLUMNHEADER & lpss->styleNew))
ShowWindow(infoPtr->hwndHeader, SW_SHOWNORMAL);
infoPtr->iconSize.cx = GetSystemMetrics(SM_CXSMICON);
infoPtr->iconSize.cy = GetSystemMetrics(SM_CYSMICON);
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
}
else if (uNewView == LVS_LIST)
{
infoPtr->iconSize.cx = GetSystemMetrics(SM_CXSMICON);
infoPtr->iconSize.cy = GetSystemMetrics(SM_CYSMICON);
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
}
else
{
infoPtr->iconSize.cx = GetSystemMetrics(SM_CXSMICON);
infoPtr->iconSize.cy = GetSystemMetrics(SM_CYSMICON);
- infoPtr->nItemWidth = LISTVIEW_GetItemWidth(hwnd);
- infoPtr->nItemHeight = LISTVIEW_GetItemHeight(hwnd);
+ infoPtr->nItemWidth = LISTVIEW_GetItemWidth(infoPtr);
+ infoPtr->nItemHeight = LISTVIEW_GetItemHeight(infoPtr);
if (lpss->styleNew & LVS_ALIGNLEFT)
- LISTVIEW_AlignLeft(hwnd);
+ LISTVIEW_AlignLeft(infoPtr);
else
- LISTVIEW_AlignTop(hwnd);
+ LISTVIEW_AlignTop(infoPtr);
}
/* update the size of the client area */
- LISTVIEW_UpdateSize(hwnd);
+ LISTVIEW_UpdateSize(infoPtr);
/* add scrollbars if needed */
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateScroll(infoPtr);
/* invalidate client area + erase background */
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
/* print the list of unsupported window styles */
LISTVIEW_UnsupportedStyles(lpss->styleNew);
@@ -9711,365 +9519,434 @@
* Window procedure of the listview control.
*
*/
-static LRESULT WINAPI LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
- LPARAM lParam)
+static LRESULT WINAPI
+LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- TRACE("(hwnd=%x uMsg=%x wParam=%x lParam=%lx)\n", hwnd, uMsg, wParam, lParam);
- if (!GetWindowLongW(hwnd, 0) && (uMsg != WM_NCCREATE))
- return DefWindowProcW( hwnd, uMsg, wParam, lParam );
+ LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
+
+ TRACE("( uMsg=%x wParam=%x lParam=%lx)\n", uMsg, wParam, lParam);
+
+ if (!infoPtr && (uMsg != WM_NCCREATE))
+ return DefWindowProcW(hwnd, uMsg, wParam, lParam);
+
switch (uMsg)
{
case LVM_APPROXIMATEVIEWRECT:
- return LISTVIEW_ApproximateViewRect(hwnd, (INT)wParam,
+ return LISTVIEW_ApproximateViewRect(infoPtr, (INT)wParam,
LOWORD(lParam), HIWORD(lParam));
case LVM_ARRANGE:
- return LISTVIEW_Arrange(hwnd, (INT)wParam);
+ return LISTVIEW_Arrange(infoPtr, (INT)wParam);
+/* case LVN_CANCELEDITLABEL */
+
/* case LVM_CREATEDRAGIMAGE: */
case LVM_DELETEALLITEMS:
- return LISTVIEW_DeleteAllItems(hwnd);
+ return LISTVIEW_DeleteAllItems(infoPtr);
case LVM_DELETECOLUMN:
- return LISTVIEW_DeleteColumn(hwnd, (INT)wParam);
+ return LISTVIEW_DeleteColumn(infoPtr, (INT)wParam);
case LVM_DELETEITEM:
- return LISTVIEW_DeleteItem(hwnd, (INT)wParam);
+ return LISTVIEW_DeleteItem(infoPtr, (INT)wParam);
case LVM_EDITLABELW:
- return (LRESULT)LISTVIEW_EditLabelT(hwnd, (INT)wParam, TRUE);
+ return (LRESULT)LISTVIEW_EditLabelT(infoPtr, (INT)wParam, TRUE);
case LVM_EDITLABELA:
- return (LRESULT)LISTVIEW_EditLabelT(hwnd, (INT)wParam, FALSE);
+ return (LRESULT)LISTVIEW_EditLabelT(infoPtr, (INT)wParam, FALSE);
+ /* case LVN_ENABLEGROUPVIEW: */
+
case LVM_ENSUREVISIBLE:
- return LISTVIEW_EnsureVisible(hwnd, (INT)wParam, (BOOL)lParam);
+ return LISTVIEW_EnsureVisible(infoPtr, (INT)wParam, (BOOL)lParam);
case LVM_FINDITEMW:
- return LISTVIEW_FindItemW(hwnd, (INT)wParam, (LPLVFINDINFOW)lParam);
+ return LISTVIEW_FindItemW(infoPtr, (INT)wParam, (LPLVFINDINFOW)lParam);
case LVM_FINDITEMA:
- return LISTVIEW_FindItemA(hwnd, (INT)wParam, (LPLVFINDINFOA)lParam);
+ return LISTVIEW_FindItemA(infoPtr, (INT)wParam, (LPLVFINDINFOA)lParam);
case LVM_GETBKCOLOR:
- return LISTVIEW_GetBkColor(hwnd);
+ return LISTVIEW_GetBkColor(infoPtr);
-/* case LVM_GETBKIMAGE: */
+ /* case LVM_GETBKIMAGE: */
case LVM_GETCALLBACKMASK:
- return LISTVIEW_GetCallbackMask(hwnd);
+ return LISTVIEW_GetCallbackMask(infoPtr);
case LVM_GETCOLUMNA:
- return LISTVIEW_GetColumnT(hwnd, (INT)wParam, (LPLVCOLUMNW)lParam, FALSE);
+ return LISTVIEW_GetColumnT(infoPtr, (INT)wParam, (LPLVCOLUMNW)lParam, FALSE);
case LVM_GETCOLUMNW:
- return LISTVIEW_GetColumnT(hwnd, (INT)wParam, (LPLVCOLUMNW)lParam, TRUE);
+ return LISTVIEW_GetColumnT(infoPtr, (INT)wParam, (LPLVCOLUMNW)lParam, TRUE);
case LVM_GETCOLUMNORDERARRAY:
- return LISTVIEW_GetColumnOrderArray(hwnd, (INT)wParam, (LPINT)lParam);
+ return LISTVIEW_GetColumnOrderArray(infoPtr, (INT)wParam, (LPINT)lParam);
case LVM_GETCOLUMNWIDTH:
- return LISTVIEW_GetColumnWidth(hwnd, (INT)wParam);
+ return LISTVIEW_GetColumnWidth(infoPtr, (INT)wParam);
case LVM_GETCOUNTPERPAGE:
- return LISTVIEW_GetCountPerPage(hwnd);
+ return LISTVIEW_GetCountPerPage(infoPtr);
case LVM_GETEDITCONTROL:
- return LISTVIEW_GetEditControl(hwnd);
+ return LISTVIEW_GetEditControl(infoPtr);
case LVM_GETEXTENDEDLISTVIEWSTYLE:
- return LISTVIEW_GetExtendedListViewStyle(hwnd);
+ return LISTVIEW_GetExtendedListViewStyle(infoPtr);
case LVM_GETHEADER:
- return LISTVIEW_GetHeader(hwnd);
+ return LISTVIEW_GetHeader(infoPtr);
case LVM_GETHOTCURSOR:
- FIXME("LVM_GETHOTCURSOR: unimplemented\n");
- return FALSE;
+ return infoPtr->hHotCursor;
case LVM_GETHOTITEM:
- return LISTVIEW_GetHotItem(hwnd);
+ return LISTVIEW_GetHotItem(infoPtr);
case LVM_GETHOVERTIME:
- return LISTVIEW_GetHoverTime(hwnd);
+ return LISTVIEW_GetHoverTime(infoPtr);
case LVM_GETIMAGELIST:
- return LISTVIEW_GetImageList(hwnd, (INT)wParam);
+ return LISTVIEW_GetImageList(infoPtr, (INT)wParam);
+ /* case LVN_GETINSERTMARK: */
+
+ /* case LVN_GETINSERTMARKCOLOR: */
+
+ /* case LVN_GETINSERTMARKRECT: */
+
case LVM_GETISEARCHSTRINGA:
case LVM_GETISEARCHSTRINGW:
FIXME("LVM_GETISEARCHSTRING: unimplemented\n");
return FALSE;
case LVM_GETITEMA:
- return LISTVIEW_GetItemT(hwnd, (LPLVITEMW)lParam, FALSE, FALSE);
+ return LISTVIEW_GetItemT(infoPtr, (LPLVITEMW)lParam, FALSE, FALSE);
case LVM_GETITEMW:
- return LISTVIEW_GetItemT(hwnd, (LPLVITEMW)lParam, FALSE, TRUE);
+ return LISTVIEW_GetItemT(infoPtr, (LPLVITEMW)lParam, FALSE, TRUE);
case LVM_GETITEMCOUNT:
- return LISTVIEW_GetItemCount(hwnd);
+ return LISTVIEW_GetItemCount(infoPtr);
case LVM_GETITEMPOSITION:
- return LISTVIEW_GetItemPosition(hwnd, (INT)wParam, (LPPOINT)lParam);
+ return LISTVIEW_GetItemPosition(infoPtr, (INT)wParam, (LPPOINT)lParam);
case LVM_GETITEMRECT:
- return LISTVIEW_GetItemRect(hwnd, (INT)wParam, (LPRECT)lParam);
+ return LISTVIEW_GetItemRect(infoPtr, (INT)wParam, (LPRECT)lParam);
case LVM_GETITEMSPACING:
- return LISTVIEW_GetItemSpacing(hwnd, (BOOL)wParam);
+ return LISTVIEW_GetItemSpacing(infoPtr, (BOOL)wParam);
case LVM_GETITEMSTATE:
- return LISTVIEW_GetItemState(hwnd, (INT)wParam, (UINT)lParam);
+ return LISTVIEW_GetItemState(infoPtr, (INT)wParam, (UINT)lParam);
case LVM_GETITEMTEXTA:
- return LISTVIEW_GetItemTextT(hwnd, (INT)wParam, (LPLVITEMW)lParam, FALSE);
+ return LISTVIEW_GetItemTextT(infoPtr, (INT)wParam, (LPLVITEMW)lParam, FALSE);
case LVM_GETITEMTEXTW:
- return LISTVIEW_GetItemTextT(hwnd, (INT)wParam, (LPLVITEMW)lParam, TRUE);
+ return LISTVIEW_GetItemTextT(infoPtr, (INT)wParam, (LPLVITEMW)lParam, TRUE);
case LVM_GETNEXTITEM:
- return LISTVIEW_GetNextItem(hwnd, (INT)wParam, LOWORD(lParam));
+ return LISTVIEW_GetNextItem(infoPtr, (INT)wParam, LOWORD(lParam));
case LVM_GETNUMBEROFWORKAREAS:
FIXME("LVM_GETNUMBEROFWORKAREAS: unimplemented\n");
return 1;
case LVM_GETORIGIN:
- return LISTVIEW_GetOrigin(hwnd, (LPPOINT)lParam);
+ return LISTVIEW_GetOrigin(infoPtr, (LPPOINT)lParam);
+ /* case LVN_GETOUTLINECOLOR: */
+
+ /* case LVM_GETSELECTEDCOLUMN: */
+
case LVM_GETSELECTEDCOUNT:
- return LISTVIEW_GetSelectedCount(hwnd);
+ return LISTVIEW_GetSelectedCount(infoPtr);
case LVM_GETSELECTIONMARK:
- return LISTVIEW_GetSelectionMark(hwnd);
+ return LISTVIEW_GetSelectionMark(infoPtr);
case LVM_GETSTRINGWIDTHA:
- return LISTVIEW_GetStringWidthT(hwnd, (LPCWSTR)lParam, FALSE);
+ return LISTVIEW_GetStringWidthT(infoPtr, (LPCWSTR)lParam, FALSE);
case LVM_GETSTRINGWIDTHW:
- return LISTVIEW_GetStringWidthT(hwnd, (LPCWSTR)lParam, TRUE);
+ return LISTVIEW_GetStringWidthT(infoPtr, (LPCWSTR)lParam, TRUE);
case LVM_GETSUBITEMRECT:
- return LISTVIEW_GetSubItemRect(hwnd, (UINT)wParam, ((LPRECT)lParam)->top,
+ return LISTVIEW_GetSubItemRect(infoPtr, (UINT)wParam, ((LPRECT)lParam)->top,
((LPRECT)lParam)->left, (LPRECT)lParam);
case LVM_GETTEXTBKCOLOR:
- return LISTVIEW_GetTextBkColor(hwnd);
+ return LISTVIEW_GetTextBkColor(infoPtr);
case LVM_GETTEXTCOLOR:
- return LISTVIEW_GetTextColor(hwnd);
+ return LISTVIEW_GetTextColor(infoPtr);
+ /* case LVN_GETTILEINFO: */
+
+ /* case LVN_GETTILEVIEWINFO: */
+
case LVM_GETTOOLTIPS:
FIXME("LVM_GETTOOLTIPS: unimplemented\n");
return FALSE;
case LVM_GETTOPINDEX:
- return LISTVIEW_GetTopIndex(hwnd);
+ return LISTVIEW_GetTopIndex(infoPtr);
/*case LVM_GETUNICODEFORMAT:
FIXME("LVM_GETUNICODEFORMAT: unimplemented\n");
return FALSE;*/
case LVM_GETVIEWRECT:
- return LISTVIEW_GetViewRect(hwnd, (LPRECT)lParam);
+ return LISTVIEW_GetViewRect(infoPtr, (LPRECT)lParam);
case LVM_GETWORKAREAS:
FIXME("LVM_GETWORKAREAS: unimplemented\n");
return FALSE;
+ /* case LVN_HASGROUP: */
+
case LVM_HITTEST:
- return LISTVIEW_HitTest(hwnd, (LPLVHITTESTINFO)lParam);
+ return LISTVIEW_HitTest(infoPtr, (LPLVHITTESTINFO)lParam);
case LVM_INSERTCOLUMNA:
- return LISTVIEW_InsertColumnT(hwnd, (INT)wParam, (LPLVCOLUMNW)lParam, FALSE);
+ return LISTVIEW_InsertColumnT(infoPtr, (INT)wParam, (LPLVCOLUMNW)lParam, FALSE);
case LVM_INSERTCOLUMNW:
- return LISTVIEW_InsertColumnT(hwnd, (INT)wParam, (LPLVCOLUMNW)lParam, TRUE);
+ return LISTVIEW_InsertColumnT(infoPtr, (INT)wParam, (LPLVCOLUMNW)lParam, TRUE);
+ /* case LVN_INSERTGROUP: */
+
+ /* case LVN_INSERTGROUPSORTED: */
+
case LVM_INSERTITEMA:
- return LISTVIEW_InsertItemT(hwnd, (LPLVITEMW)lParam, FALSE);
+ return LISTVIEW_InsertItemT(infoPtr, (LPLVITEMW)lParam, FALSE);
case LVM_INSERTITEMW:
- return LISTVIEW_InsertItemT(hwnd, (LPLVITEMW)lParam, TRUE);
+ return LISTVIEW_InsertItemT(infoPtr, (LPLVITEMW)lParam, TRUE);
+
+ /* case LVN_INSERTMARKHITTEST: */
+
+ /* case LVN_ISGROUPVIEWENABLED: */
+
+ /* case LVN_MAPIDTOINDEX: */
+
+ /* case LVN_INEDXTOID: */
+
+ /* case LVN_MOVEGROUP: */
+
+ /* case LVN_MOVEITEMTOGROUP: */
case LVM_REDRAWITEMS:
- return LISTVIEW_RedrawItems(hwnd, (INT)wParam, (INT)lParam);
+ return LISTVIEW_RedrawItems(infoPtr, (INT)wParam, (INT)lParam);
+
+ /* case LVN_REMOVEALLGROUPS: */
+
+ /* case LVN_REMOVEGROUP: */
case LVM_SCROLL:
- return LISTVIEW_Scroll(hwnd, (INT)wParam, (INT)lParam);
+ return LISTVIEW_Scroll(infoPtr, (INT)wParam, (INT)lParam);
case LVM_SETBKCOLOR:
- return LISTVIEW_SetBkColor(hwnd, (COLORREF)lParam);
+ return LISTVIEW_SetBkColor(infoPtr, (COLORREF)lParam);
-/* case LVM_SETBKIMAGE: */
+ /* case LVM_SETBKIMAGE: */
case LVM_SETCALLBACKMASK:
- return LISTVIEW_SetCallbackMask(hwnd, (UINT)wParam);
+ return LISTVIEW_SetCallbackMask(infoPtr, (UINT)wParam);
case LVM_SETCOLUMNA:
- return LISTVIEW_SetColumnT(hwnd, (INT)wParam, (LPLVCOLUMNW)lParam, FALSE);
+ return LISTVIEW_SetColumnT(infoPtr, (INT)wParam, (LPLVCOLUMNW)lParam, FALSE);
case LVM_SETCOLUMNW:
- return LISTVIEW_SetColumnT(hwnd, (INT)wParam, (LPLVCOLUMNW)lParam, TRUE);
+ return LISTVIEW_SetColumnT(infoPtr, (INT)wParam, (LPLVCOLUMNW)lParam, TRUE);
case LVM_SETCOLUMNORDERARRAY:
- return LISTVIEW_SetColumnOrderArray(hwnd, (INT)wParam, (LPINT)lParam);
+ return LISTVIEW_SetColumnOrderArray(infoPtr, (INT)wParam, (LPINT)lParam);
case LVM_SETCOLUMNWIDTH:
- return LISTVIEW_SetColumnWidth(hwnd, (INT)wParam, SLOWORD(lParam));
+ return LISTVIEW_SetColumnWidth(infoPtr, (INT)wParam, SLOWORD(lParam));
case LVM_SETEXTENDEDLISTVIEWSTYLE:
- return LISTVIEW_SetExtendedListViewStyle(hwnd, (DWORD)wParam, (DWORD)lParam);
+ return LISTVIEW_SetExtendedListViewStyle(infoPtr, (DWORD)wParam, (DWORD)lParam);
-/* case LVM_SETHOTCURSOR: */
+ /* case LVN_SETGROUPINFO: */
+
+ /* case LVN_SETGROUPMETRICS: */
+
+ case LVM_SETHOTCURSOR:
+ return LISTVIEW_SetHotCursor(infoPtr, (HCURSOR)lParam);
case LVM_SETHOTITEM:
- return LISTVIEW_SetHotItem(hwnd, (INT)wParam);
+ return LISTVIEW_SetHotItem(infoPtr, (INT)wParam);
case LVM_SETHOVERTIME:
- return LISTVIEW_SetHoverTime(hwnd, (DWORD)wParam);
+ return LISTVIEW_SetHoverTime(infoPtr, (DWORD)wParam);
case LVM_SETICONSPACING:
- return LISTVIEW_SetIconSpacing(hwnd, (DWORD)lParam);
+ return LISTVIEW_SetIconSpacing(infoPtr, (DWORD)lParam);
case LVM_SETIMAGELIST:
- return (LRESULT)LISTVIEW_SetImageList(hwnd, (INT)wParam, (HIMAGELIST)lParam);
+ return (LRESULT)LISTVIEW_SetImageList(infoPtr, (INT)wParam, (HIMAGELIST)lParam);
+
+ /* case LVN_SETINFOTIP: */
+
+ /* case LVN_SETINSERTMARK: */
+
+ /* case LVN_SETINSERTMARKCOLOR: */
case LVM_SETITEMA:
- return LISTVIEW_SetItemT(hwnd, (LPLVITEMW)lParam, FALSE);
+ return LISTVIEW_SetItemT(infoPtr, (LPLVITEMW)lParam, FALSE);
case LVM_SETITEMW:
- return LISTVIEW_SetItemT(hwnd, (LPLVITEMW)lParam, TRUE);
+ return LISTVIEW_SetItemT(infoPtr, (LPLVITEMW)lParam, TRUE);
case LVM_SETITEMCOUNT:
- return LISTVIEW_SetItemCount(hwnd, (INT)wParam, (DWORD)lParam);
+ return LISTVIEW_SetItemCount(infoPtr, (INT)wParam, (DWORD)lParam);
case LVM_SETITEMPOSITION:
- return LISTVIEW_SetItemPosition(hwnd, (INT)wParam, (INT)LOWORD(lParam),
+ return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, (INT)LOWORD(lParam),
(INT)HIWORD(lParam));
case LVM_SETITEMPOSITION32:
- return LISTVIEW_SetItemPosition(hwnd, (INT)wParam, ((POINT*)lParam)->x,
+ return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, ((POINT*)lParam)->x,
((POINT*)lParam)->y);
case LVM_SETITEMSTATE:
- return LISTVIEW_SetItemState(hwnd, (INT)wParam, (LPLVITEMW)lParam);
+ return LISTVIEW_SetItemState(infoPtr, (INT)wParam, (LPLVITEMW)lParam);
case LVM_SETITEMTEXTA:
- return LISTVIEW_SetItemTextT(hwnd, (INT)wParam, (LPLVITEMW)lParam, FALSE);
+ return LISTVIEW_SetItemTextT(infoPtr, (INT)wParam, (LPLVITEMW)lParam, FALSE);
case LVM_SETITEMTEXTW:
- return LISTVIEW_SetItemTextT(hwnd, (INT)wParam, (LPLVITEMW)lParam, TRUE);
+ return LISTVIEW_SetItemTextT(infoPtr, (INT)wParam, (LPLVITEMW)lParam, TRUE);
+
+ /* case LVN_SETOUTLINECOLOR: */
+ /* case LVN_SETSELECTEDCOLUMN: */
+
case LVM_SETSELECTIONMARK:
- return LISTVIEW_SetSelectionMark(hwnd, (INT)lParam);
+ return LISTVIEW_SetSelectionMark(infoPtr, (INT)lParam);
case LVM_SETTEXTBKCOLOR:
- return LISTVIEW_SetTextBkColor(hwnd, (COLORREF)lParam);
+ return LISTVIEW_SetTextBkColor(infoPtr, (COLORREF)lParam);
case LVM_SETTEXTCOLOR:
- return LISTVIEW_SetTextColor(hwnd, (COLORREF)lParam);
+ return LISTVIEW_SetTextColor(infoPtr, (COLORREF)lParam);
-/* case LVM_SETTOOLTIPS: */
-/* case LVM_SETUNICODEFORMAT: */
-/* case LVM_SETWORKAREAS: */
+ /* case LVN_SETTILEINFO: */
+
+ /* case LVN_SETTILEVIEWINFO: */
+
+ /* case LVN_SETTILEWIDTH: */
+
+ /* case LVM_SETTOOLTIPS: */
+
+ /* case LVM_SETUNICODEFORMAT: */
+
+ /* case LVN_SETVIEW: */
+
+ /* case LVM_SETWORKAREAS: */
+ /* case LVN_SORTGROUPS: */
+
case LVM_SORTITEMS:
- return LISTVIEW_SortItems(hwnd, (PFNLVCOMPARE)lParam, (LPARAM)wParam);
+ return LISTVIEW_SortItems(infoPtr, (PFNLVCOMPARE)lParam, (LPARAM)wParam);
case LVM_SUBITEMHITTEST:
- return LISTVIEW_SubItemHitTest(hwnd, (LPLVHITTESTINFO)lParam);
+ return LISTVIEW_SubItemHitTest(infoPtr, (LPLVHITTESTINFO)lParam);
case LVM_UPDATE:
- return LISTVIEW_Update(hwnd, (INT)wParam);
+ return LISTVIEW_Update(infoPtr, (INT)wParam);
case WM_CHAR:
- return LISTVIEW_ProcessLetterKeys( hwnd, wParam, lParam );
+ return LISTVIEW_ProcessLetterKeys( infoPtr, wParam, lParam );
case WM_COMMAND:
- return LISTVIEW_Command(hwnd, wParam, lParam);
+ return LISTVIEW_Command(infoPtr, wParam, lParam);
case WM_CREATE:
- return LISTVIEW_Create(hwnd, (LPCREATESTRUCTW)lParam);
+ return LISTVIEW_Create(hwnd, (LPCREATESTRUCTW)lParam); //FIXME
case WM_ERASEBKGND:
- return LISTVIEW_EraseBackground(hwnd, wParam, lParam);
+ return LISTVIEW_EraseBackground(infoPtr, wParam, lParam);
case WM_GETDLGCODE:
return DLGC_WANTCHARS | DLGC_WANTARROWS;
case WM_GETFONT:
- return LISTVIEW_GetFont(hwnd);
+ return LISTVIEW_GetFont(infoPtr);
case WM_HSCROLL:
if (SLOWORD(wParam) < 0) return 0; /* validate not internal codes */
- return LISTVIEW_HScroll(hwnd, (INT)LOWORD(wParam),
+ return LISTVIEW_HScroll(infoPtr, (INT)LOWORD(wParam),
(INT)HIWORD(wParam), (HWND)lParam);
case WM_KEYDOWN:
- return LISTVIEW_KeyDown(hwnd, (INT)wParam, (LONG)lParam);
+ return LISTVIEW_KeyDown(infoPtr, (INT)wParam, (LONG)lParam);
case WM_KILLFOCUS:
- return LISTVIEW_KillFocus(hwnd);
+ return LISTVIEW_KillFocus(infoPtr);
case WM_LBUTTONDBLCLK:
- return LISTVIEW_LButtonDblClk(hwnd, (WORD)wParam, LOWORD(lParam),
- HIWORD(lParam));
+ return LISTVIEW_LButtonDblClk(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
case WM_LBUTTONDOWN:
- return LISTVIEW_LButtonDown(hwnd, (WORD)wParam, LOWORD(lParam),
- HIWORD(lParam));
+ return LISTVIEW_LButtonDown(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
+
case WM_LBUTTONUP:
- return LISTVIEW_LButtonUp(hwnd, (WORD)wParam, LOWORD(lParam),
- HIWORD(lParam));
+ return LISTVIEW_LButtonUp(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
+
case WM_MOUSEMOVE:
- return LISTVIEW_MouseMove (hwnd, wParam, lParam);
+ return LISTVIEW_MouseMove (infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
case WM_MOUSEHOVER:
- return LISTVIEW_MouseHover(hwnd, wParam, lParam);
+ return LISTVIEW_MouseHover(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
case WM_NCCREATE:
return LISTVIEW_NCCreate(hwnd, wParam, lParam);
case WM_NCDESTROY:
- return LISTVIEW_NCDestroy(hwnd);
+ return LISTVIEW_NCDestroy(infoPtr);
case WM_NOTIFY:
- return LISTVIEW_Notify(hwnd, (INT)wParam, (LPNMHDR)lParam);
+ return LISTVIEW_Notify(infoPtr, (INT)wParam, (LPNMHDR)lParam);
case WM_NOTIFYFORMAT:
- return LISTVIEW_NotifyFormat(hwnd, (HWND)wParam, (INT)lParam);
+ return LISTVIEW_NotifyFormat(infoPtr, (HWND)wParam, (INT)lParam);
case WM_PAINT:
- return LISTVIEW_Paint(hwnd, (HDC)wParam);
+ return LISTVIEW_Paint(infoPtr, (HDC)wParam);
case WM_RBUTTONDBLCLK:
- return LISTVIEW_RButtonDblClk(hwnd, (WORD)wParam, LOWORD(lParam),
- HIWORD(lParam));
+ return LISTVIEW_RButtonDblClk(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
case WM_RBUTTONDOWN:
- return LISTVIEW_RButtonDown(hwnd, (WORD)wParam, LOWORD(lParam),
- HIWORD(lParam));
+ return LISTVIEW_RButtonDown(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
case WM_RBUTTONUP:
- return LISTVIEW_RButtonUp(hwnd, (WORD)wParam, LOWORD(lParam),
- HIWORD(lParam));
+ return LISTVIEW_RButtonUp(infoPtr, (WORD)wParam, MAKEPOINTS(lParam));
+ case WM_SETCURSOR:
+ return LISTVIEW_SetCursor(infoPtr, (HWND)wParam, LOWORD(lParam), HIWORD(lParam));
+
case WM_SETFOCUS:
- return LISTVIEW_SetFocus(hwnd, (HWND)wParam);
+ return LISTVIEW_SetFocus(infoPtr, (HWND)wParam);
case WM_SETFONT:
- return LISTVIEW_SetFont(hwnd, (HFONT)wParam, (WORD)lParam);
+ return LISTVIEW_SetFont(infoPtr, (HFONT)wParam, (WORD)lParam);
case WM_SETREDRAW:
- return LISTVIEW_SetRedraw(hwnd, (BOOL)wParam);
+ return LISTVIEW_SetRedraw(infoPtr, (BOOL)wParam);
case WM_SIZE:
- return LISTVIEW_Size(hwnd, (int)SLOWORD(lParam), (int)SHIWORD(lParam));
+ return LISTVIEW_Size(infoPtr, (int)SLOWORD(lParam), (int)SHIWORD(lParam));
case WM_STYLECHANGED:
- return LISTVIEW_StyleChanged(hwnd, wParam, (LPSTYLESTRUCT)lParam);
+ return LISTVIEW_StyleChanged(infoPtr, wParam, (LPSTYLESTRUCT)lParam);
case WM_SYSCOLORCHANGE:
COMCTL32_RefreshSysColors();
@@ -10079,20 +9956,20 @@
case WM_VSCROLL:
if (SLOWORD(wParam) < 0) return 0; /* validate not internal codes */
- return LISTVIEW_VScroll(hwnd, (INT)LOWORD(wParam),
+ return LISTVIEW_VScroll(infoPtr, (INT)LOWORD(wParam),
(INT)HIWORD(wParam), (HWND)lParam);
case WM_MOUSEWHEEL:
if (wParam & (MK_SHIFT | MK_CONTROL))
- return DefWindowProcW( hwnd, uMsg, wParam, lParam );
- return LISTVIEW_MouseWheel(hwnd, (short int)HIWORD(wParam));
+ return DefWindowProcW(hwnd, uMsg, wParam, lParam);
+ return LISTVIEW_MouseWheel(infoPtr, (short int)HIWORD(wParam));
case WM_WINDOWPOSCHANGED:
if (!(((WINDOWPOS *)lParam)->flags & SWP_NOSIZE)) {
- SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE |
+ SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE |
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE);
- LISTVIEW_UpdateSize(hwnd);
- LISTVIEW_UpdateScroll(hwnd);
+ LISTVIEW_UpdateSize(infoPtr);
+ LISTVIEW_UpdateScroll(infoPtr);
}
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
@@ -10100,10 +9977,7 @@
default:
if ((uMsg >= WM_USER) && (uMsg < WM_APP))
- {
- ERR("unknown msg %04x wp=%08x lp=%08lx\n", uMsg, wParam,
- lParam);
- }
+ ERR("unknown msg %04x wp=%08x lp=%08lx\n", uMsg, wParam, lParam);
/* call default window procedure */
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
@@ -10160,7 +10034,7 @@
*
* RETURN:
*/
-static LRESULT LISTVIEW_Command(HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT LISTVIEW_Command(LISTVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
switch (HIWORD(wParam))
{
@@ -10170,7 +10044,6 @@
* Adjust the edit window size
*/
WCHAR buffer[1024];
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0);
HDC hdc = GetDC(infoPtr->hwndEdit);
HFONT hFont, hOldFont = 0;
RECT rect;
@@ -10207,13 +10080,13 @@
if(hFont != 0)
SelectObject(hdc, hOldFont);
- ReleaseDC(hwnd, hdc);
+ ReleaseDC(infoPtr->hwndSelf, hdc);
break;
}
default:
- return SendMessageW (GetParent (hwnd), WM_COMMAND, wParam, lParam);
+ return SendMessageW (GetParent (infoPtr->hwndSelf), WM_COMMAND, wParam, lParam);
}
return 0;
@@ -10232,7 +10105,6 @@
WPARAM wParam, LPARAM lParam, BOOL isW)
{
LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(GetParent(hwnd), 0);
- EDITLABEL_ITEM *einfo = infoPtr->pedititem;
static BOOL bIgnoreKillFocus = FALSE;
BOOL cancel = FALSE;
@@ -10250,10 +10122,9 @@
case WM_DESTROY:
{
- WNDPROC editProc = einfo->EditWndProc;
+ WNDPROC editProc = infoPtr->pedititem.EditWndProc;
+ infoPtr->pedititem.EditWndProc = 0;
SetWindowLongW(hwnd, GWL_WNDPROC, (LONG)editProc);
- COMCTL32_Free(einfo);
- infoPtr->pedititem = NULL;
return CallWindowProcT(editProc, hwnd, uMsg, wParam, lParam, isW);
}
@@ -10267,10 +10138,10 @@
break;
default:
- return CallWindowProcT(einfo->EditWndProc, hwnd, uMsg, wParam, lParam, isW);
+ return CallWindowProcT(infoPtr->pedititem.EditWndProc, hwnd, uMsg, wParam, lParam, isW);
}
- if (einfo->EditLblCb)
+ if (infoPtr->pedititem.bEditLblCb)
{
LPWSTR buffer = NULL;
@@ -10290,11 +10161,11 @@
/* Processing LVN_ENDLABELEDIT message could kill the focus */
/* eg. Using a messagebox */
bIgnoreKillFocus = TRUE;
- einfo->EditLblCb(GetParent(hwnd), buffer, einfo->param);
+ LISTVIEW_EndEditLabelT(infoPtr, buffer, infoPtr->pedititem.nEditItem, isW);
if (buffer) COMCTL32_Free(buffer);
- einfo->EditLblCb = NULL;
+ infoPtr->pedititem.bEditLblCb = FALSE;
bIgnoreKillFocus = FALSE;
}
@@ -10336,25 +10207,21 @@
*
* RETURN:
*/
-HWND CreateEditLabelT(LPCWSTR text, DWORD style, INT x, INT y,
- INT width, INT height, HWND parent, HINSTANCE hinst,
- EditlblCallbackW EditLblCb, DWORD param, BOOL isW)
+static HWND CreateEditLabelT(LISTVIEW_INFO *infoPtr, LPCWSTR text, DWORD style,
+ INT x, INT y, INT width, INT height, INT nItem, BOOL isW)
{
- LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(parent, 0);
WCHAR editName[5] = { 'E', 'd', 'i', 't', '\0' };
HWND hedit;
SIZE sz;
HDC hdc;
HDC hOldFont=0;
TEXTMETRICW textMetric;
+ HINSTANCE hinst = GetWindowLongW(infoPtr->hwndSelf, GWL_HINSTANCE);
TRACE("(text=%s, ..., isW=%d)\n", debugstr_t(text, isW), isW);
- if (NULL == (infoPtr->pedititem = COMCTL32_Alloc(sizeof(EDITLABEL_ITEM))))
- return 0;
-
style |= WS_CHILDWINDOW|WS_CLIPSIBLINGS|ES_LEFT|WS_BORDER;
- hdc = GetDC(parent);
+ hdc = GetDC(infoPtr->hwndSelf);
/* Select the font to get appropriate metric dimensions */
if(infoPtr->hFont != 0)
@@ -10370,21 +10237,17 @@
if(infoPtr->hFont != 0)
SelectObject(hdc, hOldFont);
- ReleaseDC(parent, hdc);
+ ReleaseDC(infoPtr->hwndSelf, hdc);
if (isW)
- hedit = CreateWindowW(editName, text, style, x, y, sz.cx, height, parent, 0, hinst, 0);
+ hedit = CreateWindowW(editName, text, style, x, y, sz.cx, height, infoPtr->hwndSelf, 0, hinst, 0);
else
- hedit = CreateWindowA("Edit", (LPCSTR)text, style, x, y, sz.cx, height, parent, 0, hinst, 0);
+ hedit = CreateWindowA("Edit", (LPCSTR)text, style, x, y, sz.cx, height, infoPtr->hwndSelf, 0, hinst, 0);
- if (!hedit)
- {
- COMCTL32_Free(infoPtr->pedititem);
- return 0;
- }
+ if (!hedit) return 0;
- infoPtr->pedititem->param = param;
- infoPtr->pedititem->EditLblCb = EditLblCb;
- infoPtr->pedititem->EditWndProc = (WNDPROC)
+ infoPtr->pedititem.nEditItem = nItem;
+ infoPtr->pedititem.bEditLblCb = TRUE;
+ infoPtr->pedititem.EditWndProc = (WNDPROC)
(isW ? SetWindowLongW(hedit, GWL_WNDPROC, (LONG)EditLblWndProcW) :
SetWindowLongA(hedit, GWL_WNDPROC, (LONG)EditLblWndProcA) );
More information about the wine-patches
mailing list