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);
663 << LISTVIEW_Scroll >>
668 LISTVIEW_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
670 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
675 /* set background color */
676 TRACE (listview, "0x%06lx\n", (COLORREF)lParam);
677 infoPtr->clrBk = (COLORREF)lParam;
684 << LISTVIEW_SetBkImage >>
685 << LISTVIEW_SetCallbackMask >>
690 LISTVIEW_SetColumn32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
692 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
693 LPLVCOLUMN32A lpcol = (LPLVCOLUMN32A)lParam;
694 INT32 nIndex = (INT32)wParam;
700 FIXME (listview, "(%d %p): semi stub!\n", nIndex, lpcol);
702 ZeroMemory (&hdi, sizeof(HDITEM32A));
704 if (lpcol->mask & LVCF_FMT) {
707 else if (lpcol->fmt & LVCFMT_LEFT)
709 else if (lpcol->fmt & LVCFMT_RIGHT)
710 hdi.fmt |= HDF_RIGHT;
711 else if (lpcol->fmt & LVCFMT_CENTER)
712 hdi.fmt |= HDF_CENTER;
714 if (lpcol->fmt & LVCFMT_COL_HAS_IMAGES)
715 hdi.fmt |= HDF_IMAGE;
717 hdi.mask |= HDI_FORMAT;
720 if (lpcol->mask & LVCF_WIDTH) {
721 hdi.mask |= HDI_WIDTH;
725 if (lpcol->mask & LVCF_TEXT) {
726 hdi.mask |= (HDI_TEXT | HDI_FORMAT);
727 hdi.pszText = lpcol->pszText;
728 hdi.fmt |= HDF_STRING;
731 if (lpcol->mask & LVCF_IMAGE) {
732 hdi.mask |= HDI_IMAGE;
733 hdi.iImage = lpcol->iImage;
736 if (lpcol->mask & LVCF_ORDER) {
737 hdi.mask |= HDI_ORDER;
738 hdi.iOrder = lpcol->iOrder;
741 return (LRESULT)SendMessage32A (infoPtr->hwndHeader, HDM_SETITEM32A,
742 wParam, (LPARAM)&hdi);
747 << LISTVIEW_SetColumn32W >>
748 << LISTVIEW_SetColumnOrderArray >>
749 << LISTVIEW_SetColumnWidth >>
750 << LISTVIEW_SetExtendedListviewStyle >>
751 << LISTVIEW_SetHotCursor >>
752 << LISTVIEW_SetHotItem >>
753 << LISTVIEW_SetHoverTime >>
754 << LISTVIEW_SetIconSpacing >>
759 LISTVIEW_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
761 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
762 HIMAGELIST himlTemp = 0;
764 TRACE (listview, "(0x%08x 0x%08lx)\n", wParam, lParam);
768 himlTemp = infoPtr->himlNormal;
769 infoPtr->himlNormal = (HIMAGELIST)lParam;
770 return (LRESULT)himlTemp;
773 himlTemp = infoPtr->himlSmall;
774 infoPtr->himlSmall = (HIMAGELIST)lParam;
775 return (LRESULT)himlTemp;
778 himlTemp = infoPtr->himlState;
779 infoPtr->himlState = (HIMAGELIST)lParam;
780 return (LRESULT)himlTemp;
783 return (LRESULT)NULL;
788 LISTVIEW_SetItem32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
790 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
791 LPLVITEM32A lpItem = (LPLVITEM32A)lParam;
792 LISTVIEW_ITEM *lpRow, *lpSubItem;
798 if ((lpItem->iItem < 0) || (lpItem->iItem >= infoPtr->nItemCount))
801 if ((lpItem->iSubItem < 0) || (lpItem->iSubItem >= infoPtr->nColumnCount))
804 /* send LVN_ITEMCHANGING notification */
805 ZeroMemory (&nmlv, sizeof (NMLISTVIEW));
806 nmlv.hdr.hwndFrom = wndPtr->hwndSelf;
807 nmlv.hdr.idFrom = wndPtr->wIDmenu;
808 nmlv.hdr.code = LVN_ITEMCHANGING;
809 nmlv.iItem = lpItem->iItem;
810 nmlv.iSubItem = lpItem->iSubItem;
811 nmlv.uChanged = lpItem->mask;
813 if (!SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
814 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmlv))
817 TRACE (listview, "(%d %d %p)\n",
818 lpItem->iItem, lpItem->iSubItem, lpItem);
820 lpRow = DPA_GetPtr (infoPtr->hdpaItems, lpItem->iItem);
824 lpSubItem = &lpRow[lpItem->iSubItem];
828 if (lpItem->mask & LVIF_STATE)
829 lpSubItem->state = (lpSubItem->state & lpItem->stateMask) | lpItem->state;
831 if (lpItem->mask & LVIF_TEXT) {
832 if (lpItem->pszText == LPSTR_TEXTCALLBACK32A) {
833 if ((lpSubItem->pszText) &&
834 (lpSubItem->pszText != LPSTR_TEXTCALLBACK32A))
835 COMCTL32_Free (lpSubItem->pszText);
836 lpSubItem->pszText = LPSTR_TEXTCALLBACK32A;
839 if (lpSubItem->pszText == LPSTR_TEXTCALLBACK32A)
840 lpSubItem->pszText = NULL;
841 Str_SetPtr32A (&lpSubItem->pszText, lpItem->pszText);
845 if (lpItem->mask & LVIF_IMAGE)
846 lpSubItem->iImage = lpItem->iImage;
848 if (lpItem->mask & LVIF_PARAM)
849 lpSubItem->lParam = lpItem->lParam;
851 if (lpItem->mask & LVIF_INDENT)
852 lpSubItem->iIndent = lpItem->iIndent;
854 /* send LVN_ITEMCHANGED notification */
855 nmlv.hdr.code = LVN_ITEMCHANGED;
856 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
857 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmlv);
863 /* << LISTVIEW_SetItem32W >> */
864 /* << LISTVIEW_SetItemCount >> */
868 LISTVIEW_SetItemPosition (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
870 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
871 INT32 nIndex = (INT32)wParam;
873 if ((nIndex < 0) || (nIndex >= infoPtr->nItemCount))
876 FIXME (listview, "setting position [%d, %d]!\n",
877 (INT32)LOWORD(lParam), (INT32)HIWORD(lParam));
879 /* FIXME: set position */
886 << LISTVIEW_SetItemPosition32 >>
887 << LISTVIEW_SetItemState >>
892 LISTVIEW_SetItemText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
894 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
895 LPLVITEM32A lpItem = (LPLVITEM32A)lParam;
896 INT32 nItem = (INT32)wParam;
897 LISTVIEW_ITEM *lpRow, *lpSubItem;
899 TRACE (listview, "(%d %p)\n", nItem, lpItem);
901 lpRow = DPA_GetPtr (infoPtr->hdpaItems, lpItem->iItem);
905 lpSubItem = &lpRow[lpItem->iSubItem];
909 if (lpSubItem->pszText) {
910 if (lpSubItem->pszText != LPSTR_TEXTCALLBACK32A)
911 COMCTL32_Free (lpSubItem->pszText);
912 lpSubItem->pszText = NULL;
914 if (lpItem->pszText) {
915 if (lpItem->pszText == LPSTR_TEXTCALLBACK32A) {
916 lpItem->pszText = LPSTR_TEXTCALLBACK32A;
919 INT32 len = lstrlen32A (lpItem->pszText);
920 lpSubItem->pszText = (LPWSTR)COMCTL32_Alloc ((len + 1)*sizeof(WCHAR));
921 lstrcpy32A (lpSubItem->pszText, lpItem->pszText);
930 << LISTVIEW_SetItemText32W >>
931 << LISTVIEW_SetSelectionMark >>
936 LISTVIEW_SetTextBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
938 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
943 /* set text background color */
944 TRACE (listview, "0x%06lx\n", (COLORREF)lParam);
945 infoPtr->clrTextBk = (COLORREF)lParam;
952 LISTVIEW_SetTextColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
954 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
960 TRACE (listview, "0x%06lx\n", (COLORREF)lParam);
961 infoPtr->clrText = (COLORREF)lParam;
968 << LISTVIEW_SetTooltips >>
969 << LISTVIEW_SetUnicodeFormat >>
970 << LISTVIEW_SetWorkAreas >>
975 LISTVIEW_SortItems (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
977 /* LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr); */
979 FIXME (listview, "empty stub!\n");
987 << LISTVIEW_SubItemHitTest >>
988 << LISTVIEW_Update >>
994 LISTVIEW_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
996 /* info structure is created at NCCreate */
997 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
999 DWORD dwStyle = WS_CHILD | WS_VISIBLE;
1001 TRACE (listview, "styles 0x%08lx 0x%08lx\n",
1002 wndPtr->dwStyle, wndPtr->dwExStyle);
1004 /* initialize info structure */
1005 infoPtr->clrBk = CLR_NONE;
1006 infoPtr->clrText = RGB(0, 0, 0); /* preliminary */
1007 infoPtr->clrTextBk = RGB(255, 255, 255); /* preliminary */
1009 if (!(wndPtr->dwStyle & LVS_REPORT) ||
1010 (wndPtr->dwStyle & LVS_NOCOLUMNHEADER))
1011 dwStyle |= HDS_HIDDEN;
1012 if (!(wndPtr->dwStyle & LVS_NOSORTHEADER))
1013 dwStyle |= HDS_BUTTONS;
1016 infoPtr->hwndHeader =
1017 CreateWindow32A (WC_HEADER32A, "", dwStyle,
1018 0, 0, 0, 0, wndPtr->hwndSelf,
1019 (HMENU32)0, wndPtr->hInstance, NULL);
1021 /* get default font (icon title) */
1022 SystemParametersInfo32A (SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
1023 infoPtr->hDefaultFont = CreateFontIndirect32A (&logFont);
1024 infoPtr->hFont = infoPtr->hDefaultFont;
1026 /* set header font */
1027 SendMessage32A (infoPtr->hwndHeader, WM_SETFONT,
1028 (WPARAM32)infoPtr->hFont, (LPARAM)TRUE);
1030 infoPtr->hdpaItems = DPA_Create (10);
1037 LISTVIEW_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1039 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1041 /* delete all items */
1042 LISTVIEW_DeleteAllItems (wndPtr);
1045 DPA_Destroy (infoPtr->hdpaItems);
1047 /* destroy header */
1048 if (infoPtr->hwndHeader)
1049 DestroyWindow32 (infoPtr->hwndHeader);
1052 infoPtr->hFont = (HFONT32)0;
1053 if (infoPtr->hDefaultFont)
1054 DeleteObject32 (infoPtr->hDefaultFont);
1063 LISTVIEW_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1065 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1067 if (infoPtr->clrBk == CLR_NONE) {
1068 return SendMessage32A (GetParent32 (wndPtr->hwndSelf),
1069 WM_ERASEBKGND, wParam, lParam);
1072 HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
1073 FillRect32 ((HDC32)wParam, &infoPtr->rcList, hBrush);
1074 DeleteObject32 (hBrush);
1082 __inline__ static LRESULT
1083 LISTVIEW_GetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1085 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1087 return infoPtr->hFont;
1091 /* << LISTVIEW_HScroll >> */
1092 /* << LISTVIEW_KeyDown >> */
1096 LISTVIEW_KillFocus (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1098 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1101 FIXME (listview, "semi stub!\n");
1103 nmh.hwndFrom = wndPtr->hwndSelf;
1104 nmh.idFrom = wndPtr->wIDmenu;
1105 nmh.code = NM_KILLFOCUS;
1107 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
1108 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmh);
1110 infoPtr->bFocus = FALSE;
1117 LISTVIEW_LButtonDblClk (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1119 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1122 FIXME (listview, "semi stub!\n");
1124 ZeroMemory (&nmlv, sizeof(NMLISTVIEW));
1125 nmlv.hdr.hwndFrom = wndPtr->hwndSelf;
1126 nmlv.hdr.idFrom = wndPtr->wIDmenu;
1127 nmlv.hdr.code = NM_DBLCLK;
1130 nmlv.ptAction.x = (INT32)LOWORD(lParam);
1131 nmlv.ptAction.y = (INT32)HIWORD(lParam);
1133 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
1134 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmlv);
1141 LISTVIEW_LButtonDown (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1143 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1146 FIXME (listview, "semi stub!\n");
1148 ZeroMemory (&nmlv, sizeof(NMLISTVIEW));
1149 nmlv.hdr.hwndFrom = wndPtr->hwndSelf;
1150 nmlv.hdr.idFrom = wndPtr->wIDmenu;
1151 nmlv.hdr.code = NM_CLICK;
1154 nmlv.ptAction.x = (INT32)LOWORD(lParam);
1155 nmlv.ptAction.y = (INT32)HIWORD(lParam);
1157 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
1158 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmlv);
1160 if (!infoPtr->bFocus)
1161 SetFocus32 (wndPtr->hwndSelf);
1168 LISTVIEW_NCCreate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1170 LISTVIEW_INFO *infoPtr;
1172 /* allocate memory for info structure */
1173 infoPtr = (LISTVIEW_INFO *)COMCTL32_Alloc (sizeof(LISTVIEW_INFO));
1174 wndPtr->wExtra[0] = (DWORD)infoPtr;
1176 if (infoPtr == NULL) {
1177 ERR (listview, "could not allocate info memory!\n");
1181 if ((LISTVIEW_INFO*)wndPtr->wExtra[0] != infoPtr) {
1182 ERR (listview, "pointer assignment error!\n");
1186 return DefWindowProc32A (wndPtr->hwndSelf, WM_NCCREATE, wParam, lParam);
1191 LISTVIEW_NCDestroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1193 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1198 /* free list view info data */
1199 COMCTL32_Free (infoPtr);
1206 LISTVIEW_Notify (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1208 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1209 LPNMHDR lpnmh = (LPNMHDR)lParam;
1211 if (lpnmh->hwndFrom == infoPtr->hwndHeader) {
1213 FIXME (listview, "WM_NOTIFY from header!\n");
1217 FIXME (listview, "WM_NOTIFY from unknown source!\n");
1225 LISTVIEW_Paint (WND *wndPtr, WPARAM32 wParam)
1230 hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
1231 LISTVIEW_Refresh (wndPtr, hdc);
1233 EndPaint32 (wndPtr->hwndSelf, &ps);
1239 LISTVIEW_RButtonDblClk (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1241 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1244 FIXME (listview, "semi stub!\n");
1246 ZeroMemory (&nmlv, sizeof(NMLISTVIEW));
1247 nmlv.hdr.hwndFrom = wndPtr->hwndSelf;
1248 nmlv.hdr.idFrom = wndPtr->wIDmenu;
1249 nmlv.hdr.code = NM_RDBLCLK;
1252 nmlv.ptAction.x = (INT32)LOWORD(lParam);
1253 nmlv.ptAction.y = (INT32)HIWORD(lParam);
1255 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
1256 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmlv);
1263 LISTVIEW_RButtonDown (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1265 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1268 FIXME (listview, "semi stub!\n");
1270 ZeroMemory (&nmlv, sizeof(NMLISTVIEW));
1271 nmlv.hdr.hwndFrom = wndPtr->hwndSelf;
1272 nmlv.hdr.idFrom = wndPtr->wIDmenu;
1273 nmlv.hdr.code = NM_RCLICK;
1276 nmlv.ptAction.x = (INT32)LOWORD(lParam);
1277 nmlv.ptAction.y = (INT32)HIWORD(lParam);
1279 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
1280 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmlv);
1287 LISTVIEW_SetFocus (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1289 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1292 FIXME (listview, "semi stub!\n");
1294 nmh.hwndFrom = wndPtr->hwndSelf;
1295 nmh.idFrom = wndPtr->wIDmenu;
1296 nmh.code = NM_SETFOCUS;
1298 SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
1299 (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmh);
1301 infoPtr->bFocus = TRUE;
1308 LISTVIEW_SetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1310 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1311 HFONT32 hFont = (HFONT32)wParam;
1313 infoPtr->hFont = hFont ? hFont : infoPtr->hDefaultFont;
1315 /* set header font */
1316 SendMessage32A (infoPtr->hwndHeader, WM_SETFONT, wParam, lParam);
1318 /* reinitialize the listview */
1335 LISTVIEW_Size (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
1337 LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
1339 GetClientRect32 (wndPtr->hwndSelf, &infoPtr->rcList);
1341 if (wndPtr->dwStyle & LVS_REPORT) {
1348 rc.right = LOWORD(lParam);
1349 rc.bottom = HIWORD(lParam);
1353 SendMessage32A (infoPtr->hwndHeader, HDM_LAYOUT, 0, (LPARAM)&hl);
1355 SetWindowPos32 (infoPtr->hwndHeader, wndPtr->hwndSelf,
1356 wp.x, wp.y, wp.cx, wp.cy, wp.flags);
1358 infoPtr->rcList.top += wp.cy;
1366 LISTVIEW_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
1368 WND *wndPtr = WIN_FindWndPtr(hwnd);
1372 /* case LVM_APPROXIMATEVIEWRECT: */
1373 /* case LVM_ARRANGE: */
1374 /* case LVM_CREATEDRAGIMAGE: */
1376 case LVM_DELETEALLITEMS:
1377 return LISTVIEW_DeleteAllItems (wndPtr);
1379 case LVM_DELETECOLUMN:
1380 return LISTVIEW_DeleteColumn (wndPtr, wParam, lParam);
1382 case LVM_DELETEITEM:
1383 return LISTVIEW_DeleteItem (wndPtr, wParam, lParam);
1385 /* case LVM_EDITLABEL: */
1386 /* case LVM_ENSUREVISIBLE: */
1387 /* case LVM_FINDITEM: */
1389 case LVM_GETBKCOLOR:
1390 return LISTVIEW_GetBkColor (wndPtr, wParam, lParam);
1392 /* case LVM_GETBKIMAGE: */
1393 /* case LVM_GETCALLBACKMASK: */
1395 case LVM_GETCOLUMN32A:
1396 return LISTVIEW_GetColumn32A (wndPtr, wParam, lParam);
1398 /* case LVM_GETCOLUMN32W: */
1399 /* case LVM_GETCOLUMNORDERARRAY: */
1401 case LVM_GETCOLUMNWIDTH:
1402 return LISTVIEW_GetColumnWidth (wndPtr, wParam, lParam);
1404 /* case LVM_GETCOUNTPERPAGE: */
1405 /* case LVM_GETEDITCONTROL: */
1406 /* case LVM_GETEXTENDEDLISTVIEWSTYLE: */
1409 return LISTVIEW_GetHeader (wndPtr, wParam, lParam);
1411 /* case LVM_GETHOTCURSOR: */
1412 /* case LVM_GETHOTITEM: */
1413 /* case LVM_GETHOVERTIME: */
1415 case LVM_GETIMAGELIST:
1416 return LISTVIEW_GetImageList (wndPtr, wParam, lParam);
1418 /* case LVM_GETISEARCHSTRING: */
1420 case LVM_GETITEM32A:
1421 return LISTVIEW_GetItem32A (wndPtr, wParam, lParam);
1423 /* case LVM_GETITEM32W: */
1425 case LVM_GETITEMCOUNT:
1426 return LISTVIEW_GetItemCount (wndPtr, wParam, lParam);
1428 case LVM_GETITEMPOSITION:
1429 return LISTVIEW_GetItemPosition (wndPtr, wParam, lParam);
1431 /* case LVM_GETITEMRECT: */
1432 /* case LVM_GETITEMSPACING: */
1433 /* case LVM_GETITEMSTATE: */
1435 case LVM_GETITEMTEXT32A:
1436 return LISTVIEW_GetItemText32A (wndPtr, wParam, lParam);
1438 /* case LVM_GETITEMTEXT32W: */
1440 case LVM_GETNEXTITEM:
1441 return LISTVIEW_GetNextItem (wndPtr, wParam, lParam);
1443 /* case LVM_GETNUMBEROFWORKAREAS: */
1444 /* case LVM_GETORIGIN: */
1446 case LVM_GETSELECTEDCOUNT:
1447 return LISTVIEW_GetSelectedCount (wndPtr, wParam, lParam);
1449 /* case LVM_GETSELECTIONMARK: */
1451 case LVM_GETSTRINGWIDTH32A:
1452 return LISTVIEW_GetStringWidth32A (wndPtr, wParam, lParam);
1454 /* case LVM_GETSTRINGWIDTH32W: */
1455 /* case LVM_GETSUBITEMRECT: */
1457 case LVM_GETTEXTBKCOLOR:
1458 return LISTVIEW_GetTextBkColor (wndPtr, wParam, lParam);
1460 case LVM_GETTEXTCOLOR:
1461 return LISTVIEW_GetTextColor (wndPtr, wParam, lParam);
1463 /* case LVM_GETTOOLTIPS: */
1464 /* case LVM_GETTOPINDEX: */
1465 /* case LVM_GETUNICODEFORMAT: */
1466 /* case LVM_GETVIEWRECT: */
1467 /* case LVM_GETWORKAREAS: */
1470 return LISTVIEW_HitTest (wndPtr, wParam, lParam);
1472 case LVM_INSERTCOLUMN32A:
1473 return LISTVIEW_InsertColumn32A (wndPtr, wParam, lParam);
1475 /* case LVM_INSERTCOLUMN32W: */
1477 case LVM_INSERTITEM32A:
1478 return LISTVIEW_InsertItem32A (wndPtr, wParam, lParam);
1480 /* case LVM_INSERTITEM32W: */
1482 case LVM_REDRAWITEMS:
1483 return LISTVIEW_RedrawItems (wndPtr, wParam, lParam);
1485 /* case LVM_SCROLL: */
1487 case LVM_SETBKCOLOR:
1488 return LISTVIEW_SetBkColor (wndPtr, wParam, lParam);
1490 /* case LVM_SETBKIMAGE: */
1491 /* case LVM_SETCALLBACKMASK: */
1493 case LVM_SETCOLUMN32A:
1494 return LISTVIEW_SetColumn32A (wndPtr, wParam, lParam);
1496 /* case LVM_SETCOLUMN32W: */
1497 /* case LVM_SETCOLUMNORDERARRAY: */
1498 /* case LVM_SETCOLUMNWIDTH: */
1499 /* case LVM_SETEXTENDEDLISTVIEWSTYLE: */
1500 /* case LVM_SETHOTCURSOR: */
1501 /* case LVM_SETHOTITEM: */
1502 /* case LVM_SETHOVERTIME: */
1503 /* case LVM_SETICONSPACING: */
1505 case LVM_SETIMAGELIST:
1506 return LISTVIEW_SetImageList (wndPtr, wParam, lParam);
1508 case LVM_SETITEM32A:
1509 return LISTVIEW_SetItem32A (wndPtr, wParam, lParam);
1511 /* case LVM_SETITEM32W: */
1512 /* case LVM_SETITEMCOUNT: */
1514 case LVM_SETITEMPOSITION:
1515 return LISTVIEW_SetItemPosition (wndPtr, wParam, lParam);
1517 /* case LVM_SETITEMPOSITION32: */
1518 /* case LVM_SETITEMSTATE: */
1520 case LVM_SETITEMTEXT32A:
1521 return LISTVIEW_SetItemText32A (wndPtr, wParam, lParam);
1523 /* case LVM_SETITEMTEXT32W: */
1524 /* case LVM_SETSELECTIONMARK: */
1526 case LVM_SETTEXTBKCOLOR:
1527 return LISTVIEW_SetTextBkColor (wndPtr, wParam, lParam);
1529 case LVM_SETTEXTCOLOR:
1530 return LISTVIEW_SetTextColor (wndPtr, wParam, lParam);
1532 /* case LVM_SETTOOLTIPS: */
1533 /* case LVM_SETUNICODEFORMAT: */
1534 /* case LVM_SETWORKAREAS: */
1537 return LISTVIEW_SortItems (wndPtr, wParam, lParam);
1539 /* case LVM_SUBITEMHITTEST: */
1540 /* case LVM_UPDATE: */
1545 /* case WM_COMMAND: */
1548 return LISTVIEW_Create (wndPtr, wParam, lParam);
1551 return LISTVIEW_Destroy (wndPtr, wParam, lParam);
1554 return LISTVIEW_EraseBackground (wndPtr, wParam, lParam);
1557 return DLGC_WANTTAB | DLGC_WANTARROWS;
1560 return LISTVIEW_GetFont (wndPtr, wParam, lParam);
1562 /* case WM_HSCROLL: */
1563 /* case WM_KEYDOWN: */
1566 return LISTVIEW_KillFocus (wndPtr, wParam, lParam);
1568 case WM_LBUTTONDBLCLK:
1569 return LISTVIEW_LButtonDblClk (wndPtr, wParam, lParam);
1571 case WM_LBUTTONDOWN:
1572 return LISTVIEW_LButtonDown (wndPtr, wParam, lParam);
1574 /* case WM_MOUSEMOVE: */
1575 /* return LISTVIEW_MouseMove (wndPtr, wParam, lParam); */
1578 return LISTVIEW_NCCreate (wndPtr, wParam, lParam);
1581 return LISTVIEW_NCDestroy (wndPtr, wParam, lParam);
1584 return LISTVIEW_Notify (wndPtr, wParam, lParam);
1587 return LISTVIEW_Paint (wndPtr, wParam);
1589 case WM_RBUTTONDBLCLK:
1590 return LISTVIEW_RButtonDblClk (wndPtr, wParam, lParam);
1592 case WM_RBUTTONDOWN:
1593 return LISTVIEW_RButtonDown (wndPtr, wParam, lParam);
1596 return LISTVIEW_SetFocus (wndPtr, wParam, lParam);
1599 return LISTVIEW_SetFont (wndPtr, wParam, lParam);
1601 /* case WM_SETREDRAW: */
1604 return LISTVIEW_Size (wndPtr, wParam, lParam);
1606 /* case WM_TIMER: */
1607 /* case WM_VSCROLL: */
1608 /* case WM_WINDOWPOSCHANGED: */
1609 /* case WM_WININICHANGE: */
1612 if (uMsg >= WM_USER)
1613 ERR (listview, "unknown msg %04x wp=%08x lp=%08lx\n",
1614 uMsg, wParam, lParam);
1615 return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
1622 LISTVIEW_Register (VOID)
1624 WNDCLASS32A wndClass;
1626 if (GlobalFindAtom32A (WC_LISTVIEW32A)) return;
1628 ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
1629 wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
1630 wndClass.lpfnWndProc = (WNDPROC32)LISTVIEW_WindowProc;
1631 wndClass.cbClsExtra = 0;
1632 wndClass.cbWndExtra = sizeof(LISTVIEW_INFO *);
1633 wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
1634 wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1);
1635 wndClass.lpszClassName = WC_LISTVIEW32A;
1637 RegisterClass32A (&wndClass);
1642 LISTVIEW_Unregister (VOID)
1644 if (GlobalFindAtom32A (WC_LISTVIEW32A))
1645 UnregisterClass32A (WC_LISTVIEW32A, (HINSTANCE32)NULL);