4 * Copyright 1998 Eric Kohl
7 * This is just a dummy control. An author is needed! Any volunteers?
8 * I will only improve this control once in a while.
9 * Eric <ekohl@abo.rhein-zeitung.de>
13 * - Most notifications.
23 #define LISTVIEW_GetInfoPtr(wndPtr) ((LISTVIEW_INFO *)wndPtr->wExtra[0])
27 LISTVIEW_Refresh (WND
*wndPtr
, HDC32 hdc
)
29 // LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
37 // << LISTVIEW_ApproximateViewRect >>
38 // << LISTVIEW_Arrange >>
39 // << LISTVIEW_CreateDragImage >>
43 LISTVIEW_DeleteAllItems (WND
*wndPtr
)
45 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
47 LISTVIEW_ITEM
*lpItem
;
51 if (infoPtr
->nItemCount
== 0)
54 TRACE (listview
, "\n");
56 /* send LVN_DELETEALLITEMS notification */
57 ZeroMemory (&nmlv
, sizeof (NMLISTVIEW
));
58 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
59 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
60 nmlv
.hdr
.code
= LVN_DELETEALLITEMS
;
63 !(BOOL32
)SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
64 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
66 nmlv
.hdr
.code
= LVN_DELETEITEM
;
68 for (nItem
= 0; nItem
< infoPtr
->nItemCount
; nItem
++) {
69 /* send notification */
72 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
73 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
76 /* get item pointer */
77 lpItem
= (LISTVIEW_ITEM
*)DPA_GetPtr (infoPtr
->hdpaItems
, nItem
);
79 /* delete item strings */
80 if ((lpItem
->pszText
) && (lpItem
->pszText
!= LPSTR_TEXTCALLBACK32A
))
81 COMCTL32_Free (lpItem
->pszText
);
84 COMCTL32_Free (lpItem
);
88 DPA_DeleteAllPtrs (infoPtr
->hdpaItems
);
89 infoPtr
->nItemCount
= 0;
96 LISTVIEW_DeleteColumn (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
98 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
99 INT32 nColumn
= (INT32
)wParam
;
102 if (infoPtr
->nItemCount
> 0)
105 if (!SendMessage32A (infoPtr
->hwndHeader
, HDM_DELETEITEM
, wParam
, 0))
108 infoPtr
->nColumnCount
--;
110 FIXME (listview
, "semi stub!\n");
117 LISTVIEW_DeleteItem (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
119 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
120 INT32 nItem
= (INT32
)wParam
;
121 LISTVIEW_ITEM
*lpItem
;
124 if ((nItem
< 0) || (nItem
>= infoPtr
->nItemCount
))
127 TRACE (listview
, "(%d)\n", nItem
);
129 /* send notification */
130 ZeroMemory (&nmlv
, sizeof (NMLISTVIEW
));
131 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
132 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
133 nmlv
.hdr
.code
= LVN_DELETEITEM
;
135 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
136 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
138 /* remove from item array */
139 lpItem
= (LISTVIEW_ITEM
*)DPA_DeletePtr (infoPtr
->hdpaItems
, nItem
);
141 /* delete item strings */
142 if ((lpItem
->pszText
) && (lpItem
->pszText
!= LPSTR_TEXTCALLBACK32A
))
143 COMCTL32_Free (lpItem
->pszText
);
146 COMCTL32_Free (lpItem
);
148 infoPtr
->nItemCount
--;
154 // << LISTVIEW_EditLabel >>
155 // << LISTVIEW_EnsureVisible >>
156 // << LISTVIEW_FindItem >>
160 LISTVIEW_GetBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
162 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
164 return infoPtr
->clrBk
;
168 // << LISTVIEW_GetBkImage >>
169 // << LISTVIEW_GetCallbackMask >>
173 LISTVIEW_GetColumn32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
175 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
176 LPLVCOLUMN32A lpcol
= (LPLVCOLUMN32A
)lParam
;
177 INT32 nIndex
= (INT32
)wParam
;
183 TRACE (listview
, "(%d %p)\n", nIndex
, lpcol
);
185 ZeroMemory (&hdi
, sizeof(HDITEM32A
));
187 if (lpcol
->mask
& LVCF_FMT
)
188 hdi
.mask
|= HDI_FORMAT
;
190 if (lpcol
->mask
& LVCF_WIDTH
)
191 hdi
.mask
|= HDI_WIDTH
;
193 if (lpcol
->mask
& LVCF_TEXT
)
194 hdi
.mask
|= (HDI_TEXT
| HDI_FORMAT
);
196 if (lpcol
->mask
& LVCF_IMAGE
)
197 hdi
.mask
|= HDI_IMAGE
;
199 if (lpcol
->mask
& LVCF_ORDER
)
200 hdi
.mask
|= HDI_ORDER
;
202 if (!SendMessage32A (infoPtr
->hwndHeader
, HDM_GETITEM32A
,
203 wParam
, (LPARAM
)&hdi
))
206 if (lpcol
->mask
& LVCF_FMT
) {
209 if (hdi
.fmt
& HDF_LEFT
)
210 lpcol
->fmt
|= LVCFMT_LEFT
;
211 else if (hdi
.fmt
& HDF_RIGHT
)
212 lpcol
->fmt
|= LVCFMT_RIGHT
;
213 else if (hdi
.fmt
& HDF_CENTER
)
214 lpcol
->fmt
|= LVCFMT_CENTER
;
216 if (hdi
.fmt
& HDF_IMAGE
)
217 lpcol
->fmt
|= LVCFMT_COL_HAS_IMAGES
;
220 if (lpcol
->mask
& LVCF_WIDTH
)
223 if ((lpcol
->mask
& LVCF_TEXT
) && (lpcol
->pszText
) && (hdi
.pszText
))
224 lstrcpyn32A (lpcol
->pszText
, hdi
.pszText
, lpcol
->cchTextMax
);
226 if (lpcol
->mask
& LVCF_IMAGE
)
227 lpcol
->iImage
= hdi
.iImage
;
229 if (lpcol
->mask
& LVCF_ORDER
)
230 lpcol
->iOrder
= hdi
.iOrder
;
236 // << LISTVIEW_GetColumn32W >>
237 // << LISTVIEW_GetColumnOrderArray >>
240 __inline__
static LRESULT
241 LISTVIEW_GetColumnWidth (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
243 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
246 hdi
.mask
= HDI_WIDTH
;
247 if (SendMessage32A (infoPtr
->hwndHeader
, HDM_GETITEM32A
,
248 wParam
, (LPARAM
)&hdi
))
255 // << LISTVIEW_GetCountPerPage >>
256 // << LISTVIEW_GetEditControl >>
257 // << LISTVIEW_GetExtendedListviewStyle >>
260 __inline__
static LRESULT
261 LISTVIEW_GetHeader (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
263 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
265 return infoPtr
->hwndHeader
;
269 // << LISTVIEW_GetHotCursor >>
270 // << LISTVIEW_GetHotItem >>
271 // << LISTVIEW_GetHoverTime >>
275 LISTVIEW_GetImageList (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
277 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
279 TRACE (listview
, "(0x%08x)\n", wParam
);
283 return (LRESULT
)infoPtr
->himlNormal
;
286 return (LRESULT
)infoPtr
->himlSmall
;
289 return (LRESULT
)infoPtr
->himlState
;
292 return (LRESULT
)NULL
;
296 // << LISTVIEW_GetISearchString >>
300 LISTVIEW_GetItem32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
302 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
303 LPLVITEM32A lpItem
= (LPLVITEM32A
)lParam
;
304 LISTVIEW_ITEM
*lpRow
, *lpSubItem
;
309 if ((lpItem
->iItem
< 0) || (lpItem
->iItem
>= infoPtr
->nItemCount
))
312 if ((lpItem
->iSubItem
< 0) || (lpItem
->iSubItem
>= infoPtr
->nColumnCount
))
315 FIXME (listview
, "(%d %d %p)\n",
316 lpItem
->iItem
, lpItem
->iSubItem
, lpItem
);
318 lpRow
= DPA_GetPtr (infoPtr
->hdpaItems
, lpItem
->iItem
);
322 lpSubItem
= &lpRow
[lpItem
->iSubItem
];
326 if (lpItem
->mask
& LVIF_STATE
)
327 lpItem
->state
= lpSubItem
->state
& lpItem
->stateMask
;
329 if (lpItem
->mask
& LVIF_TEXT
) {
330 if (lpSubItem
->pszText
== LPSTR_TEXTCALLBACK32A
)
331 lpItem
->pszText
= LPSTR_TEXTCALLBACK32A
;
333 Str_GetPtr32A (lpSubItem
->pszText
, lpItem
->pszText
,
337 if (lpItem
->mask
& LVIF_IMAGE
)
338 lpItem
->iImage
= lpSubItem
->iImage
;
340 if (lpItem
->mask
& LVIF_PARAM
)
341 lpItem
->lParam
= lpSubItem
->lParam
;
343 if (lpItem
->mask
& LVIF_INDENT
)
344 lpItem
->iIndent
= lpSubItem
->iIndent
;
350 // << LISTVIEW_GetItem32W >>
353 __inline__
static LRESULT
354 LISTVIEW_GetItemCount (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
356 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
357 return infoPtr
->nItemCount
;
362 LISTVIEW_GetItemPosition (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
364 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
365 LPPOINT32 lpPt
= (LPPOINT32
)lParam
;
366 INT32 nIndex
= (INT32
)wParam
;
370 if ((nIndex
< 0) || (nIndex
>= infoPtr
->nItemCount
))
373 FIXME (listview
, "returning position [0,0]!\n");
381 // << LISTVIEW_GetItemRect >>
382 // << LISTVIEW_GetItemSpacing >>
383 // << LISTVIEW_GetItemState >>
387 LISTVIEW_GetItemText32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
389 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
390 LPLVITEM32A lpItem
= (LPLVITEM32A
)lParam
;
391 INT32 nItem
= (INT32
)wParam
;
392 LISTVIEW_ITEM
*lpRow
, *lpSubItem
;
394 TRACE (listview
, "(%d %p)\n", nItem
, lpItem
);
396 lpRow
= DPA_GetPtr (infoPtr
->hdpaItems
, lpItem
->iItem
);
400 lpSubItem
= &lpRow
[lpItem
->iSubItem
];
404 if (lpSubItem
->pszText
== LPSTR_TEXTCALLBACK32A
) {
405 lpItem
->pszText
= LPSTR_TEXTCALLBACK32A
;
409 return Str_GetPtr32A (lpSubItem
->pszText
, lpItem
->pszText
,
414 // << LISTVIEW_GetItemText32A >>
418 LISTVIEW_GetNextItem (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
420 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
421 INT32 nStart
= (INT32
)wParam
;
422 UINT32 uFlags
= (UINT32
)LOWORD(lParam
);
424 FIXME (listview
, "(%d, 0x%x): semi stub!\n", nStart
, uFlags
);
426 if (infoPtr
->nItemCount
<= 0)
429 /* just a simple (preliminary) hack */
432 else if (nStart
< infoPtr
->nItemCount
- 1)
441 // << LISTVIEW_GetNumberOfWorkAreas >>
442 // << LISTVIEW_GetOrigin >>
446 LISTVIEW_GetSelectedCount (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
448 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
450 TRACE (listview
, ": empty stub (returns 0)!\n");
456 // << LISTVIEW_GetSelectionMark >>
460 LISTVIEW_GetStringWidth32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
462 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
463 LPSTR lpsz
= (LPSTR
)lParam
;
464 HFONT32 hFont
, hOldFont
;
471 TRACE (listview
, "(%s)\n", lpsz
);
473 hFont
= infoPtr
->hFont
? infoPtr
->hFont
: GetStockObject32 (SYSTEM_FONT
);
475 hOldFont
= SelectObject32 (hdc
, hFont
);
476 GetTextExtentPoint32A (hdc
, lpsz
, lstrlen32A(lpsz
), &size
);
477 SelectObject32 (hdc
, hOldFont
);
478 ReleaseDC32 (0, hdc
);
480 TRACE (listview
, "-- ret=%d\n", size
.cx
);
482 return (LRESULT
)size
.cx
;
488 __inline__
static LRESULT
489 LISTVIEW_GetTextBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
491 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
493 return infoPtr
->clrTextBk
;
497 __inline__
static LRESULT
498 LISTVIEW_GetTextColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
500 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
502 return infoPtr
->clrText
;
507 LISTVIEW_HitTest (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
509 // LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
510 LPLVHITTESTINFO lpht
= (LPLVHITTESTINFO
)lParam
;
512 FIXME (listview
, "(%p): stub!\n", lpht
);
514 /* FIXME: preliminary */
515 lpht
->flags
= LVHT_NOWHERE
;
524 LISTVIEW_InsertColumn32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
526 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
527 LPLVCOLUMN32A lpcol
= (LPLVCOLUMN32A
)lParam
;
528 INT32 nIndex
= (INT32
)wParam
;
532 if ((!lpcol
) || (infoPtr
->nItemCount
> 0))
535 FIXME (listview
, "(%d %p): semi stub!\n", nIndex
, lpcol
);
537 ZeroMemory (&hdi
, sizeof(HDITEM32A
));
539 if (lpcol
->mask
& LVCF_FMT
) {
542 else if (lpcol
->fmt
& LVCFMT_LEFT
)
544 else if (lpcol
->fmt
& LVCFMT_RIGHT
)
545 hdi
.fmt
|= HDF_RIGHT
;
546 else if (lpcol
->fmt
& LVCFMT_CENTER
)
547 hdi
.fmt
|= HDF_CENTER
;
549 if (lpcol
->fmt
& LVCFMT_COL_HAS_IMAGES
)
550 hdi
.fmt
|= HDF_IMAGE
;
552 hdi
.mask
|= HDI_FORMAT
;
555 if (lpcol
->mask
& LVCF_WIDTH
) {
556 hdi
.mask
|= HDI_WIDTH
;
560 if (lpcol
->mask
& LVCF_TEXT
) {
561 hdi
.mask
|= (HDI_TEXT
| HDI_FORMAT
);
562 hdi
.pszText
= lpcol
->pszText
;
563 hdi
.fmt
|= HDF_STRING
;
566 if (lpcol
->mask
& LVCF_IMAGE
) {
567 hdi
.mask
|= HDI_IMAGE
;
568 hdi
.iImage
= lpcol
->iImage
;
571 if (lpcol
->mask
& LVCF_ORDER
) {
572 hdi
.mask
|= HDI_ORDER
;
573 hdi
.iOrder
= lpcol
->iOrder
;
576 nResult
= SendMessage32A (infoPtr
->hwndHeader
, HDM_INSERTITEM32A
,
577 wParam
, (LPARAM
)&hdi
);
581 infoPtr
->nColumnCount
++;
587 // << LISTVIEW_InsertColumn32W >>
591 LISTVIEW_InsertItem32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
593 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
594 LPLVITEM32A lpItem
= (LPLVITEM32A
)lParam
;
595 LISTVIEW_ITEM
*lpListItem
;
602 if ((!infoPtr
->nColumnCount
) || (lpItem
->iSubItem
))
605 FIXME (listview
, "(%d %p)\n", lpItem
->iItem
, lpItem
);
606 FIXME (listview
, "(%p %p)\n", infoPtr
, infoPtr
->hdpaItems
);
608 lpListItem
= (LISTVIEW_ITEM
*)COMCTL32_Alloc (infoPtr
->nColumnCount
* sizeof(LISTVIEW_ITEM
));
609 nIndex
= DPA_InsertPtr (infoPtr
->hdpaItems
, lpItem
->iItem
, lpListItem
);
613 if (lpItem
->mask
& LVIF_STATE
)
614 lpListItem
[0].state
= lpItem
->state
;
616 if (lpItem
->mask
& LVIF_TEXT
) {
617 if (lpItem
->pszText
== LPSTR_TEXTCALLBACK32A
)
618 lpListItem
[0].pszText
= LPSTR_TEXTCALLBACK32A
;
620 Str_SetPtr32A (&lpListItem
[0].pszText
, lpItem
->pszText
);
623 if (lpItem
->mask
& LVIF_IMAGE
)
624 lpListItem
[0].iImage
= lpItem
->iImage
;
626 if (lpItem
->mask
& LVIF_PARAM
)
627 lpListItem
[0].lParam
= lpItem
->lParam
;
629 if (lpItem
->mask
& LVIF_INDENT
)
630 lpListItem
[0].iIndent
= lpItem
->iIndent
;
632 infoPtr
->nItemCount
++;
634 /* send notification */
635 ZeroMemory (&nmlv
, sizeof (NMLISTVIEW
));
636 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
637 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
638 nmlv
.hdr
.code
= LVN_INSERTITEM
;
640 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
641 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
647 // << LISTVIEW_InsertItem32W >>
651 LISTVIEW_RedrawItems (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
653 // LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
655 FIXME (listview
, "(%d - %d): empty stub!\n",
656 (INT32
)wParam
, (INT32
)lParam
);
664 LISTVIEW_SetBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
666 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
671 /* set background color */
672 TRACE (listview
, "0x%06lx\n", (COLORREF
)lParam
);
673 infoPtr
->clrBk
= (COLORREF
)lParam
;
680 LISTVIEW_SetColumn32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
682 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
683 LPLVCOLUMN32A lpcol
= (LPLVCOLUMN32A
)lParam
;
684 INT32 nIndex
= (INT32
)wParam
;
690 FIXME (listview
, "(%d %p): semi stub!\n", nIndex
, lpcol
);
692 ZeroMemory (&hdi
, sizeof(HDITEM32A
));
694 if (lpcol
->mask
& LVCF_FMT
) {
697 else if (lpcol
->fmt
& LVCFMT_LEFT
)
699 else if (lpcol
->fmt
& LVCFMT_RIGHT
)
700 hdi
.fmt
|= HDF_RIGHT
;
701 else if (lpcol
->fmt
& LVCFMT_CENTER
)
702 hdi
.fmt
|= HDF_CENTER
;
704 if (lpcol
->fmt
& LVCFMT_COL_HAS_IMAGES
)
705 hdi
.fmt
|= HDF_IMAGE
;
707 hdi
.mask
|= HDI_FORMAT
;
710 if (lpcol
->mask
& LVCF_WIDTH
) {
711 hdi
.mask
|= HDI_WIDTH
;
715 if (lpcol
->mask
& LVCF_TEXT
) {
716 hdi
.mask
|= (HDI_TEXT
| HDI_FORMAT
);
717 hdi
.pszText
= lpcol
->pszText
;
718 hdi
.fmt
|= HDF_STRING
;
721 if (lpcol
->mask
& LVCF_IMAGE
) {
722 hdi
.mask
|= HDI_IMAGE
;
723 hdi
.iImage
= lpcol
->iImage
;
726 if (lpcol
->mask
& LVCF_ORDER
) {
727 hdi
.mask
|= HDI_ORDER
;
728 hdi
.iOrder
= lpcol
->iOrder
;
731 return (LRESULT
)SendMessage32A (infoPtr
->hwndHeader
, HDM_SETITEM32A
,
732 wParam
, (LPARAM
)&hdi
);
739 LISTVIEW_SetImageList (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
741 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
742 HIMAGELIST himlTemp
= 0;
744 TRACE (listview
, "(0x%08x 0x%08lx)\n", wParam
, lParam
);
748 himlTemp
= infoPtr
->himlNormal
;
749 infoPtr
->himlNormal
= (HIMAGELIST
)lParam
;
750 return (LRESULT
)himlTemp
;
753 himlTemp
= infoPtr
->himlSmall
;
754 infoPtr
->himlSmall
= (HIMAGELIST
)lParam
;
755 return (LRESULT
)himlTemp
;
758 himlTemp
= infoPtr
->himlState
;
759 infoPtr
->himlState
= (HIMAGELIST
)lParam
;
760 return (LRESULT
)himlTemp
;
763 return (LRESULT
)NULL
;
769 LISTVIEW_SetItem32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
771 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
772 LPLVITEM32A lpItem
= (LPLVITEM32A
)lParam
;
773 LISTVIEW_ITEM
*lpRow
, *lpSubItem
;
779 if ((lpItem
->iItem
< 0) || (lpItem
->iItem
>= infoPtr
->nItemCount
))
782 if ((lpItem
->iSubItem
< 0) || (lpItem
->iSubItem
>= infoPtr
->nColumnCount
))
785 /* send LVN_ITEMCHANGING notification */
786 ZeroMemory (&nmlv
, sizeof (NMLISTVIEW
));
787 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
788 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
789 nmlv
.hdr
.code
= LVN_ITEMCHANGING
;
790 nmlv
.iItem
= lpItem
->iItem
;
791 nmlv
.iSubItem
= lpItem
->iSubItem
;
792 nmlv
.uChanged
= lpItem
->mask
;
794 if (!SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
795 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
))
798 TRACE (listview
, "(%d %d %p)\n",
799 lpItem
->iItem
, lpItem
->iSubItem
, lpItem
);
801 lpRow
= DPA_GetPtr (infoPtr
->hdpaItems
, lpItem
->iItem
);
805 lpSubItem
= &lpRow
[lpItem
->iSubItem
];
809 if (lpItem
->mask
& LVIF_STATE
)
810 lpSubItem
->state
= (lpSubItem
->state
& lpItem
->stateMask
) | lpItem
->state
;
812 if (lpItem
->mask
& LVIF_TEXT
) {
813 if (lpItem
->pszText
== LPSTR_TEXTCALLBACK32A
) {
814 if ((lpSubItem
->pszText
) &&
815 (lpSubItem
->pszText
!= LPSTR_TEXTCALLBACK32A
))
816 COMCTL32_Free (lpSubItem
->pszText
);
817 lpSubItem
->pszText
= LPSTR_TEXTCALLBACK32A
;
820 if (lpSubItem
->pszText
== LPSTR_TEXTCALLBACK32A
)
821 lpSubItem
->pszText
= NULL
;
822 Str_SetPtr32A (&lpSubItem
->pszText
, lpItem
->pszText
);
826 if (lpItem
->mask
& LVIF_IMAGE
)
827 lpSubItem
->iImage
= lpItem
->iImage
;
829 if (lpItem
->mask
& LVIF_PARAM
)
830 lpSubItem
->lParam
= lpItem
->lParam
;
832 if (lpItem
->mask
& LVIF_INDENT
)
833 lpSubItem
->iIndent
= lpItem
->iIndent
;
835 /* send LVN_ITEMCHANGED notification */
836 nmlv
.hdr
.code
= LVN_ITEMCHANGED
;
837 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
838 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
844 // << LISTVIEW_SetItem32W >>
845 // << LISTVIEW_SetItemCount >>
849 LISTVIEW_SetItemPosition (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
851 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
852 INT32 nIndex
= (INT32
)wParam
;
854 if ((nIndex
< 0) || (nIndex
>= infoPtr
->nItemCount
))
857 FIXME (listview
, "setting position [%d, %d]!\n",
858 (INT32
)LOWORD(lParam
), (INT32
)HIWORD(lParam
));
860 /* FIXME: set position */
867 LISTVIEW_SetTextBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
869 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
874 /* set text background color */
875 TRACE (listview
, "0x%06lx\n", (COLORREF
)lParam
);
876 infoPtr
->clrTextBk
= (COLORREF
)lParam
;
883 LISTVIEW_SetTextColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
885 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
891 TRACE (listview
, "0x%06lx\n", (COLORREF
)lParam
);
892 infoPtr
->clrText
= (COLORREF
)lParam
;
900 LISTVIEW_SortItems (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
902 // LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
904 FIXME (listview
, "empty stub!\n");
914 LISTVIEW_Create (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
916 /* info structure is created at NCCreate */
917 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
919 DWORD dwStyle
= WS_CHILD
| WS_VISIBLE
;
921 TRACE (listview
, "styles 0x%08lx 0x%08lx\n",
922 wndPtr
->dwStyle
, wndPtr
->dwExStyle
);
924 /* initialize info structure */
925 infoPtr
->clrBk
= CLR_NONE
;
926 infoPtr
->clrText
= RGB(0, 0, 0); /* preliminary */
927 infoPtr
->clrTextBk
= RGB(255, 255, 255); /* preliminary */
929 if (!(wndPtr
->dwStyle
& LVS_REPORT
) ||
930 (wndPtr
->dwStyle
& LVS_NOCOLUMNHEADER
))
931 dwStyle
|= HDS_HIDDEN
;
932 if (!(wndPtr
->dwStyle
& LVS_NOSORTHEADER
))
933 dwStyle
|= HDS_BUTTONS
;
936 infoPtr
->hwndHeader
=
937 CreateWindow32A (WC_HEADER32A
, "", dwStyle
,
938 0, 0, 0, 0, wndPtr
->hwndSelf
,
939 (HMENU32
)0, wndPtr
->hInstance
, NULL
);
941 /* get default font (icon title) */
942 SystemParametersInfo32A (SPI_GETICONTITLELOGFONT
, 0, &logFont
, 0);
943 infoPtr
->hDefaultFont
= CreateFontIndirect32A (&logFont
);
944 infoPtr
->hFont
= infoPtr
->hDefaultFont
;
946 /* set header font */
947 SendMessage32A (infoPtr
->hwndHeader
, WM_SETFONT
,
948 (WPARAM32
)infoPtr
->hFont
, (LPARAM
)TRUE
);
950 infoPtr
->hdpaItems
= DPA_Create (10);
957 LISTVIEW_Destroy (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
959 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
961 /* delete all items */
962 LISTVIEW_DeleteAllItems (wndPtr
);
965 DPA_Destroy (infoPtr
->hdpaItems
);
968 if (infoPtr
->hwndHeader
)
969 DestroyWindow32 (infoPtr
->hwndHeader
);
972 infoPtr
->hFont
= (HFONT32
)0;
973 if (infoPtr
->hDefaultFont
)
974 DeleteObject32 (infoPtr
->hDefaultFont
);
983 LISTVIEW_EraseBackground (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
985 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
987 if (infoPtr
->clrBk
== CLR_NONE
) {
988 return SendMessage32A (GetParent32 (wndPtr
->hwndSelf
),
989 WM_ERASEBKGND
, wParam
, lParam
);
992 HBRUSH32 hBrush
= CreateSolidBrush32 (infoPtr
->clrBk
);
993 FillRect32 ((HDC32
)wParam
, &infoPtr
->rcList
, hBrush
);
994 DeleteObject32 (hBrush
);
1002 __inline__
static LRESULT
1003 LISTVIEW_GetFont (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1005 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1007 return infoPtr
->hFont
;
1011 // << LISTVIEW_HScroll >>
1012 // << LISTVIEW_KeyDown >>
1016 LISTVIEW_KillFocus (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1018 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1021 FIXME (listview
, "semi stub!\n");
1023 nmh
.hwndFrom
= wndPtr
->hwndSelf
;
1024 nmh
.idFrom
= wndPtr
->wIDmenu
;
1025 nmh
.code
= NM_KILLFOCUS
;
1027 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1028 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmh
);
1030 infoPtr
->bFocus
= FALSE
;
1037 LISTVIEW_LButtonDblClk (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1039 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1042 FIXME (listview
, "semi stub!\n");
1044 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1045 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1046 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1047 nmlv
.hdr
.code
= NM_DBLCLK
;
1050 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1051 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1053 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1054 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1061 LISTVIEW_LButtonDown (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1063 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1066 FIXME (listview
, "semi stub!\n");
1068 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1069 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1070 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1071 nmlv
.hdr
.code
= NM_CLICK
;
1074 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1075 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1077 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1078 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1080 if (!infoPtr
->bFocus
)
1081 SetFocus32 (wndPtr
->hwndSelf
);
1088 LISTVIEW_NCCreate (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1090 LISTVIEW_INFO
*infoPtr
;
1092 /* allocate memory for info structure */
1093 infoPtr
= (LISTVIEW_INFO
*)COMCTL32_Alloc (sizeof(LISTVIEW_INFO
));
1094 wndPtr
->wExtra
[0] = (DWORD
)infoPtr
;
1096 if (infoPtr
== NULL
) {
1097 ERR (listview
, "could not allocate info memory!\n");
1101 if ((LISTVIEW_INFO
*)wndPtr
->wExtra
[0] != infoPtr
) {
1102 ERR (listview
, "pointer assignment error!\n");
1106 return DefWindowProc32A (wndPtr
->hwndSelf
, WM_NCCREATE
, wParam
, lParam
);
1111 LISTVIEW_NCDestroy (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1113 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1118 /* free list view info data */
1119 COMCTL32_Free (infoPtr
);
1126 LISTVIEW_Notify (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1128 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1129 LPNMHDR lpnmh
= (LPNMHDR
)lParam
;
1131 if (lpnmh
->hwndFrom
== infoPtr
->hwndHeader
) {
1133 FIXME (listview
, "WM_NOTIFY from header!\n");
1137 FIXME (listview
, "WM_NOTIFY from unknown source!\n");
1145 LISTVIEW_Paint (WND
*wndPtr
, WPARAM32 wParam
)
1150 hdc
= wParam
==0 ? BeginPaint32 (wndPtr
->hwndSelf
, &ps
) : (HDC32
)wParam
;
1151 LISTVIEW_Refresh (wndPtr
, hdc
);
1153 EndPaint32 (wndPtr
->hwndSelf
, &ps
);
1159 LISTVIEW_RButtonDblClk (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1161 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1164 FIXME (listview
, "semi stub!\n");
1166 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1167 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1168 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1169 nmlv
.hdr
.code
= NM_RDBLCLK
;
1172 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1173 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1175 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1176 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1183 LISTVIEW_RButtonDown (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1185 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1188 FIXME (listview
, "semi stub!\n");
1190 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1191 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1192 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1193 nmlv
.hdr
.code
= NM_RCLICK
;
1196 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1197 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1199 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1200 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1207 LISTVIEW_SetFocus (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1209 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1212 FIXME (listview
, "semi stub!\n");
1214 nmh
.hwndFrom
= wndPtr
->hwndSelf
;
1215 nmh
.idFrom
= wndPtr
->wIDmenu
;
1216 nmh
.code
= NM_SETFOCUS
;
1218 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1219 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmh
);
1221 infoPtr
->bFocus
= TRUE
;
1228 LISTVIEW_SetFont (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1230 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1231 HFONT32 hFont
= (HFONT32
)wParam
;
1233 infoPtr
->hFont
= hFont
? hFont
: infoPtr
->hDefaultFont
;
1235 /* set header font */
1236 SendMessage32A (infoPtr
->hwndHeader
, WM_SETFONT
, wParam
, lParam
);
1238 /* reinitialize the listview */
1255 LISTVIEW_Size (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1257 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1259 GetClientRect32 (wndPtr
->hwndSelf
, &infoPtr
->rcList
);
1261 if (wndPtr
->dwStyle
& LVS_REPORT
) {
1268 rc
.right
= LOWORD(lParam
);
1269 rc
.bottom
= HIWORD(lParam
);
1273 SendMessage32A (infoPtr
->hwndHeader
, HDM_LAYOUT
, 0, (LPARAM
)&hl
);
1275 SetWindowPos32 (infoPtr
->hwndHeader
, wndPtr
->hwndSelf
,
1276 wp
.x
, wp
.y
, wp
.cx
, wp
.cy
, wp
.flags
);
1278 infoPtr
->rcList
.top
+= wp
.cy
;
1286 LISTVIEW_WindowProc (HWND32 hwnd
, UINT32 uMsg
, WPARAM32 wParam
, LPARAM lParam
)
1288 WND
*wndPtr
= WIN_FindWndPtr(hwnd
);
1292 // case LVM_APPROXIMATEVIEWRECT:
1293 // case LVM_ARRANGE:
1294 // case LVM_CREATEDRAGIMAGE:
1296 case LVM_DELETEALLITEMS
:
1297 return LISTVIEW_DeleteAllItems (wndPtr
);
1299 case LVM_DELETECOLUMN
:
1300 return LISTVIEW_DeleteColumn (wndPtr
, wParam
, lParam
);
1302 case LVM_DELETEITEM
:
1303 return LISTVIEW_DeleteItem (wndPtr
, wParam
, lParam
);
1305 // case LVM_EDITLABEL:
1306 // case LVM_ENSUREVISIBLE:
1307 // case LVM_FINDITEM:
1309 case LVM_GETBKCOLOR
:
1310 return LISTVIEW_GetBkColor (wndPtr
, wParam
, lParam
);
1312 // case LVM_GETBKIMAGE:
1313 // case LVM_GETCALLBACKMASK:
1315 case LVM_GETCOLUMN32A
:
1316 return LISTVIEW_GetColumn32A (wndPtr
, wParam
, lParam
);
1318 // case LVM_GETCOLUMN32W:
1319 // case LVM_GETCOLUMNORDERARRAY:
1321 case LVM_GETCOLUMNWIDTH
:
1322 return LISTVIEW_GetColumnWidth (wndPtr
, wParam
, lParam
);
1324 // case LVM_GETCOUNTPERPAGE:
1325 // case LVM_GETEDITCONTROL:
1326 // case LVM_GETEXTENDEDLISTVIEWSTYLE:
1329 return LISTVIEW_GetHeader (wndPtr
, wParam
, lParam
);
1331 // case LVM_GETHOTCURSOR:
1332 // case LVM_GETHOTITEM:
1333 // case LVM_GETHOVERTIME:
1335 case LVM_GETIMAGELIST
:
1336 return LISTVIEW_GetImageList (wndPtr
, wParam
, lParam
);
1338 // case LVM_GETISEARCHSTRING:
1340 case LVM_GETITEM32A
:
1341 return LISTVIEW_GetItem32A (wndPtr
, wParam
, lParam
);
1343 // case LVM_GETITEM32W:
1345 case LVM_GETITEMCOUNT
:
1346 return LISTVIEW_GetItemCount (wndPtr
, wParam
, lParam
);
1348 case LVM_GETITEMPOSITION
:
1349 return LISTVIEW_GetItemPosition (wndPtr
, wParam
, lParam
);
1351 // case LVM_GETITEMRECT:
1352 // case LVM_GETITEMSPACING:
1353 // case LVM_GETITEMSTATE:
1355 case LVM_GETITEMTEXT32A
:
1356 return LISTVIEW_GetItemText32A (wndPtr
, wParam
, lParam
);
1358 // case LVM_GETITEMTEXT32W:
1360 case LVM_GETNEXTITEM
:
1361 return LISTVIEW_GetNextItem (wndPtr
, wParam
, lParam
);
1363 // case LVM_GETNUMBEROFWORKAREAS:
1364 // case LVM_GETORIGIN:
1366 case LVM_GETSELECTEDCOUNT
:
1367 return LISTVIEW_GetSelectedCount (wndPtr
, wParam
, lParam
);
1369 // case LVM_GETSELECTIONMARK:
1371 case LVM_GETSTRINGWIDTH32A
:
1372 return LISTVIEW_GetStringWidth32A (wndPtr
, wParam
, lParam
);
1374 // case LVM_GETSTRINGWIDTH32W:
1375 // case LVM_GETSUBITEMRECT:
1377 case LVM_GETTEXTBKCOLOR
:
1378 return LISTVIEW_GetTextBkColor (wndPtr
, wParam
, lParam
);
1380 case LVM_GETTEXTCOLOR
:
1381 return LISTVIEW_GetTextColor (wndPtr
, wParam
, lParam
);
1383 // case LVM_GETTOOLTIPS:
1384 // case LVM_GETTOPINDEX:
1385 // case LVM_GETUNICODEFORMAT:
1386 // case LVM_GETVIEWRECT:
1387 // case LVM_GETWORKAREAS:
1390 return LISTVIEW_HitTest (wndPtr
, wParam
, lParam
);
1392 case LVM_INSERTCOLUMN32A
:
1393 return LISTVIEW_InsertColumn32A (wndPtr
, wParam
, lParam
);
1395 // case LVM_INSERTCOLUMN32W:
1397 case LVM_INSERTITEM32A
:
1398 return LISTVIEW_InsertItem32A (wndPtr
, wParam
, lParam
);
1400 // case LVM_INSERTITEM32W:
1402 case LVM_REDRAWITEMS
:
1403 return LISTVIEW_RedrawItems (wndPtr
, wParam
, lParam
);
1407 case LVM_SETBKCOLOR
:
1408 return LISTVIEW_SetBkColor (wndPtr
, wParam
, lParam
);
1410 // case LVM_SETBKIMAGE:
1411 // case LVM_SETCALLBACKMASK:
1413 case LVM_SETCOLUMN32A
:
1414 return LISTVIEW_SetColumn32A (wndPtr
, wParam
, lParam
);
1416 // case LVM_SETCOLUMN32W:
1417 // case LVM_SETCOLUMNORDERARRAY:
1418 // case LVM_SETCOLUMNWIDTH:
1419 // case LVM_SETEXTENDEDLISTVIEWSTYLE:
1420 // case LVM_SETHOTCURSOR:
1421 // case LVM_SETHOTITEM:
1422 // case LVM_SETHOVERTIME:
1423 // case LVM_SETICONSPACING:
1425 case LVM_SETIMAGELIST
:
1426 return LISTVIEW_SetImageList (wndPtr
, wParam
, lParam
);
1428 case LVM_SETITEM32A
:
1429 return LISTVIEW_SetItem32A (wndPtr
, wParam
, lParam
);
1431 // case LVM_SETITEM32W:
1432 // case LVM_SETITEMCOUNT:
1434 case LVM_SETITEMPOSITION
:
1435 return LISTVIEW_SetItemPosition (wndPtr
, wParam
, lParam
);
1437 // case LVM_SETITEMPOSITION32:
1438 // case LVM_SETITEMSTATE:
1439 // case LVM_SETITEMTEXT:
1440 // case LVM_SETSELECTIONMARK:
1442 case LVM_SETTEXTBKCOLOR
:
1443 return LISTVIEW_SetTextBkColor (wndPtr
, wParam
, lParam
);
1445 case LVM_SETTEXTCOLOR
:
1446 return LISTVIEW_SetTextColor (wndPtr
, wParam
, lParam
);
1448 // case LVM_SETTOOLTIPS:
1449 // case LVM_SETUNICODEFORMAT:
1450 // case LVM_SETWORKAREAS:
1453 return LISTVIEW_SortItems (wndPtr
, wParam
, lParam
);
1455 // case LVM_SUBITEMHITTEST:
1464 return LISTVIEW_Create (wndPtr
, wParam
, lParam
);
1467 return LISTVIEW_Destroy (wndPtr
, wParam
, lParam
);
1470 return LISTVIEW_EraseBackground (wndPtr
, wParam
, lParam
);
1473 return DLGC_WANTTAB
| DLGC_WANTARROWS
;
1476 return LISTVIEW_GetFont (wndPtr
, wParam
, lParam
);
1482 return LISTVIEW_KillFocus (wndPtr
, wParam
, lParam
);
1484 case WM_LBUTTONDBLCLK
:
1485 return LISTVIEW_LButtonDblClk (wndPtr
, wParam
, lParam
);
1487 case WM_LBUTTONDOWN
:
1488 return LISTVIEW_LButtonDown (wndPtr
, wParam
, lParam
);
1490 // case WM_MOUSEMOVE:
1491 // return LISTVIEW_MouseMove (wndPtr, wParam, lParam);
1494 return LISTVIEW_NCCreate (wndPtr
, wParam
, lParam
);
1497 return LISTVIEW_NCDestroy (wndPtr
, wParam
, lParam
);
1500 return LISTVIEW_Notify (wndPtr
, wParam
, lParam
);
1503 return LISTVIEW_Paint (wndPtr
, wParam
);
1505 case WM_RBUTTONDBLCLK
:
1506 return LISTVIEW_RButtonDblClk (wndPtr
, wParam
, lParam
);
1508 case WM_RBUTTONDOWN
:
1509 return LISTVIEW_RButtonDown (wndPtr
, wParam
, lParam
);
1512 return LISTVIEW_SetFocus (wndPtr
, wParam
, lParam
);
1515 return LISTVIEW_SetFont (wndPtr
, wParam
, lParam
);
1517 // case WM_SETREDRAW:
1520 return LISTVIEW_Size (wndPtr
, wParam
, lParam
);
1524 // case WM_WINDOWPOSCHANGED:
1525 // case WM_WININICHANGE:
1528 if (uMsg
>= WM_USER
)
1529 ERR (listview
, "unknown msg %04x wp=%08x lp=%08lx\n",
1530 uMsg
, wParam
, lParam
);
1531 return DefWindowProc32A (hwnd
, uMsg
, wParam
, lParam
);
1538 LISTVIEW_Register (VOID
)
1540 WNDCLASS32A wndClass
;
1542 if (GlobalFindAtom32A (WC_LISTVIEW32A
)) return;
1544 ZeroMemory (&wndClass
, sizeof(WNDCLASS32A
));
1545 wndClass
.style
= CS_GLOBALCLASS
| CS_DBLCLKS
;
1546 wndClass
.lpfnWndProc
= (WNDPROC32
)LISTVIEW_WindowProc
;
1547 wndClass
.cbClsExtra
= 0;
1548 wndClass
.cbWndExtra
= sizeof(LISTVIEW_INFO
*);
1549 wndClass
.hCursor
= LoadCursor32A (0, IDC_ARROW32A
);
1550 wndClass
.hbrBackground
= (HBRUSH32
)(COLOR_WINDOW
+ 1);
1551 wndClass
.lpszClassName
= WC_LISTVIEW32A
;
1553 RegisterClass32A (&wndClass
);
1558 LISTVIEW_Unregister (VOID
)
1560 if (GlobalFindAtom32A (WC_LISTVIEW32A
))
1561 UnregisterClass32A (WC_LISTVIEW32A
, (HINSTANCE32
)NULL
);