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_InsertColumn32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
509 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
510 LPLVCOLUMN32A lpcol
= (LPLVCOLUMN32A
)lParam
;
511 INT32 nIndex
= (INT32
)wParam
;
515 if ((!lpcol
) || (infoPtr
->nItemCount
> 0))
518 FIXME (listview
, "(%d %p): semi stub!\n", nIndex
, lpcol
);
520 ZeroMemory (&hdi
, sizeof(HDITEM32A
));
522 if (lpcol
->mask
& LVCF_FMT
) {
525 else if (lpcol
->fmt
& LVCFMT_LEFT
)
527 else if (lpcol
->fmt
& LVCFMT_RIGHT
)
528 hdi
.fmt
|= HDF_RIGHT
;
529 else if (lpcol
->fmt
& LVCFMT_CENTER
)
530 hdi
.fmt
|= HDF_CENTER
;
532 if (lpcol
->fmt
& LVCFMT_COL_HAS_IMAGES
)
533 hdi
.fmt
|= HDF_IMAGE
;
535 hdi
.mask
|= HDI_FORMAT
;
538 if (lpcol
->mask
& LVCF_WIDTH
) {
539 hdi
.mask
|= HDI_WIDTH
;
543 if (lpcol
->mask
& LVCF_TEXT
) {
544 hdi
.mask
|= (HDI_TEXT
| HDI_FORMAT
);
545 hdi
.pszText
= lpcol
->pszText
;
546 hdi
.fmt
|= HDF_STRING
;
549 if (lpcol
->mask
& LVCF_IMAGE
) {
550 hdi
.mask
|= HDI_IMAGE
;
551 hdi
.iImage
= lpcol
->iImage
;
554 if (lpcol
->mask
& LVCF_ORDER
) {
555 hdi
.mask
|= HDI_ORDER
;
556 hdi
.iOrder
= lpcol
->iOrder
;
559 nResult
= SendMessage32A (infoPtr
->hwndHeader
, HDM_INSERTITEM32A
,
560 wParam
, (LPARAM
)&hdi
);
564 infoPtr
->nColumnCount
++;
570 // << LISTVIEW_InsertColumn32W >>
574 LISTVIEW_InsertItem32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
576 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
577 LPLVITEM32A lpItem
= (LPLVITEM32A
)lParam
;
578 LISTVIEW_ITEM
*lpListItem
;
585 if ((!infoPtr
->nColumnCount
) || (lpItem
->iSubItem
))
588 FIXME (listview
, "(%d %p)\n", lpItem
->iItem
, lpItem
);
589 FIXME (listview
, "(%p %p)\n", infoPtr
, infoPtr
->hdpaItems
);
591 lpListItem
= (LISTVIEW_ITEM
*)COMCTL32_Alloc (infoPtr
->nColumnCount
* sizeof(LISTVIEW_ITEM
));
592 nIndex
= DPA_InsertPtr (infoPtr
->hdpaItems
, lpItem
->iItem
, lpListItem
);
596 if (lpItem
->mask
& LVIF_STATE
)
597 lpListItem
[0].state
= lpItem
->state
;
599 if (lpItem
->mask
& LVIF_TEXT
) {
600 if (lpItem
->pszText
== LPSTR_TEXTCALLBACK32A
)
601 lpListItem
[0].pszText
= LPSTR_TEXTCALLBACK32A
;
603 Str_SetPtr32A (&lpListItem
[0].pszText
, lpItem
->pszText
);
606 if (lpItem
->mask
& LVIF_IMAGE
)
607 lpListItem
[0].iImage
= lpItem
->iImage
;
609 if (lpItem
->mask
& LVIF_PARAM
)
610 lpListItem
[0].lParam
= lpItem
->lParam
;
612 if (lpItem
->mask
& LVIF_INDENT
)
613 lpListItem
[0].iIndent
= lpItem
->iIndent
;
615 infoPtr
->nItemCount
++;
617 /* send notification */
618 ZeroMemory (&nmlv
, sizeof (NMLISTVIEW
));
619 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
620 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
621 nmlv
.hdr
.code
= LVN_INSERTITEM
;
623 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
624 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
630 // << LISTVIEW_InsertItem32W >>
634 LISTVIEW_RedrawItems (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
636 // LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
638 FIXME (listview
, "(%d - %d): empty stub!\n",
639 (INT32
)wParam
, (INT32
)lParam
);
647 LISTVIEW_SetBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
649 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
654 /* set background color */
655 TRACE (listview
, "0x%06lx\n", (COLORREF
)lParam
);
656 infoPtr
->clrBk
= (COLORREF
)lParam
;
663 LISTVIEW_SetColumn32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
665 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
666 LPLVCOLUMN32A lpcol
= (LPLVCOLUMN32A
)lParam
;
667 INT32 nIndex
= (INT32
)wParam
;
673 FIXME (listview
, "(%d %p): semi stub!\n", nIndex
, lpcol
);
675 ZeroMemory (&hdi
, sizeof(HDITEM32A
));
677 if (lpcol
->mask
& LVCF_FMT
) {
680 else if (lpcol
->fmt
& LVCFMT_LEFT
)
682 else if (lpcol
->fmt
& LVCFMT_RIGHT
)
683 hdi
.fmt
|= HDF_RIGHT
;
684 else if (lpcol
->fmt
& LVCFMT_CENTER
)
685 hdi
.fmt
|= HDF_CENTER
;
687 if (lpcol
->fmt
& LVCFMT_COL_HAS_IMAGES
)
688 hdi
.fmt
|= HDF_IMAGE
;
690 hdi
.mask
|= HDI_FORMAT
;
693 if (lpcol
->mask
& LVCF_WIDTH
) {
694 hdi
.mask
|= HDI_WIDTH
;
698 if (lpcol
->mask
& LVCF_TEXT
) {
699 hdi
.mask
|= (HDI_TEXT
| HDI_FORMAT
);
700 hdi
.pszText
= lpcol
->pszText
;
701 hdi
.fmt
|= HDF_STRING
;
704 if (lpcol
->mask
& LVCF_IMAGE
) {
705 hdi
.mask
|= HDI_IMAGE
;
706 hdi
.iImage
= lpcol
->iImage
;
709 if (lpcol
->mask
& LVCF_ORDER
) {
710 hdi
.mask
|= HDI_ORDER
;
711 hdi
.iOrder
= lpcol
->iOrder
;
714 return (LRESULT
)SendMessage32A (infoPtr
->hwndHeader
, HDM_SETITEM32A
,
715 wParam
, (LPARAM
)&hdi
);
722 LISTVIEW_SetImageList (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
724 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
725 HIMAGELIST himlTemp
= 0;
727 TRACE (listview
, "(0x%08x 0x%08lx)\n", wParam
, lParam
);
731 himlTemp
= infoPtr
->himlNormal
;
732 infoPtr
->himlNormal
= (HIMAGELIST
)lParam
;
733 return (LRESULT
)himlTemp
;
736 himlTemp
= infoPtr
->himlSmall
;
737 infoPtr
->himlSmall
= (HIMAGELIST
)lParam
;
738 return (LRESULT
)himlTemp
;
741 himlTemp
= infoPtr
->himlState
;
742 infoPtr
->himlState
= (HIMAGELIST
)lParam
;
743 return (LRESULT
)himlTemp
;
746 return (LRESULT
)NULL
;
752 LISTVIEW_SetItem32A (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
754 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
755 LPLVITEM32A lpItem
= (LPLVITEM32A
)lParam
;
756 LISTVIEW_ITEM
*lpRow
, *lpSubItem
;
762 if ((lpItem
->iItem
< 0) || (lpItem
->iItem
>= infoPtr
->nItemCount
))
765 if ((lpItem
->iSubItem
< 0) || (lpItem
->iSubItem
>= infoPtr
->nColumnCount
))
768 /* send LVN_ITEMCHANGING notification */
769 ZeroMemory (&nmlv
, sizeof (NMLISTVIEW
));
770 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
771 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
772 nmlv
.hdr
.code
= LVN_ITEMCHANGING
;
773 nmlv
.iItem
= lpItem
->iItem
;
774 nmlv
.iSubItem
= lpItem
->iSubItem
;
775 nmlv
.uChanged
= lpItem
->mask
;
777 if (!SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
778 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
))
781 TRACE (listview
, "(%d %d %p)\n",
782 lpItem
->iItem
, lpItem
->iSubItem
, lpItem
);
784 lpRow
= DPA_GetPtr (infoPtr
->hdpaItems
, lpItem
->iItem
);
788 lpSubItem
= &lpRow
[lpItem
->iSubItem
];
792 if (lpItem
->mask
& LVIF_STATE
)
793 lpSubItem
->state
= (lpSubItem
->state
& lpItem
->stateMask
) | lpItem
->state
;
795 if (lpItem
->mask
& LVIF_TEXT
) {
796 if (lpItem
->pszText
== LPSTR_TEXTCALLBACK32A
) {
797 if ((lpSubItem
->pszText
) &&
798 (lpSubItem
->pszText
!= LPSTR_TEXTCALLBACK32A
))
799 COMCTL32_Free (lpSubItem
->pszText
);
800 lpSubItem
->pszText
= LPSTR_TEXTCALLBACK32A
;
803 if (lpSubItem
->pszText
== LPSTR_TEXTCALLBACK32A
)
804 lpSubItem
->pszText
= NULL
;
805 Str_SetPtr32A (&lpSubItem
->pszText
, lpItem
->pszText
);
809 if (lpItem
->mask
& LVIF_IMAGE
)
810 lpSubItem
->iImage
= lpItem
->iImage
;
812 if (lpItem
->mask
& LVIF_PARAM
)
813 lpSubItem
->lParam
= lpItem
->lParam
;
815 if (lpItem
->mask
& LVIF_INDENT
)
816 lpSubItem
->iIndent
= lpItem
->iIndent
;
818 /* send LVN_ITEMCHANGED notification */
819 nmlv
.hdr
.code
= LVN_ITEMCHANGED
;
820 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
821 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
827 // << LISTVIEW_SetItem32W >>
828 // << LISTVIEW_SetItemCount >>
832 LISTVIEW_SetItemPosition (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
834 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
835 INT32 nIndex
= (INT32
)wParam
;
837 if ((nIndex
< 0) || (nIndex
>= infoPtr
->nItemCount
))
840 FIXME (listview
, "setting position [%d, %d]!\n",
841 (INT32
)LOWORD(lParam
), (INT32
)HIWORD(lParam
));
843 /* FIXME: set position */
850 LISTVIEW_SetTextBkColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
852 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
857 /* set text background color */
858 TRACE (listview
, "0x%06lx\n", (COLORREF
)lParam
);
859 infoPtr
->clrTextBk
= (COLORREF
)lParam
;
866 LISTVIEW_SetTextColor (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
868 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
874 TRACE (listview
, "0x%06lx\n", (COLORREF
)lParam
);
875 infoPtr
->clrText
= (COLORREF
)lParam
;
883 LISTVIEW_SortItems (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
885 // LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
887 FIXME (listview
, "empty stub!\n");
897 LISTVIEW_Create (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
899 /* info structure is created at NCCreate */
900 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
902 DWORD dwStyle
= WS_CHILD
| WS_VISIBLE
;
904 TRACE (listview
, "styles 0x%08lx 0x%08lx\n",
905 wndPtr
->dwStyle
, wndPtr
->dwExStyle
);
907 /* initialize info structure */
908 infoPtr
->clrBk
= CLR_NONE
;
909 infoPtr
->clrText
= RGB(0, 0, 0); /* preliminary */
910 infoPtr
->clrTextBk
= RGB(255, 255, 255); /* preliminary */
912 if (!(wndPtr
->dwStyle
& LVS_REPORT
) ||
913 (wndPtr
->dwStyle
& LVS_NOCOLUMNHEADER
))
914 dwStyle
|= HDS_HIDDEN
;
915 if (!(wndPtr
->dwStyle
& LVS_NOSORTHEADER
))
916 dwStyle
|= HDS_BUTTONS
;
919 infoPtr
->hwndHeader
=
920 CreateWindow32A (WC_HEADER32A
, "", dwStyle
,
921 0, 0, 0, 0, wndPtr
->hwndSelf
,
922 (HMENU32
)0, wndPtr
->hInstance
, NULL
);
924 /* get default font (icon title) */
925 SystemParametersInfo32A (SPI_GETICONTITLELOGFONT
, 0, &logFont
, 0);
926 infoPtr
->hDefaultFont
= CreateFontIndirect32A (&logFont
);
927 infoPtr
->hFont
= infoPtr
->hDefaultFont
;
929 /* set header font */
930 SendMessage32A (infoPtr
->hwndHeader
, WM_SETFONT
,
931 (WPARAM32
)infoPtr
->hFont
, (LPARAM
)TRUE
);
933 infoPtr
->hdpaItems
= DPA_Create (10);
940 LISTVIEW_Destroy (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
942 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
944 /* delete all items */
945 LISTVIEW_DeleteAllItems (wndPtr
);
948 DPA_Destroy (infoPtr
->hdpaItems
);
951 if (infoPtr
->hwndHeader
)
952 DestroyWindow32 (infoPtr
->hwndHeader
);
955 infoPtr
->hFont
= (HFONT32
)0;
956 if (infoPtr
->hDefaultFont
)
957 DeleteObject32 (infoPtr
->hDefaultFont
);
966 LISTVIEW_EraseBackground (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
968 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
970 if (infoPtr
->clrBk
== CLR_NONE
) {
971 return SendMessage32A (GetParent32 (wndPtr
->hwndSelf
),
972 WM_ERASEBKGND
, wParam
, lParam
);
975 HBRUSH32 hBrush
= CreateSolidBrush32 (infoPtr
->clrBk
);
976 FillRect32 ((HDC32
)wParam
, &infoPtr
->rcList
, hBrush
);
977 DeleteObject32 (hBrush
);
985 __inline__
static LRESULT
986 LISTVIEW_GetFont (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
988 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
990 return infoPtr
->hFont
;
994 // << LISTVIEW_HScroll >>
995 // << LISTVIEW_KeyDown >>
999 LISTVIEW_KillFocus (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1001 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1004 FIXME (listview
, "semi stub!\n");
1006 nmh
.hwndFrom
= wndPtr
->hwndSelf
;
1007 nmh
.idFrom
= wndPtr
->wIDmenu
;
1008 nmh
.code
= NM_KILLFOCUS
;
1010 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1011 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmh
);
1013 infoPtr
->bFocus
= FALSE
;
1020 LISTVIEW_LButtonDblClk (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1022 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1025 FIXME (listview
, "semi stub!\n");
1027 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1028 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1029 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1030 nmlv
.hdr
.code
= NM_DBLCLK
;
1033 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1034 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1036 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1037 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1044 LISTVIEW_LButtonDown (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1046 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1049 FIXME (listview
, "semi stub!\n");
1051 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1052 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1053 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1054 nmlv
.hdr
.code
= NM_CLICK
;
1057 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1058 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1060 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1061 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1063 if (!infoPtr
->bFocus
)
1064 SetFocus32 (wndPtr
->hwndSelf
);
1071 LISTVIEW_NCCreate (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1073 LISTVIEW_INFO
*infoPtr
;
1075 /* allocate memory for info structure */
1076 infoPtr
= (LISTVIEW_INFO
*)COMCTL32_Alloc (sizeof(LISTVIEW_INFO
));
1077 wndPtr
->wExtra
[0] = (DWORD
)infoPtr
;
1079 if (infoPtr
== NULL
) {
1080 ERR (listview
, "could not allocate info memory!\n");
1084 if ((LISTVIEW_INFO
*)wndPtr
->wExtra
[0] != infoPtr
) {
1085 ERR (listview
, "pointer assignment error!\n");
1089 return DefWindowProc32A (wndPtr
->hwndSelf
, WM_NCCREATE
, wParam
, lParam
);
1094 LISTVIEW_NCDestroy (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1096 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1101 /* free list view info data */
1102 COMCTL32_Free (infoPtr
);
1109 LISTVIEW_Notify (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1111 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1112 LPNMHDR lpnmh
= (LPNMHDR
)lParam
;
1114 if (lpnmh
->hwndFrom
== infoPtr
->hwndHeader
) {
1116 FIXME (listview
, "WM_NOTIFY from header!\n");
1120 FIXME (listview
, "WM_NOTIFY from unknown source!\n");
1128 LISTVIEW_Paint (WND
*wndPtr
, WPARAM32 wParam
)
1133 hdc
= wParam
==0 ? BeginPaint32 (wndPtr
->hwndSelf
, &ps
) : (HDC32
)wParam
;
1134 LISTVIEW_Refresh (wndPtr
, hdc
);
1136 EndPaint32 (wndPtr
->hwndSelf
, &ps
);
1142 LISTVIEW_RButtonDblClk (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1144 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1147 FIXME (listview
, "semi stub!\n");
1149 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1150 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1151 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1152 nmlv
.hdr
.code
= NM_RDBLCLK
;
1155 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1156 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1158 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1159 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1166 LISTVIEW_RButtonDown (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1168 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1171 FIXME (listview
, "semi stub!\n");
1173 ZeroMemory (&nmlv
, sizeof(NMLISTVIEW
));
1174 nmlv
.hdr
.hwndFrom
= wndPtr
->hwndSelf
;
1175 nmlv
.hdr
.idFrom
= wndPtr
->wIDmenu
;
1176 nmlv
.hdr
.code
= NM_RCLICK
;
1179 nmlv
.ptAction
.x
= (INT32
)LOWORD(lParam
);
1180 nmlv
.ptAction
.y
= (INT32
)HIWORD(lParam
);
1182 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1183 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmlv
);
1190 LISTVIEW_SetFocus (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1192 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1195 FIXME (listview
, "semi stub!\n");
1197 nmh
.hwndFrom
= wndPtr
->hwndSelf
;
1198 nmh
.idFrom
= wndPtr
->wIDmenu
;
1199 nmh
.code
= NM_SETFOCUS
;
1201 SendMessage32A (GetParent32 (wndPtr
->hwndSelf
), WM_NOTIFY
,
1202 (WPARAM32
)wndPtr
->wIDmenu
, (LPARAM
)&nmh
);
1204 infoPtr
->bFocus
= TRUE
;
1211 LISTVIEW_SetFont (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1213 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1214 HFONT32 hFont
= (HFONT32
)wParam
;
1216 infoPtr
->hFont
= hFont
? hFont
: infoPtr
->hDefaultFont
;
1218 /* set header font */
1219 SendMessage32A (infoPtr
->hwndHeader
, WM_SETFONT
, wParam
, lParam
);
1221 /* reinitialize the listview */
1238 LISTVIEW_Size (WND
*wndPtr
, WPARAM32 wParam
, LPARAM lParam
)
1240 LISTVIEW_INFO
*infoPtr
= LISTVIEW_GetInfoPtr(wndPtr
);
1242 GetClientRect32 (wndPtr
->hwndSelf
, &infoPtr
->rcList
);
1244 if (wndPtr
->dwStyle
& LVS_REPORT
) {
1251 rc
.right
= LOWORD(lParam
);
1252 rc
.bottom
= HIWORD(lParam
);
1256 SendMessage32A (infoPtr
->hwndHeader
, HDM_LAYOUT
, 0, (LPARAM
)&hl
);
1258 SetWindowPos32 (infoPtr
->hwndHeader
, wndPtr
->hwndSelf
,
1259 wp
.x
, wp
.y
, wp
.cx
, wp
.cy
, wp
.flags
);
1261 infoPtr
->rcList
.top
+= wp
.cy
;
1269 LISTVIEW_WindowProc (HWND32 hwnd
, UINT32 uMsg
, WPARAM32 wParam
, LPARAM lParam
)
1271 WND
*wndPtr
= WIN_FindWndPtr(hwnd
);
1275 // case LVM_APPROXIMATEVIEWRECT:
1276 // case LVM_ARRANGE:
1277 // case LVM_CREATEDRAGIMAGE:
1279 case LVM_DELETEALLITEMS
:
1280 return LISTVIEW_DeleteAllItems (wndPtr
);
1282 case LVM_DELETECOLUMN
:
1283 return LISTVIEW_DeleteColumn (wndPtr
, wParam
, lParam
);
1285 case LVM_DELETEITEM
:
1286 return LISTVIEW_DeleteItem (wndPtr
, wParam
, lParam
);
1288 // case LVM_EDITLABEL:
1289 // case LVM_ENSUREVISIBLE:
1290 // case LVM_FINDITEM:
1292 case LVM_GETBKCOLOR
:
1293 return LISTVIEW_GetBkColor (wndPtr
, wParam
, lParam
);
1295 // case LVM_GETBKIMAGE:
1296 // case LVM_GETCALLBACKMASK:
1298 case LVM_GETCOLUMN32A
:
1299 return LISTVIEW_GetColumn32A (wndPtr
, wParam
, lParam
);
1301 // case LVM_GETCOLUMN32W:
1302 // case LVM_GETCOLUMNORDERARRAY:
1304 case LVM_GETCOLUMNWIDTH
:
1305 return LISTVIEW_GetColumnWidth (wndPtr
, wParam
, lParam
);
1307 // case LVM_GETCOUNTPERPAGE:
1308 // case LVM_GETEDITCONTROL:
1309 // case LVM_GETEXTENDEDLISTVIEWSTYLE:
1312 return LISTVIEW_GetHeader (wndPtr
, wParam
, lParam
);
1314 // case LVM_GETHOTCURSOR:
1315 // case LVM_GETHOTITEM:
1316 // case LVM_GETHOVERTIME:
1318 case LVM_GETIMAGELIST
:
1319 return LISTVIEW_GetImageList (wndPtr
, wParam
, lParam
);
1321 // case LVM_GETISEARCHSTRING:
1323 case LVM_GETITEM32A
:
1324 return LISTVIEW_GetItem32A (wndPtr
, wParam
, lParam
);
1326 // case LVM_GETITEM32W:
1328 case LVM_GETITEMCOUNT
:
1329 return LISTVIEW_GetItemCount (wndPtr
, wParam
, lParam
);
1331 case LVM_GETITEMPOSITION
:
1332 return LISTVIEW_GetItemPosition (wndPtr
, wParam
, lParam
);
1334 // case LVM_GETITEMRECT:
1335 // case LVM_GETITEMSPACING:
1336 // case LVM_GETITEMSTATE:
1338 case LVM_GETITEMTEXT32A
:
1339 return LISTVIEW_GetItemText32A (wndPtr
, wParam
, lParam
);
1341 // case LVM_GETITEMTEXT32W:
1343 case LVM_GETNEXTITEM
:
1344 return LISTVIEW_GetNextItem (wndPtr
, wParam
, lParam
);
1346 // case LVM_GETNUMBEROFWORKAREAS:
1347 // case LVM_GETORIGIN:
1349 case LVM_GETSELECTEDCOUNT
:
1350 return LISTVIEW_GetSelectedCount (wndPtr
, wParam
, lParam
);
1352 // case LVM_GETSELECTIONMARK:
1354 case LVM_GETSTRINGWIDTH32A
:
1355 return LISTVIEW_GetStringWidth32A (wndPtr
, wParam
, lParam
);
1357 // case LVM_GETSTRINGWIDTH32W:
1358 // case LVM_GETSUBITEMRECT:
1360 case LVM_GETTEXTBKCOLOR
:
1361 return LISTVIEW_GetTextBkColor (wndPtr
, wParam
, lParam
);
1363 case LVM_GETTEXTCOLOR
:
1364 return LISTVIEW_GetTextColor (wndPtr
, wParam
, lParam
);
1366 // case LVM_GETTOOLTIPS:
1367 // case LVM_GETTOPINDEX:
1368 // case LVM_GETUNICODEFORMAT:
1369 // case LVM_GETVIEWRECT:
1370 // case LVM_GETWORKAREAS:
1371 // case LVM_HITTEST:
1373 case LVM_INSERTCOLUMN32A
:
1374 return LISTVIEW_InsertColumn32A (wndPtr
, wParam
, lParam
);
1376 // case LVM_INSERTCOLUMN32W:
1378 case LVM_INSERTITEM32A
:
1379 return LISTVIEW_InsertItem32A (wndPtr
, wParam
, lParam
);
1381 // case LVM_INSERTITEM32W:
1383 case LVM_REDRAWITEMS
:
1384 return LISTVIEW_RedrawItems (wndPtr
, wParam
, lParam
);
1388 case LVM_SETBKCOLOR
:
1389 return LISTVIEW_SetBkColor (wndPtr
, wParam
, lParam
);
1391 // case LVM_SETBKIMAGE:
1392 // case LVM_SETCALLBACKMASK:
1394 case LVM_SETCOLUMN32A
:
1395 return LISTVIEW_SetColumn32A (wndPtr
, wParam
, lParam
);
1397 // case LVM_SETCOLUMN32W:
1398 // case LVM_SETCOLUMNORDERARRAY:
1399 // case LVM_SETCOLUMNWIDTH:
1400 // case LVM_SETEXTENDEDLISTVIEWSTYLE:
1401 // case LVM_SETHOTCURSOR:
1402 // case LVM_SETHOTITEM:
1403 // case LVM_SETHOVERTIME:
1404 // case LVM_SETICONSPACING:
1406 case LVM_SETIMAGELIST
:
1407 return LISTVIEW_SetImageList (wndPtr
, wParam
, lParam
);
1409 case LVM_SETITEM32A
:
1410 return LISTVIEW_SetItem32A (wndPtr
, wParam
, lParam
);
1412 // case LVM_SETITEM32W:
1413 // case LVM_SETITEMCOUNT:
1415 case LVM_SETITEMPOSITION
:
1416 return LISTVIEW_SetItemPosition (wndPtr
, wParam
, lParam
);
1418 // case LVM_SETITEMPOSITION32:
1419 // case LVM_SETITEMSTATE:
1420 // case LVM_SETITEMTEXT:
1421 // case LVM_SETSELECTIONMARK:
1423 case LVM_SETTEXTBKCOLOR
:
1424 return LISTVIEW_SetTextBkColor (wndPtr
, wParam
, lParam
);
1426 case LVM_SETTEXTCOLOR
:
1427 return LISTVIEW_SetTextColor (wndPtr
, wParam
, lParam
);
1429 // case LVM_SETTOOLTIPS:
1430 // case LVM_SETUNICODEFORMAT:
1431 // case LVM_SETWORKAREAS:
1434 return LISTVIEW_SortItems (wndPtr
, wParam
, lParam
);
1436 // case LVM_SUBITEMHITTEST:
1445 return LISTVIEW_Create (wndPtr
, wParam
, lParam
);
1448 return LISTVIEW_Destroy (wndPtr
, wParam
, lParam
);
1451 return LISTVIEW_EraseBackground (wndPtr
, wParam
, lParam
);
1454 return DLGC_WANTTAB
| DLGC_WANTARROWS
;
1457 return LISTVIEW_GetFont (wndPtr
, wParam
, lParam
);
1463 return LISTVIEW_KillFocus (wndPtr
, wParam
, lParam
);
1465 case WM_LBUTTONDBLCLK
:
1466 return LISTVIEW_LButtonDblClk (wndPtr
, wParam
, lParam
);
1468 case WM_LBUTTONDOWN
:
1469 return LISTVIEW_LButtonDown (wndPtr
, wParam
, lParam
);
1471 // case WM_MOUSEMOVE:
1472 // return LISTVIEW_MouseMove (wndPtr, wParam, lParam);
1475 return LISTVIEW_NCCreate (wndPtr
, wParam
, lParam
);
1478 return LISTVIEW_NCDestroy (wndPtr
, wParam
, lParam
);
1481 return LISTVIEW_Notify (wndPtr
, wParam
, lParam
);
1484 return LISTVIEW_Paint (wndPtr
, wParam
);
1486 case WM_RBUTTONDBLCLK
:
1487 return LISTVIEW_RButtonDblClk (wndPtr
, wParam
, lParam
);
1489 case WM_RBUTTONDOWN
:
1490 return LISTVIEW_RButtonDown (wndPtr
, wParam
, lParam
);
1493 return LISTVIEW_SetFocus (wndPtr
, wParam
, lParam
);
1496 return LISTVIEW_SetFont (wndPtr
, wParam
, lParam
);
1498 // case WM_SETREDRAW:
1501 return LISTVIEW_Size (wndPtr
, wParam
, lParam
);
1505 // case WM_WINDOWPOSCHANGED:
1506 // case WM_WININICHANGE:
1509 if (uMsg
>= WM_USER
)
1510 ERR (listview
, "unknown msg %04x wp=%08x lp=%08lx\n",
1511 uMsg
, wParam
, lParam
);
1512 return DefWindowProc32A (hwnd
, uMsg
, wParam
, lParam
);
1519 LISTVIEW_Register (VOID
)
1521 WNDCLASS32A wndClass
;
1523 if (GlobalFindAtom32A (WC_LISTVIEW32A
)) return;
1525 ZeroMemory (&wndClass
, sizeof(WNDCLASS32A
));
1526 wndClass
.style
= CS_GLOBALCLASS
| CS_DBLCLKS
;
1527 wndClass
.lpfnWndProc
= (WNDPROC32
)LISTVIEW_WindowProc
;
1528 wndClass
.cbClsExtra
= 0;
1529 wndClass
.cbWndExtra
= sizeof(LISTVIEW_INFO
*);
1530 wndClass
.hCursor
= LoadCursor32A (0, IDC_ARROW32A
);
1531 wndClass
.hbrBackground
= (HBRUSH32
)(COLOR_WINDOW
+ 1);
1532 wndClass
.lpszClassName
= WC_LISTVIEW32A
;
1534 RegisterClass32A (&wndClass
);
1539 LISTVIEW_Unregister (VOID
)
1541 if (GlobalFindAtom32A (WC_LISTVIEW32A
))
1542 UnregisterClass32A (WC_LISTVIEW32A
, (HINSTANCE32
)NULL
);