- Timestamp:
- Sep 13, 1999, 8:49:02 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/comctl32.c
r600 r925 1 /* $Id: comctl32.c,v 1. 8 1999-08-20 18:30:57 achimhaExp $ */1 /* $Id: comctl32.c,v 1.9 1999-09-13 18:49:02 cbratschi Exp $ */ 2 2 /* 3 3 * Win32 common controls implementation … … 33 33 #include "toolbar.h" 34 34 #include "treeview.h" 35 #include "listview.h" 35 36 36 37 HANDLE COMCTL32_hHeap = (HANDLE)NULL; … … 67 68 TOOLBAR_Register(); 68 69 TREEVIEW_Register(); 69 } 70 LISTVIEW_Register(); 71 } 70 72 71 73 void CDECL UnregisterCOMCTL32WindowClasses(void) … … 91 93 TOOLBAR_Unregister(); 92 94 TREEVIEW_Unregister(); 95 LISTVIEW_Unregister(); 93 96 94 97 /* destroy private heap */ … … 126 129 VOID WINAPI 127 130 MenuHelp (UINT uMsg, WPARAM wParam, LPARAM lParam, HMENU hMainMenu, 128 131 HINSTANCE hInst, HWND hwndStatus, LPUINT lpwIDs) 129 132 { 130 133 UINT uMenuID = 0; 131 134 132 135 if (!IsWindow (hwndStatus)) 133 136 return; 134 137 135 138 switch (uMsg) { 136 137 // 138 // 139 case WM_MENUSELECT: 140 // TRACE (commctrl, "WM_MENUSELECT wParam=0x%X lParam=0x%lX\n", 141 // wParam, lParam); 139 142 140 143 if ((HIWORD(wParam) == 0xFFFF) && (lParam == 0)) { 141 144 /* menu was closed */ 142 // 145 // TRACE (commctrl, "menu was closed!\n"); 143 146 SendMessageA (hwndStatus, SB_SIMPLE, FALSE, 0); 144 147 } 145 146 147 148 149 150 151 // 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 // 168 169 } 170 } 171 172 /*********************************************************************** 173 * ShowHideMenuCtl [COMCTL32.3] 148 else { 149 /* menu item was selected */ 150 if (HIWORD(wParam) & MF_POPUP) 151 uMenuID = (UINT)*(lpwIDs+1); 152 else 153 uMenuID = (UINT)LOWORD(wParam); 154 // TRACE (commctrl, "uMenuID = %u\n", uMenuID); 155 156 if (uMenuID) { 157 CHAR szText[256]; 158 159 if (!LoadStringA (hInst, uMenuID, szText, 256)) 160 szText[0] = '\0'; 161 162 SendMessageA (hwndStatus, SB_SETTEXTA, 163 255 | SBT_NOBORDERS, (LPARAM)szText); 164 SendMessageA (hwndStatus, SB_SIMPLE, TRUE, 0); 165 } 166 } 167 break; 168 169 default: 170 // FIXME (commctrl, "Invalid Message 0x%x!\n", uMsg); 171 break; 172 } 173 } 174 175 /*********************************************************************** 176 * ShowHideMenuCtl [COMCTL32.3] 174 177 * 175 178 * Shows or hides controls and updates the corresponding menu item. … … 208 211 209 212 if (lpInfo == NULL) 210 213 return FALSE; 211 214 212 215 if (!(lpInfo[0]) || !(lpInfo[1])) 213 216 return FALSE; 214 217 215 218 /* search for control */ 216 219 lpMenuId = &lpInfo[2]; 217 220 while (*lpMenuId != uFlags) 218 221 lpMenuId += 2; 219 222 220 223 if (GetMenuState (lpInfo[1], uFlags, MF_BYCOMMAND) & MFS_CHECKED) { 221 222 223 224 225 226 227 224 /* uncheck menu item */ 225 CheckMenuItem (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_UNCHECKED); 226 227 /* hide control */ 228 lpMenuId++; 229 SetWindowPos (GetDlgItem (hwnd, *lpMenuId), 0, 0, 0, 0, 0, 230 SWP_HIDEWINDOW); 228 231 } 229 232 else { 230 231 232 233 234 235 236 233 /* check menu item */ 234 CheckMenuItem (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_CHECKED); 235 236 /* show control */ 237 lpMenuId++; 238 SetWindowPos (GetDlgItem (hwnd, *lpMenuId), 0, 0, 0, 0, 0, 239 SWP_SHOWWINDOW); 237 240 } 238 241 … … 267 270 268 271 // TRACE (commctrl, "(0x%08lx 0x%08lx 0x%08lx)\n", 269 // 272 // (DWORD)hwnd, (DWORD)lpRect, (DWORD)lpInfo); 270 273 271 274 GetClientRect (hwnd, lpRect); … … 273 276 274 277 do { 275 276 277 278 279 280 281 // 282 283 284 285 286 278 lpRun += 2; 279 if (*lpRun == 0) 280 return; 281 lpRun++; 282 hwndCtrl = GetDlgItem (hwnd, *lpRun); 283 if (GetWindowLongA (hwndCtrl, GWL_STYLE) & WS_VISIBLE) { 284 // TRACE (commctrl, "control id 0x%x\n", *lpRun); 285 GetWindowRect (hwndCtrl, &rcCtrl); 286 MapWindowPoints ((HWND)0, hwnd, (LPPOINT)&rcCtrl, 2); 287 SubtractRect (lpRect, lpRect, &rcCtrl); 288 } 289 lpRun++; 287 290 } while (*lpRun); 288 291 } … … 325 328 r.left += 3; 326 329 DrawTextA (hdc, text, lstrlenA(text), 327 &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE); 330 &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE); 328 331 if (oldbkmode != TRANSPARENT) 329 332 SetBkMode(hdc, oldbkmode); 330 333 } 331 334 } … … 377 380 CreateStatusWindowA (INT style, LPCSTR text, HWND parent, UINT wid) 378 381 { 379 return CreateWindowA(STATUSCLASSNAMEA, text, style, 380 381 CW_USEDEFAULT, CW_USEDEFAULT, 382 382 return CreateWindowA(STATUSCLASSNAMEA, text, style, 383 CW_USEDEFAULT, CW_USEDEFAULT, 384 CW_USEDEFAULT, CW_USEDEFAULT, 385 parent, wid, 0, 0); 383 386 } 384 387 … … 402 405 { 403 406 return CreateWindowW(STATUSCLASSNAMEW, text, style, 404 405 406 407 CW_USEDEFAULT, CW_USEDEFAULT, 408 CW_USEDEFAULT, CW_USEDEFAULT, 409 parent, wid, 0, 0); 407 410 } 408 411 … … 432 435 HWND WINAPI 433 436 CreateUpDownControl (DWORD style, INT x, INT y, INT cx, INT cy, 434 435 437 HWND parent, INT id, HINSTANCE inst, 438 HWND buddy, INT maxVal, INT minVal, INT curVal) 436 439 { 437 440 HWND hUD = 438 439 441 CreateWindowA (UPDOWN_CLASSA, 0, style, x, y, cx, cy, 442 parent, id, inst, 0); 440 443 if (hUD) { 441 442 443 SendMessageA (hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0)); 444 SendMessageA (hUD, UDM_SETBUDDY, buddy, 0); 445 SendMessageA (hUD, UDM_SETRANGE, 0, MAKELONG(maxVal, minVal)); 446 SendMessageA (hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0)); 444 447 } 445 448 … … 492 495 493 496 if (!lpInitCtrls) 494 497 return FALSE; 495 498 if (lpInitCtrls->dwSize != sizeof(INITCOMMONCONTROLSEX)) 496 499 return FALSE; 497 500 498 501 // TRACE(commctrl,"(0x%08lx)\n", lpInitCtrls->dwICC); 499 502 500 503 for (cCount = 0; cCount < 32; cCount++) { 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 // 545 546 504 dwMask = 1 << cCount; 505 if (!(lpInitCtrls->dwICC & dwMask)) 506 continue; 507 508 switch (lpInitCtrls->dwICC & dwMask) { 509 /* dummy initialization */ 510 case ICC_ANIMATE_CLASS: 511 case ICC_BAR_CLASSES: 512 case ICC_LISTVIEW_CLASSES: 513 case ICC_TREEVIEW_CLASSES: 514 case ICC_TAB_CLASSES: 515 case ICC_UPDOWN_CLASS: 516 case ICC_PROGRESS_CLASS: 517 case ICC_HOTKEY_CLASS: 518 break; 519 520 /* advanced classes - not included in Win95 */ 521 case ICC_DATE_CLASSES: 522 MONTHCAL_Register (); 523 DATETIME_Register (); 524 break; 525 526 case ICC_USEREX_CLASSES: 527 COMBOEX_Register (); 528 break; 529 530 case ICC_COOL_CLASSES: 531 REBAR_Register (); 532 break; 533 534 case ICC_INTERNET_CLASSES: 535 IPADDRESS_Register (); 536 break; 537 538 case ICC_PAGESCROLLER_CLASS: 539 PAGER_Register (); 540 break; 541 542 case ICC_NATIVEFNTCTL_CLASS: 543 NATIVEFONT_Register (); 544 break; 545 546 default: 547 // FIXME (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask); 548 break; 549 } 547 550 } 548 551 … … 581 584 HWND hwndTB = 582 585 CreateWindowExA (0, TOOLBARCLASSNAMEA, "", style, 0, 0, 0, 0, 583 586 hwnd, (HMENU)wID, 0, NULL); 584 587 if(hwndTB) { 585 588 TBADDBITMAP tbab; 586 589 587 590 SendMessageA (hwndTB, TB_BUTTONSTRUCTSIZE, 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 591 (WPARAM)uStructSize, 0); 592 593 /* set bitmap and button size */ 594 /*If CreateToolbarEx receive 0, windows set default values*/ 595 if (dyBitmap < 0) 596 dyBitmap = 16; 597 if (dxBitmap < 0) 598 dxBitmap = 16; 599 600 SendMessageA (hwndTB, TB_SETBITMAPSIZE, 0, 601 MAKELPARAM((WORD)dyBitmap, (WORD)dxBitmap)); 602 SendMessageA (hwndTB, TB_SETBUTTONSIZE, 0, 603 MAKELPARAM((WORD)dyButton, (WORD)dxButton)); 604 605 606 /* add bitmaps */ 607 if (nBitmaps > 0) 608 { 609 tbab.hInst = hBMInst; 610 tbab.nID = wBMID; 611 612 SendMessageA (hwndTB, TB_ADDBITMAP, 613 (WPARAM)nBitmaps, (LPARAM)&tbab); 614 } 615 /* add buttons */ 616 if(iNumButtons > 0) 617 SendMessageA (hwndTB, TB_ADDBUTTONSA, 618 (WPARAM)iNumButtons, (LPARAM)lpButtons); 616 619 } 617 620 … … 637 640 HBITMAP WINAPI 638 641 CreateMappedBitmap (HINSTANCE hInstance, INT idBitmap, UINT wFlags, 639 642 LPCOLORMAP lpColorMap, INT iNumMaps) 640 643 { 641 644 HGLOBAL hglb; … … 649 652 LPCOLORMAP sysColorMap; 650 653 COLORMAP internalColorMap[4] = 651 654 {{0x000000, 0}, {0x808080, 0}, {0xC0C0C0, 0}, {0xFFFFFF, 0}}; 652 655 653 656 /* initialize pointer to colortable and default color table */ 654 657 if (lpColorMap) { 655 656 658 iMaps = iNumMaps; 659 sysColorMap = lpColorMap; 657 660 } 658 661 else { 659 660 661 662 663 664 662 internalColorMap[0].to = GetSysColor (COLOR_BTNTEXT); 663 internalColorMap[1].to = GetSysColor (COLOR_BTNSHADOW); 664 internalColorMap[2].to = GetSysColor (COLOR_BTNFACE); 665 internalColorMap[3].to = GetSysColor (COLOR_BTNHIGHLIGHT); 666 iMaps = 4; 667 sysColorMap = (LPCOLORMAP)internalColorMap; 665 668 } 666 669 667 670 hRsrc = FindResourceA (hInstance, (LPSTR)idBitmap, RT_BITMAPA); 668 671 if (hRsrc == 0) 669 672 return 0; 670 673 hglb = LoadResource (hInstance, hRsrc); 671 674 if (hglb == 0) 672 675 return 0; 673 676 lpBitmap = (LPBITMAPINFOHEADER)LockResource (hglb); 674 677 if (lpBitmap == NULL) 675 678 return 0; 676 679 677 680 nColorTableSize = (1 << lpBitmap->biBitCount); … … 679 682 lpBitmapInfo = (LPBITMAPINFOHEADER)GlobalAlloc (GMEM_FIXED, nSize); 680 683 if (lpBitmapInfo == NULL) 681 684 return 0; 682 685 RtlMoveMemory (lpBitmapInfo, lpBitmap, nSize); 683 686 … … 685 688 686 689 for (iColor = 0; iColor < nColorTableSize; iColor++) { 687 688 690 for (i = 0; i < iMaps; i++) { 691 if (pColorTable[iColor] == sysColorMap[i].from) { 689 692 #if 0 690 691 692 693 694 693 if (wFlags & CBS_MASKED) { 694 if (sysColorMap[i].to != COLOR_BTNTEXT) 695 pColorTable[iColor] = RGB(255, 255, 255); 696 } 697 else 695 698 #endif 696 697 698 699 699 pColorTable[iColor] = sysColorMap[i].to; 700 break; 701 } 702 } 700 703 } 701 704 … … 705 708 hbm = CreateCompatibleBitmap (hdcScreen, nWidth, nHeight); 706 709 if (hbm) { 707 708 709 710 711 712 713 714 715 710 HDC hdcDst = CreateCompatibleDC (hdcScreen); 711 HBITMAP hbmOld = SelectObject (hdcDst, hbm); 712 LPBYTE lpBits = (LPBYTE)(lpBitmap + 1); 713 lpBits += (1 << (lpBitmapInfo->biBitCount)) * sizeof(RGBQUAD); 714 StretchDIBits (hdcDst, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight, 715 lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS, 716 SRCCOPY); 717 SelectObject (hdcDst, hbmOld); 718 DeleteDC (hdcDst); 716 719 } 717 720 ReleaseDC ((HWND)0, hdcScreen); … … 746 749 HWND WINAPI 747 750 CreateToolbar (HWND hwnd, DWORD style, UINT wID, INT nBitmaps, 748 749 751 HINSTANCE hBMInst, UINT wBMID, 752 LPCOLDTBBUTTON lpButtons,INT iNumButtons) 750 753 { 751 754 return CreateToolbarEx (hwnd, style | CCS_NODIVIDER, wID, nBitmaps, 752 753 755 hBMInst, wBMID, (LPCTBBUTTON)lpButtons, 756 iNumButtons, 0, 0, 0, 0, sizeof (OLDTBBUTTON)); 754 757 } 755 758 … … 776 779 if (pdvi->cbSize != sizeof(DLLVERSIONINFO)) { 777 780 // WARN (commctrl, "wrong DLLVERSIONINFO size from app"); 778 781 return E_INVALIDARG; 779 782 } 780 783 … … 785 788 786 789 // TRACE (commctrl, "%lu.%lu.%lu.%lu\n", 787 // 788 // 790 // pdvi->dwMajorVersion, pdvi->dwMinorVersion, 791 // pdvi->dwBuildNumber, pdvi->dwPlatformID); 789 792 790 793 return S_OK;
Note:
See TracChangeset
for help on using the changeset viewer.