Changeset 1125 for trunk/src/comctl32/header.c
- Timestamp:
- Oct 4, 1999, 6:02:07 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/header.c
r1111 r1125 1 /* $Id: header.c,v 1.1 1 1999-10-02 13:58:21cbratschi Exp $ */1 /* $Id: header.c,v 1.12 1999-10-04 16:02:07 cbratschi Exp $ */ 2 2 /* 3 3 * Header control … … 17 17 * - Unicode support. 18 18 * 19 * FIXME:20 * - Little flaw when drawing a bitmap on the right side of the text.21 19 * 22 20 * Status: Development in progress, a lot to do :) … … 39 37 #define MIN_ITEMWIDTH 0 40 38 #define ITEM_FRAMESIZE 2 39 #define TEXT_MARGIN 3 41 40 42 41 #define HEADER_GetInfoPtr(hwnd) ((HEADER_INFO *)GetWindowLongA(hwnd,0)) 43 42 43 static VOID 44 HEADER_DrawItemImage(HWND hwnd,HDC hdc,HEADER_INFO* infoPtr,HEADER_ITEM* phdi,RECT* r,INT iItem) 45 { 46 if (phdi->fmt & HDF_IMAGE) 47 { 48 INT iImage; 49 IMAGEINFO info; 50 INT x,y,cx,cy,w,h,rx,ry; 51 52 if (phdi->iImage == I_IMAGECALLBACK) 53 { 54 if (IsWindowUnicode(GetParent(hwnd))) 55 { 56 NMHDDISPINFOW nmhdr; 57 58 nmhdr.hdr.hwndFrom = hwnd; 59 nmhdr.hdr.idFrom = GetWindowLongW(hwnd,GWL_ID); 60 nmhdr.hdr.code = HDN_GETDISPINFOW; 61 nmhdr.iItem = iItem; 62 nmhdr.mask = HDI_IMAGE; 63 nmhdr.iImage = 0; 64 nmhdr.lParam = phdi->lParam; 65 66 SendMessageW(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr); 67 68 iImage = nmhdr.iImage; 69 if (nmhdr.mask & HDI_DI_SETITEM) phdi->iImage = iImage; 70 } else 71 { 72 NMHDDISPINFOA nmhdr; 73 74 nmhdr.hdr.hwndFrom = hwnd; 75 nmhdr.hdr.idFrom = GetWindowLongA(hwnd,GWL_ID); 76 nmhdr.hdr.code = HDN_GETDISPINFOA; 77 nmhdr.iItem = iItem; 78 nmhdr.mask = HDI_IMAGE; 79 nmhdr.iImage = 0; 80 nmhdr.lParam = phdi->lParam; 81 82 SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr); 83 84 iImage = nmhdr.iImage; 85 if (nmhdr.mask & HDI_DI_SETITEM) phdi->iImage = iImage; 86 } 87 } else iImage = phdi->iImage; 88 89 if (!ImageList_GetImageInfo(infoPtr->himl,phdi->iImage,&info)) return; 90 w = info.rcImage.right-info.rcImage.left; 91 h = info.rcImage.bottom-info.rcImage.top; 92 93 ry = r->bottom-r->top; 94 rx = r->right-r->left; 95 96 if (ry >= h) 97 { 98 cy = h; 99 y = r->top+(ry-h)/2; 100 } else 101 { 102 cy = ry; 103 y = r->top; 104 } 105 106 if (rx >= w+infoPtr->xBmpMargin) 107 cx = w; 108 else 109 cx = MAX(0,rx-w-infoPtr->xBmpMargin); 110 111 if (ImageList_DrawEx(infoPtr->himl,phdi->iImage,hdc,x,y,cx,cy,CLR_NONE,CLR_NONE,ILD_TRANSPARENT)) 112 { 113 r->left += w+2*infoPtr->xBmpMargin; 114 } 115 } 116 } 117 118 static VOID 119 HEADER_DrawItemBitmap(HDC hdc,HEADER_INFO* infoPtr,HEADER_ITEM* phdi,RECT* r,WCHAR* pszText,UINT uTextJustify) 120 { 121 if ((phdi->fmt & HDF_BITMAP) && !(phdi->fmt & HDF_BITMAP_ON_RIGHT) && (phdi->hbm)) 122 { 123 BITMAP bmp; 124 HDC hdcBitmap; 125 INT yD,yS,cx,cy,rx,ry; 126 127 GetObjectA (phdi->hbm,sizeof(BITMAP),(LPVOID)&bmp); 128 129 ry = r->bottom-r->top; 130 rx = r->right-r->left; 131 132 if (ry >= bmp.bmHeight) 133 { 134 cy = bmp.bmHeight; 135 yD = r->top + (ry - bmp.bmHeight) / 2; 136 yS = 0; 137 } else 138 { 139 cy = ry; 140 yD = r->top; 141 yS = (bmp.bmHeight - ry) / 2; 142 } 143 144 if (rx >= bmp.bmWidth+infoPtr->xBmpMargin) 145 cx = bmp.bmWidth; 146 else 147 cx = MAX(0,rx-bmp.bmWidth-infoPtr->xBmpMargin); 148 149 hdcBitmap = CreateCompatibleDC (hdc); 150 SelectObject(hdcBitmap,phdi->hbm); 151 BitBlt (hdc,r->left+infoPtr->xBmpMargin,yD,cx,cy,hdcBitmap,0,yS,SRCCOPY); 152 DeleteDC (hdcBitmap); 153 154 r->left += bmp.bmWidth+2*infoPtr->xBmpMargin; 155 } else if ((phdi->fmt & HDF_BITMAP_ON_RIGHT) && (phdi->hbm)) 156 { 157 BITMAP bmp; 158 HDC hdcBitmap; 159 INT xD,yD,yS,cx,cy,rx,ry,tx; 160 RECT textRect; 161 162 GetObjectA (phdi->hbm,sizeof(BITMAP),(LPVOID)&bmp); 163 164 textRect = *r; 165 DrawTextExW(hdc,pszText,lstrlenW(pszText),&textRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_CALCRECT|DT_END_ELLIPSIS,NULL); 166 tx = textRect.right - textRect.left; 167 ry = r->bottom-r->top; 168 rx = r->right-r->left; 169 170 if (ry >= bmp.bmHeight) 171 { 172 cy = bmp.bmHeight; 173 yD = r->top + (ry - bmp.bmHeight) / 2; 174 yS = 0; 175 } else 176 { 177 cy = ry; 178 yD = r->top; 179 yS = (bmp.bmHeight - ry) / 2; 180 } 181 182 if (r->left+tx+bmp.bmWidth+2*infoPtr->xBmpMargin <= r->right) 183 { 184 cx = bmp.bmWidth; 185 if (uTextJustify & DT_LEFT) 186 xD = r->left+tx+infoPtr->xBmpMargin; 187 else 188 { 189 xD = r->right-infoPtr->xBmpMargin-bmp.bmWidth; 190 r->right = xD; 191 } 192 } else 193 { 194 if (rx >= bmp.bmWidth+2*infoPtr->xBmpMargin) 195 { 196 cx = bmp.bmWidth; 197 xD = r->right-bmp.bmWidth-infoPtr->xBmpMargin; 198 r->right = xD-infoPtr->xBmpMargin; 199 } else 200 { 201 cx = MAX(0,rx-infoPtr->xBmpMargin); 202 xD = r->left; 203 r->right = r->left; 204 } 205 } 206 207 hdcBitmap = CreateCompatibleDC(hdc); 208 SelectObject(hdcBitmap,phdi->hbm); 209 BitBlt(hdc,xD,yD,cx,cy,hdcBitmap,0,yS,SRCCOPY); 210 DeleteDC (hdcBitmap); 211 } 212 } 213 214 static VOID 215 HEADER_DrawItemText(HDC hdc,HEADER_INFO* infoPtr,HEADER_ITEM* phdi,RECT* r,WCHAR* pszText,UINT uTextJustify,BOOL bEraseTextBkgnd,BOOL bHotTrack) 216 { 217 if ((phdi->fmt & HDF_STRING) && (phdi->pszText)) 218 { 219 INT oldBkMode = SetBkMode(hdc,TRANSPARENT); 220 221 if ((phdi->fmt & HDF_BITMAP_ON_RIGHT) || !(phdi->fmt & HDF_IMAGE)) r->left += TEXT_MARGIN; 222 if (!(phdi->fmt & HDF_BITMAP_ON_RIGHT)) r->right -= TEXT_MARGIN; 223 if (r->left >= r->right) return; 224 225 SetTextColor (hdc,GetSysColor(bHotTrack ? COLOR_HIGHLIGHT:COLOR_BTNTEXT)); //CB: not right color: COLOR_HOTLIGHT? (blue in Win95) 226 if (bEraseTextBkgnd) 227 { 228 HBRUSH hbrBk = GetSysColorBrush(COLOR_3DFACE); 229 230 FillRect(hdc,r,hbrBk); 231 } 232 233 DrawTextExW(hdc,pszText,lstrlenW(pszText),r,uTextJustify|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS,NULL); 234 if (oldBkMode != TRANSPARENT) SetBkMode(hdc,oldBkMode); 235 } 236 } 44 237 45 238 static INT … … 49 242 HEADER_ITEM *phdi = &infoPtr->items[iItem]; 50 243 RECT r; 51 INT oldBkMode;52 244 53 245 r = phdi->rect; … … 56 248 if (GetWindowLongA (hwnd, GWL_STYLE) & HDS_BUTTONS) 57 249 { 58 if (phdi->bDown) 250 if (phdi->bDown) 251 { 252 DrawEdge (hdc,&r,BDR_RAISEDOUTER,BF_RECT | BF_FLAT | BF_MIDDLE | BF_ADJUST); 253 r.left += 2; 254 r.top += 2; 255 } else 256 DrawEdge(hdc,&r,EDGE_RAISED,BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST); 257 } else 258 DrawEdge(hdc,&r,EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST); 259 260 if (r.left >= r.right) return phdi->rect.right; 261 262 if (phdi->fmt & HDF_OWNERDRAW) 263 { 264 DRAWITEMSTRUCT dis; 265 dis.CtlType = ODT_HEADER; 266 dis.CtlID = GetWindowLongA (hwnd, GWL_ID); 267 dis.itemID = iItem; 268 dis.itemAction = ODA_DRAWENTIRE; 269 dis.itemState = phdi->bDown ? ODS_SELECTED : 0; 270 dis.hwndItem = hwnd; 271 dis.hDC = hdc; 272 dis.rcItem = r; 273 dis.itemData = phdi->lParam; 274 SendMessageA (GetParent(hwnd),WM_DRAWITEM,(WPARAM)dis.CtlID,(LPARAM)&dis); 275 } else 276 { 277 UINT uTextJustify; 278 WCHAR* pszText = phdi->pszText; 279 280 if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_CENTER) 281 uTextJustify = DT_CENTER; 282 else if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_RIGHT) 283 uTextJustify = DT_RIGHT; 284 else uTextJustify = DT_LEFT; 285 286 if (phdi->pszText == LPSTR_TEXTCALLBACKW) 287 { 288 if (IsWindowUnicode(GetParent(hwnd))) 59 289 { 60 DrawEdge (hdc, &r, BDR_RAISEDOUTER, 61 BF_RECT | BF_FLAT | BF_MIDDLE | BF_ADJUST); 62 r.left += 2; 63 r.top += 2; 64 } 65 else 66 DrawEdge (hdc, &r, EDGE_RAISED, 67 BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST); 68 } else 69 DrawEdge (hdc, &r, EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST); 70 71 if (phdi->fmt & HDF_OWNERDRAW) 72 { 73 DRAWITEMSTRUCT dis; 74 dis.CtlType = ODT_HEADER; 75 dis.CtlID = GetWindowLongA (hwnd, GWL_ID); 76 dis.itemID = iItem; 77 dis.itemAction = ODA_DRAWENTIRE; 78 dis.itemState = phdi->bDown ? ODS_SELECTED : 0; 79 dis.hwndItem = hwnd; 80 dis.hDC = hdc; 81 dis.rcItem = r; 82 dis.itemData = phdi->lParam; 83 SendMessageA (GetParent (hwnd), WM_DRAWITEM, 84 (WPARAM)dis.CtlID, (LPARAM)&dis); 85 } else 86 { 87 UINT uTextJustify = DT_LEFT; 88 89 if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_CENTER) 90 uTextJustify = DT_CENTER; 91 else if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_RIGHT) 92 uTextJustify = DT_RIGHT; 93 94 if ((phdi->fmt & HDF_BITMAP) && (phdi->hbm)) 290 NMHDDISPINFOW nmhdr; 291 292 nmhdr.hdr.hwndFrom = hwnd; 293 nmhdr.hdr.idFrom = GetWindowLongW(hwnd,GWL_ID); 294 nmhdr.hdr.code = HDN_GETDISPINFOW; 295 nmhdr.iItem = iItem; 296 nmhdr.mask = HDI_TEXT; 297 nmhdr.cchTextMax = phdi->cchTextMax; 298 nmhdr.pszText = COMCTL32_Alloc(phdi->cchTextMax*sizeof(WCHAR)); 299 if (nmhdr.pszText) nmhdr.pszText[0] = 0; 300 nmhdr.lParam = phdi->lParam; 301 302 SendMessageW(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr); 303 304 pszText = nmhdr.pszText; 305 if (nmhdr.mask & HDI_DI_SETITEM) 306 { 307 INT len = pszText ? lstrlenW(pszText):0; 308 309 if (len) 310 { 311 phdi->pszText = COMCTL32_Alloc((len+1)*sizeof(WCHAR)); 312 lstrcpyW(phdi->pszText,pszText); 313 } else phdi->pszText = NULL; 314 COMCTL32_Free(pszText); 315 pszText = phdi->pszText; 316 } 317 } else 95 318 { 96 BITMAP bmp; 97 HDC hdcBitmap; 98 INT yD, yS, cx, cy, rx, ry; 99 100 GetObjectA (phdi->hbm, sizeof(BITMAP), (LPVOID)&bmp); 101 102 ry = r.bottom - r.top; 103 rx = r.right - r.left; 104 105 if (ry >= bmp.bmHeight) 106 { 107 cy = bmp.bmHeight; 108 yD = r.top + (ry - bmp.bmHeight) / 2; 109 yS = 0; 110 } else 111 { 112 cy = ry; 113 yD = r.top; 114 yS = (bmp.bmHeight - ry) / 2; 115 116 } 117 118 if (rx >= bmp.bmWidth + 6) 119 { 120 cx = bmp.bmWidth; 121 } else 122 { 123 cx = rx - 6; 124 } 125 126 hdcBitmap = CreateCompatibleDC (hdc); 127 SelectObject (hdcBitmap, phdi->hbm); 128 BitBlt (hdc, r.left + 3, yD, cx, cy, hdcBitmap, 0, yS, SRCCOPY); 129 DeleteDC (hdcBitmap); 130 131 r.left += (bmp.bmWidth + 3); 132 } 133 134 135 if ((phdi->fmt & HDF_BITMAP_ON_RIGHT) && (phdi->hbm)) 319 NMHDDISPINFOA nmhdr; 320 INT len; 321 322 nmhdr.hdr.hwndFrom = hwnd; 323 nmhdr.hdr.idFrom = GetWindowLongA(hwnd,GWL_ID); 324 nmhdr.hdr.code = HDN_GETDISPINFOA; 325 nmhdr.iItem = iItem; 326 nmhdr.mask = HDI_TEXT; 327 nmhdr.cchTextMax = phdi->cchTextMax; 328 nmhdr.pszText = COMCTL32_Alloc(phdi->cchTextMax); 329 if (nmhdr.pszText) nmhdr.pszText[0] = 0; 330 nmhdr.lParam = phdi->lParam; 331 332 SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr); 333 334 len = nmhdr.pszText ? lstrlenA(nmhdr.pszText):0; 335 336 if (len) 337 { 338 pszText = COMCTL32_Alloc((len+1)*sizeof(WCHAR)); 339 lstrcpyAtoW(pszText,nmhdr.pszText); 340 } else pszText = NULL; 341 COMCTL32_Free(nmhdr.pszText); 342 343 if (nmhdr.mask & HDI_DI_SETITEM) 344 phdi->pszText = pszText; 345 } 346 } 347 348 if (!(phdi->fmt & HDI_ORDER) || (phdi->iOrder & (HDF_LEFT | HDF_CENTER))) 349 { 350 HEADER_DrawItemImage(hwnd,hdc,infoPtr,phdi,&r,iItem); 351 if (r.left < r.right) 136 352 { 137 BITMAP bmp; 138 HDC hdcBitmap; 139 INT xD, yD, yS, cx, cy, rx, ry, tx; 140 RECT textRect; 141 142 GetObjectA (phdi->hbm, sizeof(BITMAP), (LPVOID)&bmp); 143 144 textRect = r; 145 if (bEraseTextBkgnd) 146 { 147 HBRUSH hbrBk = GetSysColorBrush(COLOR_3DFACE); 148 149 FillRect(hdc,&textRect,hbrBk); 150 } 151 DrawTextExW(hdc,phdi->pszText,lstrlenW(phdi->pszText), 152 &textRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_CALCRECT|DT_END_ELLIPSIS,NULL); 153 tx = textRect.right - textRect.left; 154 ry = r.bottom - r.top; 155 rx = r.right - r.left; 156 157 if (ry >= bmp.bmHeight) 158 { 159 cy = bmp.bmHeight; 160 yD = r.top + (ry - bmp.bmHeight) / 2; 161 yS = 0; 162 } else 163 { 164 cy = ry; 165 yD = r.top; 166 yS = (bmp.bmHeight - ry) / 2; 167 168 } 169 170 if (r.left + tx + bmp.bmWidth + 9 <= r.right) 171 { 172 cx = bmp.bmWidth; 173 xD = r.left + tx + 6; 174 } else 175 { 176 if (rx >= bmp.bmWidth + 6) 177 { 178 cx = bmp.bmWidth; 179 xD = r.right - bmp.bmWidth - 3; 180 r.right = xD - 3; 181 } else 182 { 183 cx = rx - 3; 184 xD = r.left; 185 r.right = r.left; 186 } 187 } 188 189 hdcBitmap = CreateCompatibleDC (hdc); 190 SelectObject (hdcBitmap, phdi->hbm); 191 BitBlt (hdc, xD, yD, cx, cy, hdcBitmap, 0, yS, SRCCOPY); 192 DeleteDC (hdcBitmap); 193 } 194 195 if (phdi->fmt & HDF_IMAGE) 353 HEADER_DrawItemBitmap(hdc,infoPtr,phdi,&r,pszText,uTextJustify); 354 if (r.left < r.right) 355 HEADER_DrawItemText(hdc,infoPtr,phdi,&r,pszText,uTextJustify,bEraseTextBkgnd,bHotTrack); 356 } 357 } else 358 { 359 HEADER_DrawItemBitmap(hdc,infoPtr,phdi,&r,pszText,uTextJustify); 360 if (r.left < r.right) 196 361 { 197 198 199 /* ImageList_Draw (infoPtr->himl, phdi->iImage,...); */ 200 } 201 202 if ((phdi->fmt & HDF_STRING) && (phdi->pszText)) 203 { 204 oldBkMode = SetBkMode(hdc, TRANSPARENT); 205 r.left += 3; 206 r.right -= 3; 207 SetTextColor (hdc, bHotTrack ? COLOR_HIGHLIGHT : COLOR_BTNTEXT); 208 if (bEraseTextBkgnd) 209 { 210 HBRUSH hbrBk = GetSysColorBrush(COLOR_3DFACE); 211 212 FillRect(hdc,&r,hbrBk); 213 } 214 DrawTextExW(hdc,phdi->pszText,lstrlenW (phdi->pszText), 215 &r,uTextJustify|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS,NULL); 216 if (oldBkMode != TRANSPARENT) 217 SetBkMode(hdc, oldBkMode); 218 } 362 HEADER_DrawItemImage(hwnd,hdc,infoPtr,phdi,&r,iItem); 363 if (r.left < r.right) 364 HEADER_DrawItemText(hdc,infoPtr,phdi,&r,pszText,uTextJustify,bEraseTextBkgnd,bHotTrack); 365 } 366 } 367 if (phdi->pszText == LPSTR_TEXTCALLBACKW) COMCTL32_Free(pszText); 219 368 } 220 369 … … 245 394 for (i = 0; i < infoPtr->uNumItem; i++) 246 395 { 247 x = HEADER_DrawItem(hwnd,hdc,i, FALSE,FALSE);396 x = HEADER_DrawItem(hwnd,hdc,i,infoPtr->iHotItem == i,FALSE); 248 397 if (x > rect.right) 249 398 { … … 274 423 hFont = infoPtr->hFont ? infoPtr->hFont : GetStockObject (SYSTEM_FONT); 275 424 hOldFont = SelectObject (hdc, hFont); 276 HEADER_DrawItem(hwnd,hdc,iItem, FALSE,TRUE);425 HEADER_DrawItem(hwnd,hdc,iItem,infoPtr->iHotItem == iItem,TRUE); 277 426 SelectObject (hdc, hOldFont); 278 427 } … … 473 622 INT oldRop; 474 623 475 GetClientRect (hwnd, &rect); //CB: Odin bug!!! 624 GetClientRect (hwnd, &rect); 625 626 rect.left = x; 627 rect.right = x+1; 628 InvertRect(hdc,&rect); 629 /* //CB: Odin bug!!! This code doesn't work: 476 630 hOldPen = SelectObject (hdc, GetStockObject (BLACK_PEN)); 477 631 oldRop = SetROP2 (hdc, R2_XORPEN); … … 480 634 SetROP2 (hdc, oldRop); 481 635 SelectObject (hdc, hOldPen); 482 } 483 636 */ 637 } 484 638 485 639 static BOOL … … 546 700 HEADER_ClearFilter(HWND hwnd,WPARAM wParam,LPARAM lParam) 547 701 { 702 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 703 548 704 //CB:todo 705 //HDN_FILTERCHANGE 549 706 550 707 return 0; … … 552 709 553 710 static LRESULT 711 HEADER_EditFilter(HWND hwnd,WPARAM wParam,LPARAM lParam) 712 { 713 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 714 INT iItem = (INT)wParam; 715 716 if ((iItem < 0) || (iItem >= (INT)infoPtr->uNumItem)) return 0; 717 718 //CB: todo 719 720 return iItem; 721 } 722 723 static LRESULT 724 HEADER_SetFilterChangeTimeout(HWND hwnd,WPARAM wParam,LPARAM lParam) 725 { 726 //CB: todo 727 728 return 0; 729 } 730 731 static LRESULT 554 732 HEADER_CreateDragImage (HWND hwnd, WPARAM wParam) 555 733 { 556 // FIXME (header, "empty stub!\n"); 557 return 0; 558 } 559 734 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 735 INT iItem = (INT)wParam; 736 HEADER_ITEM *phdi; 737 HICON hicon; 738 HIMAGELIST himl; 739 740 if (!infoPtr->himl || (iItem < 0) || (iItem >= (INT)infoPtr->uNumItem)) return 0; 741 phdi = &infoPtr->items[iItem]; 742 /* 743 hicon = ImageList_GetIcon(infoPtr->himl,phdi->iImage,ILD_BLEND | ILD_TRANSPARENT); 744 if (!hicon) return 0; 745 746 himl = ImageList_Create(); 747 */ 748 //CB: create and return new imagelist 749 750 return 0; 751 } 752 753 static LRESULT 754 HEADER_SetHotDivider(HWND hwnd,WPARAM wParam,LPARAM lParam) 755 { 756 //CB:todo 757 758 return 0; 759 } 560 760 561 761 static LRESULT … … 607 807 } 608 808 809 static LRESULT 810 HEADER_GetBitmapMargin(HWND hwnd,WPARAM wParam,LPARAM lParam) 811 { 812 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 813 814 return infoPtr->xBmpMargin; 815 } 816 817 static LRESULT 818 HEADER_SetBitmapMargin(HWND hwnd,WPARAM wParam,LPARAM lParam) 819 { 820 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 821 INT oldMargin = infoPtr->xBmpMargin; 822 823 if (infoPtr->xBmpMargin != (INT)wParam) 824 { 825 infoPtr->xBmpMargin = (INT)wParam; 826 HEADER_Refresh(hwnd); 827 } 828 829 return oldMargin; 830 } 609 831 610 832 static LRESULT 611 833 HEADER_GetImageList (HWND hwnd) 612 834 { 613 614 615 835 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 836 837 return (LRESULT)infoPtr->himl; 616 838 } 617 839 … … 620 842 HEADER_GetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam) 621 843 { 622 HEADER_INFO *infoPtr = HEADER_GetInfoPtr 844 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 623 845 HDITEMA *phdi = (HDITEMA*)lParam; 624 846 INT nItem = (INT)wParam; 625 847 HEADER_ITEM *lpItem; 626 848 627 if (!phdi) 628 return FALSE; 629 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) 630 return FALSE; 849 if (!phdi) return FALSE; 850 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE; 631 851 632 852 // TRACE (header, "[nItem=%d]\n", nItem); 633 853 634 if (phdi->mask == 0) 635 return TRUE; 854 if (phdi->mask == 0) return TRUE; 636 855 637 856 lpItem = (HEADER_ITEM*)&infoPtr->items[nItem]; 638 if (phdi->mask & HDI_BITMAP) 639 phdi->hbm = lpItem->hbm; 640 641 if (phdi->mask & HDI_FORMAT) 642 phdi->fmt = lpItem->fmt; 643 644 if (phdi->mask & HDI_WIDTH) 645 phdi->cxy = lpItem->cxy; 646 647 if (phdi->mask & HDI_LPARAM) 648 phdi->lParam = lpItem->lParam; 649 650 if (phdi->mask & HDI_TEXT) { 651 if (lpItem->pszText != LPSTR_TEXTCALLBACKW) 652 lstrcpynWtoA (phdi->pszText, lpItem->pszText, phdi->cchTextMax); 857 858 if (phdi->mask & HDI_BITMAP) phdi->hbm = lpItem->hbm; 859 860 if (phdi->mask & HDI_FORMAT) phdi->fmt = lpItem->fmt; 861 862 if (phdi->mask & HDI_FILTER) 863 { 864 phdi->type = lpItem->type; 865 phdi->pvFilter = lpItem->pvFilter; 866 } 867 868 if (phdi->mask & (HDI_WIDTH | HDI_HEIGHT)) phdi->cxy = lpItem->cxy; 869 870 if (phdi->mask & HDI_IMAGE) phdi->iImage = lpItem->iImage; 871 872 if (phdi->mask & HDI_LPARAM) phdi->lParam = lpItem->lParam; 873 874 if (phdi->mask & HDI_ORDER) phdi->iOrder = lpItem->iOrder; 875 876 if (phdi->mask & HDI_TEXT) 877 { 878 if (lpItem->pszText != LPSTR_TEXTCALLBACKW) 879 { 880 if (lpItem->pszText) 881 lstrcpynWtoA (phdi->pszText,lpItem->pszText,phdi->cchTextMax); 653 882 else 654 phdi->pszText = LPSTR_TEXTCALLBACKA; 655 } 656 657 if (phdi->mask & HDI_IMAGE) 658 phdi->iImage = lpItem->iImage; 659 660 if (phdi->mask & HDI_ORDER) 661 phdi->iOrder = lpItem->iOrder; 883 phdi->pszText = NULL; 884 } else phdi->pszText = LPSTR_TEXTCALLBACKA; 885 } 662 886 663 887 return TRUE; 664 888 } 665 889 666 667 890 static LRESULT 668 891 HEADER_GetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam) 669 892 { 670 HEADER_INFO *infoPtr = HEADER_GetInfoPtr 893 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 671 894 HDITEMW *phdi = (HDITEMW*)lParam; 672 895 INT nItem = (INT)wParam; 673 896 HEADER_ITEM *lpItem; 674 897 675 if (!phdi) 676 return FALSE; 677 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) 678 return FALSE; 898 if (!phdi) return FALSE; 899 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE; 679 900 680 901 // TRACE (header, "[nItem=%d]\n", nItem); 681 902 682 if (phdi->mask == 0) 683 return TRUE; 903 if (phdi->mask == 0) return TRUE; 684 904 685 905 lpItem = (HEADER_ITEM*)&infoPtr->items[nItem]; 686 if (phdi->mask & HDI_BITMAP) 687 phdi->hbm = lpItem->hbm; 688 689 if (phdi->mask & HDI_FORMAT) 690 phdi->fmt = lpItem->fmt; 691 692 if (phdi->mask & HDI_WIDTH) 693 phdi->cxy = lpItem->cxy; 694 695 if (phdi->mask & HDI_LPARAM) 696 phdi->lParam = lpItem->lParam; 697 698 if (phdi->mask & HDI_TEXT) { 699 if (lpItem->pszText != LPSTR_TEXTCALLBACKW) 700 lstrcpynW (phdi->pszText, lpItem->pszText, phdi->cchTextMax); 906 907 if (phdi->mask & HDI_BITMAP) phdi->hbm = lpItem->hbm; 908 909 if (phdi->mask & HDI_FORMAT) phdi->fmt = lpItem->fmt; 910 911 if (phdi->mask & HDI_FILTER) 912 { 913 phdi->type = lpItem->type; 914 phdi->pvFilter = lpItem->pvFilter; 915 } 916 917 if (phdi->mask & (HDI_WIDTH | HDI_HEIGHT)) phdi->cxy = lpItem->cxy; 918 919 if (phdi->mask & HDI_IMAGE) phdi->iImage = lpItem->iImage; 920 921 if (phdi->mask & HDI_LPARAM) phdi->lParam = lpItem->lParam; 922 923 if (phdi->mask & HDI_ORDER) phdi->iOrder = lpItem->iOrder; 924 925 if (phdi->mask & HDI_TEXT) 926 { 927 if (lpItem->pszText != LPSTR_TEXTCALLBACKW) 928 { 929 if (lpItem->pszText) 930 lstrcpynW (phdi->pszText,lpItem->pszText,phdi->cchTextMax); 701 931 else 702 phdi->pszText = LPSTR_TEXTCALLBACKW; 703 } 704 705 if (phdi->mask & HDI_IMAGE) 706 phdi->iImage = lpItem->iImage; 707 708 if (phdi->mask & HDI_ORDER) 709 phdi->iOrder = lpItem->iOrder; 932 phdi->pszText = NULL; 933 } else phdi->pszText = LPSTR_TEXTCALLBACKW; 934 } 710 935 711 936 return TRUE; … … 717 942 { 718 943 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 944 719 945 return infoPtr->uNumItem; 720 946 } … … 728 954 LPRECT lpRect = (LPRECT)lParam; 729 955 730 if ((iItem < 0) || (iItem >= (INT)infoPtr->uNumItem)) 731 return FALSE; 956 if (!lpRect || (iItem < 0) || (iItem >= (INT)infoPtr->uNumItem)) return FALSE; 732 957 733 958 lpRect->left = infoPtr->items[iItem].rect.left; … … 739 964 } 740 965 741 742 /* << HEADER_GetOrderArray >> */ 743 966 static LRESULT 967 HEADER_GetOrderArray(HWND hwnd,WPARAM wParam,LPARAM lParam) 968 { 969 //CB: todo 970 971 return 0; 972 } 973 974 static LRESULT 975 HEADER_SetOrderArray(HWND hwnd,WPARAM wParam,LPARAM lParam) 976 { 977 //CB: todo 978 HEADER_SetItemBounds(hwnd,0); 979 HEADER_Refresh(hwnd); 980 981 return 0; 982 } 983 984 static LRESULT 985 HEADER_OrderToIndex(HWND hwnd,WPARAM wParam,LPARAM lParam) 986 { 987 //CB:todo 988 989 return 0; 990 } 744 991 745 992 static LRESULT 746 993 HEADER_GetUnicodeFormat (HWND hwnd) 747 994 { 748 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 995 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 996 749 997 return infoPtr->bUnicode; 750 998 } … … 758 1006 HEADER_InternalHitTest (hwnd, &phti->pt, &phti->flags, &phti->iItem); 759 1007 760 return phti-> flags;1008 return phti->iItem; 761 1009 } 762 1010 … … 766 1014 { 767 1015 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 768 HDITEMA 769 INT 1016 HDITEMA *phdi = (HDITEMA*)lParam; 1017 INT nItem = (INT)wParam; 770 1018 HEADER_ITEM *lpItem; 771 HDC hdc; 772 INT len; 773 774 if ((phdi == NULL) || (nItem < 0)) 775 return -1; 776 777 if (nItem > infoPtr->uNumItem) 778 nItem = infoPtr->uNumItem; 779 780 if (infoPtr->uNumItem == 0) { 781 infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM)); 782 infoPtr->uNumItem++; 783 } 784 else { 785 HEADER_ITEM *oldItems = infoPtr->items; 786 787 infoPtr->uNumItem++; 788 infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM) * infoPtr->uNumItem); 789 if (nItem == 0) { 790 memcpy (&infoPtr->items[1], &oldItems[0], 791 (infoPtr->uNumItem-1) * sizeof(HEADER_ITEM)); 792 } 793 else 794 { 795 /* pre insert copy */ 796 if (nItem > 0) { 797 memcpy (&infoPtr->items[0], &oldItems[0], 798 nItem * sizeof(HEADER_ITEM)); 799 } 800 801 /* post insert copy */ 802 if (nItem < infoPtr->uNumItem - 1) { 803 memcpy (&infoPtr->items[nItem+1], &oldItems[nItem], 804 (infoPtr->uNumItem - nItem) * sizeof(HEADER_ITEM)); 805 } 806 } 807 808 COMCTL32_Free (oldItems); 1019 1020 if ((phdi == NULL) || (nItem < 0)) return -1; 1021 1022 if (nItem > infoPtr->uNumItem) nItem = infoPtr->uNumItem; 1023 1024 if (infoPtr->uNumItem == 0) 1025 { 1026 infoPtr->items = COMCTL32_Alloc(sizeof(HEADER_ITEM)); 1027 infoPtr->uNumItem++; 1028 } else 1029 { 1030 HEADER_ITEM *oldItems = infoPtr->items; 1031 1032 infoPtr->uNumItem++; 1033 infoPtr->items = COMCTL32_Alloc(sizeof(HEADER_ITEM)*infoPtr->uNumItem); 1034 if (nItem == 0) 1035 memcpy (&infoPtr->items[1],&oldItems[0],(infoPtr->uNumItem-1)*sizeof(HEADER_ITEM)); 1036 else 1037 { 1038 /* pre insert copy */ 1039 memcpy (&infoPtr->items[0],&oldItems[0],nItem*sizeof(HEADER_ITEM)); 1040 1041 /* post insert copy */ 1042 if (nItem < infoPtr->uNumItem-1) 1043 memcpy (&infoPtr->items[nItem+1],&oldItems[nItem],(infoPtr->uNumItem - nItem)*sizeof(HEADER_ITEM)); 1044 } 1045 1046 COMCTL32_Free (oldItems); 809 1047 } 810 1048 … … 812 1050 lpItem->bDown = FALSE; 813 1051 814 if (phdi->mask & HDI_WIDTH) 815 lpItem->cxy = phdi->cxy; 816 817 if (phdi->mask & HDI_TEXT) { 818 if (!phdi->pszText) /* null pointer check */ 819 phdi->pszText = ""; 820 if (phdi->pszText != LPSTR_TEXTCALLBACKA) { 821 len = lstrlenA (phdi->pszText); 822 lpItem->pszText = COMCTL32_Alloc ((len+1)*sizeof(WCHAR)); 823 lstrcpyAtoW (lpItem->pszText, phdi->pszText); 824 } 825 else 826 lpItem->pszText = LPSTR_TEXTCALLBACKW; 827 } 828 829 if (phdi->mask & HDI_FORMAT) 830 lpItem->fmt = phdi->fmt; 831 832 if (lpItem->fmt == 0) 833 lpItem->fmt = HDF_LEFT; 834 835 if (phdi->mask & HDI_BITMAP) 836 lpItem->hbm = phdi->hbm; 837 838 if (phdi->mask & HDI_LPARAM) 839 lpItem->lParam = phdi->lParam; 840 841 if (phdi->mask & HDI_IMAGE) 842 lpItem->iImage = phdi->iImage; 843 844 if (phdi->mask & HDI_ORDER) 845 lpItem->iOrder = phdi->iOrder; 1052 lpItem->cxy = (phdi->mask & HDI_WIDTH || phdi->mask & HDI_HEIGHT) ? phdi->cxy:0; 1053 1054 if (phdi->mask & HDI_TEXT) 1055 { 1056 if (!phdi->pszText) lpItem->pszText = NULL; 1057 else if (phdi->pszText != LPSTR_TEXTCALLBACKA) 1058 { 1059 INT len; 1060 1061 len = lstrlenA(phdi->pszText); 1062 if (len == 0) lpItem->pszText = NULL; else 1063 { 1064 lpItem->pszText = COMCTL32_Alloc((len+1)*sizeof(WCHAR)); 1065 lstrcpyAtoW(lpItem->pszText,phdi->pszText); 1066 } 1067 } else lpItem->pszText = LPSTR_TEXTCALLBACKW; 1068 lpItem->cchTextMax = phdi->cchTextMax; 1069 } else 1070 { 1071 lpItem->pszText = NULL; 1072 lpItem->cchTextMax = 0; 1073 } 1074 1075 lpItem->fmt = (phdi->mask & HDI_FORMAT) ? phdi->fmt:HDF_LEFT; 1076 if (lpItem->fmt == 0) lpItem->fmt = HDF_LEFT; 1077 1078 lpItem->lParam = (phdi->mask & HDI_LPARAM) ? phdi->lParam:0; 1079 1080 lpItem->iImage = (phdi->mask & HDI_IMAGE) ? phdi->iImage:0; 1081 1082 lpItem->iOrder = (phdi->mask & HDI_ORDER) ? phdi->iOrder:HDF_LEFT; 1083 1084 lpItem->hbm = (phdi->mask & HDI_BITMAP) ? phdi->hbm:0; 1085 1086 if (phdi->mask & HDI_FILTER) 1087 { 1088 lpItem->type = phdi->type; 1089 lpItem->pvFilter = phdi->pvFilter; 1090 } 846 1091 847 1092 HEADER_SetItemBounds (hwnd,nItem); 848 849 1093 HEADER_Refresh(hwnd); 850 1094 … … 852 1096 } 853 1097 854 855 1098 static LRESULT 856 1099 HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam) 857 1100 { 858 1101 HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); 859 HDITEMW 860 INT 1102 HDITEMW *phdi = (HDITEMW*)lParam; 1103 INT nItem = (INT)wParam; 861 1104 HEADER_ITEM *lpItem; 862 HDC hdc; 863 INT len; 864 865 if ((phdi == NULL) || (nItem < 0)) 866 return -1; 867 868 if (nItem > infoPtr->uNumItem) 869 nItem = infoPtr->uNumItem; 870 871 if (infoPtr->uNumItem == 0) { 872 infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM)); 873 infoPtr->uNumItem++; 874 } 875 else { 876 HEADER_ITEM *oldItems = infoPtr->items; 877 878 infoPtr->uNumItem++; 879 infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM) * infoPtr->uNumItem); 1105 1106 if ((phdi == NULL) || (nItem < 0)) return -1; 1107 1108 if (nItem > infoPtr->uNumItem) nItem = infoPtr->uNumItem; 1109 1110 if (infoPtr->uNumItem == 0) 1111 { 1112 infoPtr->items = COMCTL32_Alloc(sizeof(HEADER_ITEM)); 1113 infoPtr->uNumItem++; 1114 } else 1115 { 1116 HEADER_ITEM *oldItems = infoPtr->items; 1117 1118 infoPtr->uNumItem++; 1119 infoPtr->items = COMCTL32_Alloc(sizeof(HEADER_ITEM)*infoPtr->uNumItem); 1120 if (nItem == 0) 1121 memcpy (&infoPtr->items[1],&oldItems[0],(infoPtr->uNumItem-1)*sizeof(HEADER_ITEM)); 1122 else 1123 { 880 1124 /* pre insert copy */ 881 if (nItem > 0) { 882 memcpy (&infoPtr->items[0], &oldItems[0], 883 nItem * sizeof(HEADER_ITEM)); 884 } 1125 memcpy (&infoPtr->items[0],&oldItems[0],nItem*sizeof(HEADER_ITEM)); 885 1126 886 1127 /* post insert copy */ 887 if (nItem < infoPtr->uNumItem - 1) { 888 memcpy (&infoPtr->items[nItem+1], &oldItems[nItem], 889 (infoPtr->uNumItem - nItem) * sizeof(HEADER_ITEM)); 890 } 891 892 COMCTL32_Free (oldItems); 1128 if (nItem < infoPtr->uNumItem-1) 1129 memcpy (&infoPtr->items[nItem+1],&oldItems[nItem],(infoPtr->uNumItem - nItem)*sizeof(HEADER_ITEM)); 1130 } 1131 1132 COMCTL32_Free (oldItems); 893 1133 } 894 1134 … … 896 1136 lpItem->bDown = FALSE; 897 1137 898 if (phdi->mask & HDI_WIDTH) 899 lpItem->cxy = phdi->cxy; 900 901 if (phdi->mask & HDI_TEXT) { 902 WCHAR wide_null_char = 0; 903 if (!phdi->pszText) /* null pointer check */ 904 phdi->pszText = &wide_null_char; 905 if (phdi->pszText != LPSTR_TEXTCALLBACKW) { 906 len = lstrlenW (phdi->pszText); 907 lpItem->pszText = COMCTL32_Alloc ((len+1)*sizeof(WCHAR)); 908 lstrcpyW (lpItem->pszText, phdi->pszText); 909 } 910 else 911 lpItem->pszText = LPSTR_TEXTCALLBACKW; 912 } 913 914 if (phdi->mask & HDI_FORMAT) 915 lpItem->fmt = phdi->fmt; 916 917 if (lpItem->fmt == 0) 918 lpItem->fmt = HDF_LEFT; 919 920 if (phdi->mask & HDI_BITMAP) 921 lpItem->hbm = phdi->hbm; 922 923 if (phdi->mask & HDI_LPARAM) 924 lpItem->lParam = phdi->lParam; 925 926 if (phdi->mask & HDI_IMAGE) 927 lpItem->iImage = phdi->iImage; 928 929 if (phdi->mask & HDI_ORDER) 930 lpItem->iOrder = phdi->iOrder; 1138 lpItem->cxy = (phdi->mask & HDI_WIDTH || phdi->mask & HDI_HEIGHT) ? phdi->cxy:0; 1139 1140 if (phdi->mask & HDI_TEXT) 1141 { 1142 if (!phdi->pszText) lpItem->pszText = NULL; 1143 else if (phdi->pszText != LPSTR_TEXTCALLBACKW) 1144 { 1145 INT len; 1146 1147 len = lstrlenW(phdi->pszText); 1148 if (len == 0) lpItem->pszText = NULL; else 1149 { 1150 lpItem->pszText = COMCTL32_Alloc((len+1)*sizeof(WCHAR)); 1151 lstrcpyW(lpItem->pszText,phdi->pszText); 1152 } 1153 } else lpItem->pszText = LPSTR_TEXTCALLBACKW; 1154 lpItem->cchTextMax = phdi->cchTextMax; 1155 } else 1156 { 1157 lpItem->pszText = NULL; 1158 lpItem->cchTextMax = 0; 1159 } 1160 1161 lpItem->fmt = (phdi->mask & HDI_FORMAT) ? phdi->fmt:HDF_LEFT; 1162 if (lpItem->fmt == 0) lpItem->fmt = HDF_LEFT; 1163 1164 lpItem->lParam = (phdi->mask & HDI_LPARAM) ? phdi->lParam:0; 1165 1166 lpItem->iImage = (phdi->mask & HDI_IMAGE) ? phdi->iImage:0; 1167 1168 lpItem->iOrder = (phdi->mask & HDI_ORDER) ? phdi->iOrder:HDF_LEFT; 1169 1170 lpItem->hbm = (phdi->mask & HDI_BITMAP) ? phdi->hbm:0; 1171 1172 if (phdi->mask & HDI_FILTER) 1173 { 1174 lpItem->type = phdi->type; 1175 lpItem->pvFilter = phdi->pvFilter; 1176 } 931 1177 932 1178 HEADER_SetItemBounds (hwnd,nItem); 933 934 1179 HEADER_Refresh(hwnd); 935 1180 … … 980 1225 infoPtr->himl = (HIMAGELIST)lParam; 981 1226 982 /* FIXME: Refresh needed??? */1227 HEADER_Refresh(hwnd); 983 1228 984 1229 return (LRESULT)himlOld; … … 995 1240 HDC hdc; 996 1241 997 if (phdi == NULL) 998 return FALSE; 999 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) 1000 return FALSE; 1242 if (phdi == NULL) return FALSE; 1243 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE; 1244 if (phdi->mask == 0) return TRUE; 1001 1245 1002 1246 // TRACE (header, "[nItem=%d]\n", nItem); 1003 1247 1004 if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGA, nItem)) 1005 return FALSE; 1248 if (HEADER_SendHeaderNotify(hwnd,HDN_ITEMCHANGINGA,nItem)) return FALSE; 1006 1249 1007 1250 lpItem = (HEADER_ITEM*)&infoPtr->items[nItem]; 1008 if (phdi->mask & HDI_BITMAP) 1009 lpItem->hbm = phdi->hbm; 1010 1011 if (phdi->mask & HDI_FORMAT) 1012 lpItem->fmt = phdi->fmt; 1013 1014 if (phdi->mask & HDI_LPARAM) 1015 lpItem->lParam = phdi->lParam; 1016 1017 if (phdi->mask & HDI_TEXT) { 1018 if (phdi->pszText != LPSTR_TEXTCALLBACKA) { 1019 if (lpItem->pszText) { 1020 COMCTL32_Free (lpItem->pszText); 1021 lpItem->pszText = NULL; 1022 } 1023 if (phdi->pszText) { 1024 INT len = lstrlenA (phdi->pszText); 1025 lpItem->pszText = COMCTL32_Alloc ((len+1)*sizeof(WCHAR)); 1026 lstrcpyAtoW (lpItem->pszText, phdi->pszText); 1027 } 1028 } 1029 else 1030 lpItem->pszText = LPSTR_TEXTCALLBACKW; 1031 } 1032 1033 if (phdi->mask & HDI_WIDTH) 1034 lpItem->cxy = phdi->cxy; 1035 1036 if (phdi->mask & HDI_IMAGE) 1037 lpItem->iImage = phdi->iImage; 1038 1039 if (phdi->mask & HDI_ORDER) 1040 lpItem->iOrder = phdi->iOrder; 1041 1042 HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGEDA, nItem); 1043 1044 HEADER_SetItemBounds (hwnd,0); 1251 1252 if (phdi->mask & HDI_BITMAP) lpItem->hbm = phdi->hbm; 1253 1254 if (phdi->mask & HDI_FORMAT) lpItem->fmt = phdi->fmt; 1255 1256 if (phdi->mask & HDI_FILTER) 1257 { 1258 lpItem->type = lpItem->type; 1259 lpItem->pvFilter = lpItem->pvFilter; 1260 } 1261 1262 if (phdi->mask & (HDI_WIDTH | HDI_WIDTH)) lpItem->cxy = phdi->cxy; 1263 1264 if (phdi->mask & HDI_IMAGE) lpItem->iImage = phdi->iImage; 1265 1266 if (phdi->mask & HDI_LPARAM) lpItem->lParam = phdi->lParam; 1267 1268 if (phdi->mask & HDI_ORDER) lpItem->iOrder = phdi->iOrder; 1269 1270 if (phdi->mask & HDI_TEXT) 1271 { 1272 if (phdi->pszText != LPSTR_TEXTCALLBACKA) 1273 { 1274 if (lpItem->pszText) 1275 { 1276 COMCTL32_Free (lpItem->pszText); 1277 lpItem->pszText = NULL; 1278 } 1279 if (phdi->pszText) 1280 { 1281 INT len = lstrlenA (phdi->pszText); 1282 1283 if (len) 1284 { 1285 lpItem->pszText = COMCTL32_Alloc((len+1)*sizeof(WCHAR)); 1286 lstrcpyAtoW(lpItem->pszText,phdi->pszText); 1287 } 1288 } 1289 } else 1290 { 1291 if (lpItem->pszText != LPSTR_TEXTCALLBACKW) COMCTL32_Free(lpItem->pszText); 1292 lpItem->pszText = LPSTR_TEXTCALLBACKW; 1293 } 1294 } 1295 1296 HEADER_SendHeaderNotify(hwnd,HDN_ITEMCHANGEDA,nItem); 1297 1298 HEADER_SetItemBounds(hwnd,0); 1045 1299 HEADER_Refresh(hwnd); 1046 1300 … … 1058 1312 HDC hdc; 1059 1313 1060 if (phdi == NULL) 1061 return FALSE; 1062 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) 1063 return FALSE; 1314 if (phdi == NULL) return FALSE; 1315 if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE; 1316 if (phdi->mask == 0) return TRUE; 1064 1317 1065 1318 // TRACE (header, "[nItem=%d]\n", nItem); 1066 1319 1067 if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGA, nItem)) 1068 return FALSE; 1320 if (HEADER_SendHeaderNotify(hwnd,HDN_ITEMCHANGINGW,nItem)) return FALSE; 1069 1321 1070 1322 lpItem = (HEADER_ITEM*)&infoPtr->items[nItem]; 1071 if (phdi->mask & HDI_BITMAP) 1072 lpItem->hbm = phdi->hbm; 1073 1074 if (phdi->mask & HDI_FORMAT) 1075 lpItem->fmt = phdi->fmt; 1076 1077 if (phdi->mask & HDI_LPARAM) 1078 lpItem->lParam = phdi->lParam; 1079 1080 if (phdi->mask & HDI_TEXT) { 1081 if (phdi->pszText != LPSTR_TEXTCALLBACKW) { 1082 if (lpItem->pszText) { 1083 COMCTL32_Free (lpItem->pszText); 1084 lpItem->pszText = NULL; 1085 } 1086 if (phdi->pszText) { 1087 INT len = lstrlenW (phdi->pszText); 1088 lpItem->pszText = COMCTL32_Alloc ((len+1)*sizeof(WCHAR)); 1089 lstrcpyW (lpItem->pszText, phdi->pszText); 1090 } 1091 } 1092 else 1093 lpItem->pszText = LPSTR_TEXTCALLBACKW; 1094 } 1095 1096 if (phdi->mask & HDI_WIDTH) 1097 lpItem->cxy = phdi->cxy; 1098 1099 if (phdi->mask & HDI_IMAGE) 1100 lpItem->iImage = phdi->iImage; 1101 1102 if (phdi->mask & HDI_ORDER) 1103 lpItem->iOrder = phdi->iOrder; 1104 1105 HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGEDA, nItem); 1106 1107 HEADER_SetItemBounds (hwnd,0); 1323 1324 if (phdi->mask & HDI_BITMAP) lpItem->hbm = phdi->hbm; 1325 1326 if (phdi->mask & HDI_FORMAT) lpItem->fmt = phdi->fmt; 1327 1328 if (phdi->mask & HDI_FILTER) 1329 { 1330 lpItem->type = lpItem->type; 1331 lpItem->pvFilter = lpItem->pvFilter; 1332 } 1333 1334 if (phdi->mask & (HDI_WIDTH | HDI_WIDTH)) lpItem->cxy = phdi->cxy; 1335 1336 if (phdi->mask & HDI_IMAGE) lpItem->iImage = phdi->iImage; 1337 1338 if (phdi->mask & HDI_LPARAM) lpItem->lParam = phdi->lParam; 1339 1340 if (phdi->mask & HDI_ORDER) lpItem->iOrder = phdi->iOrder; 1341 1342 if (phdi->mask & HDI_TEXT) 1343 { 1344 if (phdi->pszText != LPSTR_TEXTCALLBACKW) 1345 { 1346 if (lpItem->pszText) 1347 { 1348 COMCTL32_Free(lpItem->pszText); 1349 lpItem->pszText = NULL; 1350 } 1351 if (phdi->pszText) 1352 { 1353 INT len = lstrlenW(phdi->pszText); 1354 1355 if (len) 1356 { 1357 lpItem->pszText = COMCTL32_Alloc((len+1)*sizeof(WCHAR)); 1358 lstrcpyW(lpItem->pszText,phdi->pszText); 1359 } 1360 } 1361 } else 1362 { 1363 if (lpItem->pszText != LPSTR_TEXTCALLBACKW) COMCTL32_Free(lpItem->pszText); 1364 lpItem->pszText = LPSTR_TEXTCALLBACKW; 1365 } 1366 } 1367 1368 HEADER_SendHeaderNotify(hwnd,HDN_ITEMCHANGEDW,nItem); 1369 1370 HEADER_SetItemBounds(hwnd,0); 1108 1371 HEADER_Refresh(hwnd); 1109 1372 … … 1111 1374 } 1112 1375 1113 1114 /* << HEADER_SetOrderArray >> */1115 1116 1117 1376 static LRESULT 1118 1377 HEADER_SetUnicodeFormat (HWND hwnd, WPARAM wParam) 1119 1378 { 1120 HEADER_INFO *infoPtr = HEADER_GetInfoPtr 1379 HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); 1121 1380 BOOL bTemp = infoPtr->bUnicode; 1122 1381 … … 1149 1408 infoPtr->himl = 0; 1150 1409 infoPtr->iHotItem = -1; 1410 infoPtr->xBmpMargin = 3*GetSystemMetrics(SM_CXEDGE); 1151 1411 infoPtr->bUnicode = IsWindowUnicode (hwnd); 1152 1412 … … 1381 1641 1382 1642 infoPtr->iHotItem = newItem; 1383 hdc = GetDC (hwnd); 1384 if (oldItem != -1) HEADER_DrawItem(hwnd,hdc,oldItem,FALSE,TRUE); 1385 if (newItem != -1) HEADER_DrawItem(hwnd,hdc,newItem,TRUE,TRUE); 1386 ReleaseDC (hwnd, hdc); 1643 HEADER_Refresh(hwnd); 1387 1644 } 1388 1645 } … … 1407 1664 } 1408 1665 // TRACE (header, "Moving pressed item %d!\n", infoPtr->iMoveItem); 1409 } 1410 else if (infoPtr->bTracking) { 1411 if (dwStyle & HDS_FULLDRAG) { 1666 } else if (infoPtr->bTracking) 1667 { 1668 if (dwStyle & HDS_FULLDRAG) 1669 { 1412 1670 if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGA, infoPtr->iMoveItem)) 1413 1671 infoPtr->items[infoPtr->iMoveItem].cxy = infoPtr->nOldWidth; … … 1440 1698 } 1441 1699 1442 if ((dwStyle & HDS_BUTTONS) && (dwStyle & HDS_HOTTRACK)) {1443 // FIXME (header, "hot track support!\n");1444 }1445 1446 1700 return 0; 1447 1701 } … … 1529 1783 switch (msg) 1530 1784 { 1531 // case HDM_CLEARFILTER: //CB:add const 1532 //return HEADER_ClearFilter(hwnd,wParam,lParam);1785 case HDM_CLEARFILTER: 1786 return HEADER_ClearFilter(hwnd,wParam,lParam); 1533 1787 1534 1788 case HDM_CREATEDRAGIMAGE: … … 1538 1792 return HEADER_DeleteItem (hwnd, wParam); 1539 1793 1794 case HDM_EDITFILTER: 1795 return HEADER_EditFilter(hwnd,wParam,lParam); 1796 1797 case HDM_GETBITMAPMARGIN: 1798 return HEADER_GetBitmapMargin(hwnd,wParam,lParam); 1799 1540 1800 case HDM_GETIMAGELIST: 1541 1801 return HEADER_GetImageList (hwnd); … … 1553 1813 return HEADER_GetItemRect (hwnd, wParam, lParam); 1554 1814 1555 /* case HDM_GETORDERARRAY: */ 1815 case HDM_GETORDERARRAY: 1816 return HEADER_GetOrderArray(hwnd,wParam,lParam); 1556 1817 1557 1818 case HDM_GETUNICODEFORMAT: … … 1570 1831 return HEADER_Layout (hwnd, wParam, lParam); 1571 1832 1833 case HDM_ORDERTOINDEX: 1834 return HEADER_OrderToIndex(hwnd,wParam,lParam); 1835 1836 case HDM_SETBITMAPMARGIN: 1837 return HEADER_SetBitmapMargin(hwnd,wParam,lParam); 1838 1839 case HDM_SETFILTERCHANGETIMEOUT: 1840 return HEADER_SetFilterChangeTimeout(hwnd,wParam,lParam); 1841 1842 case HDM_SETHOTDIVIDER: 1843 return HEADER_SetHotDivider(hwnd,wParam,lParam); 1844 1572 1845 case HDM_SETIMAGELIST: 1573 1846 return HEADER_SetImageList (hwnd, wParam, lParam); … … 1579 1852 return HEADER_SetItemW (hwnd, wParam, lParam); 1580 1853 1581 /* case HDM_SETORDERARRAY: */ 1854 case HDM_SETORDERARRAY: 1855 return HEADER_SetOrderArray(hwnd,wParam,lParam); 1582 1856 1583 1857 case HDM_SETUNICODEFORMAT:
Note:
See TracChangeset
for help on using the changeset viewer.