Changeset 925 for trunk/src/comctl32
- Timestamp:
- Sep 13, 1999, 8:49:02 PM (26 years ago)
- File:
-
- 1 edited
-
trunk/src/comctl32/comctl32.c (modified) (22 diffs)
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 HINSTANCE hInst, HWND hwndStatus, LPUINT lpwIDs)131 HINSTANCE hInst, HWND hwndStatus, LPUINT lpwIDs) 129 132 { 130 133 UINT uMenuID = 0; 131 134 132 135 if (!IsWindow (hwndStatus)) 133 return;136 return; 134 137 135 138 switch (uMsg) { 136 case WM_MENUSELECT:137 // TRACE (commctrl, "WM_MENUSELECT wParam=0x%X lParam=0x%lX\n",138 // wParam, lParam);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 // TRACE (commctrl, "menu was closed!\n");145 // TRACE (commctrl, "menu was closed!\n"); 143 146 SendMessageA (hwndStatus, SB_SIMPLE, FALSE, 0); 144 147 } 145 else {146 /* menu item was selected */147 if (HIWORD(wParam) & MF_POPUP)148 uMenuID = (UINT)*(lpwIDs+1);149 else150 uMenuID = (UINT)LOWORD(wParam);151 // TRACE (commctrl, "uMenuID = %u\n", uMenuID);152 153 if (uMenuID) {154 CHAR szText[256];155 156 if (!LoadStringA (hInst, uMenuID, szText, 256))157 szText[0] = '\0';158 159 SendMessageA (hwndStatus, SB_SETTEXTA,160 255 | SBT_NOBORDERS, (LPARAM)szText);161 SendMessageA (hwndStatus, SB_SIMPLE, TRUE, 0);162 }163 }164 break;165 166 default:167 // FIXME (commctrl, "Invalid Message 0x%x!\n", uMsg);168 break;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 return FALSE;213 return FALSE; 211 214 212 215 if (!(lpInfo[0]) || !(lpInfo[1])) 213 return FALSE;216 return FALSE; 214 217 215 218 /* search for control */ 216 219 lpMenuId = &lpInfo[2]; 217 220 while (*lpMenuId != uFlags) 218 lpMenuId += 2;221 lpMenuId += 2; 219 222 220 223 if (GetMenuState (lpInfo[1], uFlags, MF_BYCOMMAND) & MFS_CHECKED) { 221 /* uncheck menu item */222 CheckMenuItem (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_UNCHECKED);223 224 /* hide control */225 lpMenuId++;226 SetWindowPos (GetDlgItem (hwnd, *lpMenuId), 0, 0, 0, 0, 0,227 SWP_HIDEWINDOW);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 /* check menu item */231 CheckMenuItem (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_CHECKED);232 233 /* show control */234 lpMenuId++;235 SetWindowPos (GetDlgItem (hwnd, *lpMenuId), 0, 0, 0, 0, 0,236 SWP_SHOWWINDOW);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 // (DWORD)hwnd, (DWORD)lpRect, (DWORD)lpInfo);272 // (DWORD)hwnd, (DWORD)lpRect, (DWORD)lpInfo); 270 273 271 274 GetClientRect (hwnd, lpRect); … … 273 276 274 277 do { 275 lpRun += 2;276 if (*lpRun == 0)277 return;278 lpRun++;279 hwndCtrl = GetDlgItem (hwnd, *lpRun);280 if (GetWindowLongA (hwndCtrl, GWL_STYLE) & WS_VISIBLE) {281 // TRACE (commctrl, "control id 0x%x\n", *lpRun);282 GetWindowRect (hwndCtrl, &rcCtrl);283 MapWindowPoints ((HWND)0, hwnd, (LPPOINT)&rcCtrl, 2);284 SubtractRect (lpRect, lpRect, &rcCtrl);285 }286 lpRun++;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 SetBkMode(hdc, oldbkmode);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 CW_USEDEFAULT, CW_USEDEFAULT,381 CW_USEDEFAULT, CW_USEDEFAULT, 382 parent, wid, 0, 0);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 CW_USEDEFAULT, CW_USEDEFAULT,405 CW_USEDEFAULT, CW_USEDEFAULT,406 parent, wid, 0, 0);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 HWND parent, INT id, HINSTANCE inst,435 HWND buddy, INT maxVal, INT minVal, INT curVal)437 HWND parent, INT id, HINSTANCE inst, 438 HWND buddy, INT maxVal, INT minVal, INT curVal) 436 439 { 437 440 HWND hUD = 438 CreateWindowA (UPDOWN_CLASSA, 0, style, x, y, cx, cy,439 parent, id, inst, 0);441 CreateWindowA (UPDOWN_CLASSA, 0, style, x, y, cx, cy, 442 parent, id, inst, 0); 440 443 if (hUD) { 441 SendMessageA (hUD, UDM_SETBUDDY, buddy, 0);442 SendMessageA (hUD, UDM_SETRANGE, 0, MAKELONG(maxVal, minVal));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 return FALSE;497 return FALSE; 495 498 if (lpInitCtrls->dwSize != sizeof(INITCOMMONCONTROLSEX)) 496 return FALSE;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 dwMask = 1 << cCount;502 if (!(lpInitCtrls->dwICC & dwMask))503 continue;504 505 switch (lpInitCtrls->dwICC & dwMask) {506 /* dummy initialization */507 case ICC_ANIMATE_CLASS:508 case ICC_BAR_CLASSES:509 case ICC_LISTVIEW_CLASSES:510 case ICC_TREEVIEW_CLASSES:511 case ICC_TAB_CLASSES:512 case ICC_UPDOWN_CLASS:513 case ICC_PROGRESS_CLASS:514 case ICC_HOTKEY_CLASS:515 break;516 517 /* advanced classes - not included in Win95 */518 case ICC_DATE_CLASSES:519 MONTHCAL_Register ();520 DATETIME_Register ();521 break;522 523 case ICC_USEREX_CLASSES:524 COMBOEX_Register ();525 break;526 527 case ICC_COOL_CLASSES:528 REBAR_Register ();529 break;530 531 case ICC_INTERNET_CLASSES:532 IPADDRESS_Register ();533 break;534 535 case ICC_PAGESCROLLER_CLASS:536 PAGER_Register ();537 break;538 539 case ICC_NATIVEFNTCTL_CLASS:540 NATIVEFONT_Register ();541 break;542 543 default:544 // FIXME (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask);545 break;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 hwnd, (HMENU)wID, 0, NULL);586 hwnd, (HMENU)wID, 0, NULL); 584 587 if(hwndTB) { 585 TBADDBITMAP tbab;588 TBADDBITMAP tbab; 586 589 587 590 SendMessageA (hwndTB, TB_BUTTONSTRUCTSIZE, 588 (WPARAM)uStructSize, 0);589 590 /* set bitmap and button size */591 /*If CreateToolbarEx receive 0, windows set default values*/592 if (dyBitmap < 0)593 dyBitmap = 16;594 if (dxBitmap < 0)595 dxBitmap = 16;596 597 SendMessageA (hwndTB, TB_SETBITMAPSIZE, 0,598 MAKELPARAM((WORD)dyBitmap, (WORD)dxBitmap));599 SendMessageA (hwndTB, TB_SETBUTTONSIZE, 0,600 MAKELPARAM((WORD)dyButton, (WORD)dxButton));601 602 603 /* add bitmaps */604 if (nBitmaps > 0)605 {606 tbab.hInst = hBMInst;607 tbab.nID = wBMID;608 609 SendMessageA (hwndTB, TB_ADDBITMAP,610 (WPARAM)nBitmaps, (LPARAM)&tbab);611 }612 /* add buttons */613 if(iNumButtons > 0)614 SendMessageA (hwndTB, TB_ADDBUTTONSA,615 (WPARAM)iNumButtons, (LPARAM)lpButtons);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 LPCOLORMAP lpColorMap, INT iNumMaps)642 LPCOLORMAP lpColorMap, INT iNumMaps) 640 643 { 641 644 HGLOBAL hglb; … … 649 652 LPCOLORMAP sysColorMap; 650 653 COLORMAP internalColorMap[4] = 651 {{0x000000, 0}, {0x808080, 0}, {0xC0C0C0, 0}, {0xFFFFFF, 0}};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 iMaps = iNumMaps;656 sysColorMap = lpColorMap;658 iMaps = iNumMaps; 659 sysColorMap = lpColorMap; 657 660 } 658 661 else { 659 internalColorMap[0].to = GetSysColor (COLOR_BTNTEXT);660 internalColorMap[1].to = GetSysColor (COLOR_BTNSHADOW);661 internalColorMap[2].to = GetSysColor (COLOR_BTNFACE);662 internalColorMap[3].to = GetSysColor (COLOR_BTNHIGHLIGHT);663 iMaps = 4;664 sysColorMap = (LPCOLORMAP)internalColorMap;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 return 0;672 return 0; 670 673 hglb = LoadResource (hInstance, hRsrc); 671 674 if (hglb == 0) 672 return 0;675 return 0; 673 676 lpBitmap = (LPBITMAPINFOHEADER)LockResource (hglb); 674 677 if (lpBitmap == NULL) 675 return 0;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 return 0;684 return 0; 682 685 RtlMoveMemory (lpBitmapInfo, lpBitmap, nSize); 683 686 … … 685 688 686 689 for (iColor = 0; iColor < nColorTableSize; iColor++) { 687 for (i = 0; i < iMaps; i++) {688 if (pColorTable[iColor] == sysColorMap[i].from) {690 for (i = 0; i < iMaps; i++) { 691 if (pColorTable[iColor] == sysColorMap[i].from) { 689 692 #if 0 690 if (wFlags & CBS_MASKED) {691 if (sysColorMap[i].to != COLOR_BTNTEXT)692 pColorTable[iColor] = RGB(255, 255, 255);693 }694 else693 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 pColorTable[iColor] = sysColorMap[i].to;697 break;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 HDC hdcDst = CreateCompatibleDC (hdcScreen);708 HBITMAP hbmOld = SelectObject (hdcDst, hbm);709 LPBYTE lpBits = (LPBYTE)(lpBitmap + 1);710 lpBits += (1 << (lpBitmapInfo->biBitCount)) * sizeof(RGBQUAD);711 StretchDIBits (hdcDst, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight,712 lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS,713 SRCCOPY);714 SelectObject (hdcDst, hbmOld);715 DeleteDC (hdcDst);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 HINSTANCE hBMInst, UINT wBMID,749 LPCOLDTBBUTTON lpButtons,INT iNumButtons)751 HINSTANCE hBMInst, UINT wBMID, 752 LPCOLDTBBUTTON lpButtons,INT iNumButtons) 750 753 { 751 754 return CreateToolbarEx (hwnd, style | CCS_NODIVIDER, wID, nBitmaps, 752 hBMInst, wBMID, (LPCTBBUTTON)lpButtons,753 iNumButtons, 0, 0, 0, 0, sizeof (OLDTBBUTTON));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 return E_INVALIDARG;781 return E_INVALIDARG; 779 782 } 780 783 … … 785 788 786 789 // TRACE (commctrl, "%lu.%lu.%lu.%lu\n", 787 // pdvi->dwMajorVersion, pdvi->dwMinorVersion,788 // pdvi->dwBuildNumber, pdvi->dwPlatformID);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.
