Changeset 6644 for trunk/src/comctl32/comctl32.c
- Timestamp:
- Sep 5, 2001, 2:05:03 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/comctl32.c
r5416 r6644 1 /* 1 /* $Id: comctl32.c,v 1.18 2001-09-05 12:04:56 bird Exp $ */ 2 /* 2 3 * Common controls functions 3 4 * … … 99 100 100 101 switch (fdwReason) { 101 102 case DLL_PROCESS_ATTACH: 102 103 COMCTL32_hModule = (HMODULE)hinstDLL; 103 104 … … 130 131 break; 131 132 132 133 case DLL_PROCESS_DETACH: 133 134 /* unregister all common control classes */ 134 135 ANIMATE_Unregister (); … … 204 205 VOID WINAPI 205 206 MenuHelp (UINT uMsg, WPARAM wParam, LPARAM lParam, HMENU hMainMenu, 206 207 HINSTANCE hInst, HWND hwndStatus, LPUINT lpwIDs) 207 208 { 208 209 UINT uMenuID = 0; 209 210 210 211 if (!IsWindow (hwndStatus)) 211 212 return; 212 213 213 214 switch (uMsg) { 214 215 216 215 case WM_MENUSELECT: 216 TRACE("WM_MENUSELECT wParam=0x%X lParam=0x%lX\n", 217 wParam, lParam); 217 218 218 219 if ((HIWORD(wParam) == 0xFFFF) && (lParam == 0)) { 219 220 /* menu was closed */ 220 221 TRACE("menu was closed!\n"); 221 222 SendMessageA (hwndStatus, SB_SIMPLE, FALSE, 0); 222 223 } 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 224 else { 225 /* menu item was selected */ 226 if (HIWORD(wParam) & MF_POPUP) 227 uMenuID = (UINT)*(lpwIDs+1); 228 else 229 uMenuID = (UINT)LOWORD(wParam); 230 TRACE("uMenuID = %u\n", uMenuID); 231 232 if (uMenuID) { 233 CHAR szText[256]; 234 235 if (!LoadStringA (hInst, uMenuID, szText, 256)) 236 szText[0] = '\0'; 237 238 SendMessageA (hwndStatus, SB_SETTEXTA, 239 255 | SBT_NOBORDERS, (LPARAM)szText); 240 SendMessageA (hwndStatus, SB_SIMPLE, TRUE, 0); 241 } 242 } 243 break; 243 244 244 245 case WM_COMMAND : 245 246 247 248 246 TRACE("WM_COMMAND wParam=0x%X lParam=0x%lX\n", 247 wParam, lParam); 248 /* WM_COMMAND is not invalid since it is documented 249 * in the windows api reference. So don't output 249 250 * any FIXME for WM_COMMAND 250 251 */ 251 252 253 254 255 256 257 } 258 } 259 260 261 /*********************************************************************** 262 * ShowHideMenuCtl [COMCTL32.3] 252 WARN("We don't care about the WM_COMMAND\n"); 253 break; 254 255 default: 256 FIXME("Invalid Message 0x%x!\n", uMsg); 257 break; 258 } 259 } 260 261 262 /*********************************************************************** 263 * ShowHideMenuCtl [COMCTL32.3] 263 264 * 264 265 * Shows or hides controls and updates the corresponding menu item. … … 297 298 298 299 if (lpInfo == NULL) 299 300 return FALSE; 300 301 301 302 if (!(lpInfo[0]) || !(lpInfo[1])) 302 303 return FALSE; 303 304 304 305 /* search for control */ 305 306 lpMenuId = &lpInfo[2]; 306 307 while (*lpMenuId != uFlags) 307 308 lpMenuId += 2; 308 309 309 310 if (GetMenuState (lpInfo[1], uFlags, MF_BYCOMMAND) & MFS_CHECKED) { 310 311 312 313 314 315 316 311 /* uncheck menu item */ 312 CheckMenuItem (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_UNCHECKED); 313 314 /* hide control */ 315 lpMenuId++; 316 SetWindowPos (GetDlgItem (hwnd, *lpMenuId), 0, 0, 0, 0, 0, 317 SWP_HIDEWINDOW); 317 318 } 318 319 else { 319 320 321 322 323 324 325 320 /* check menu item */ 321 CheckMenuItem (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_CHECKED); 322 323 /* show control */ 324 lpMenuId++; 325 SetWindowPos (GetDlgItem (hwnd, *lpMenuId), 0, 0, 0, 0, 0, 326 SWP_SHOWWINDOW); 326 327 } 327 328 … … 357 358 358 359 TRACE("(0x%08lx 0x%08lx 0x%08lx)\n", 359 360 (DWORD)hwnd, (DWORD)lpRect, (DWORD)lpInfo); 360 361 361 362 GetClientRect (hwnd, lpRect); … … 363 364 364 365 do { 365 366 367 368 369 370 371 372 373 374 375 376 366 lpRun += 2; 367 if (*lpRun == 0) 368 return; 369 lpRun++; 370 hwndCtrl = GetDlgItem (hwnd, *lpRun); 371 if (GetWindowLongA (hwndCtrl, GWL_STYLE) & WS_VISIBLE) { 372 TRACE("control id 0x%x\n", *lpRun); 373 GetWindowRect (hwndCtrl, &rcCtrl); 374 MapWindowPoints ((HWND)0, hwnd, (LPPOINT)&rcCtrl, 2); 375 SubtractRect (lpRect, lpRect, &rcCtrl); 376 } 377 lpRun++; 377 378 } while (*lpRun); 378 379 } … … 416 417 r.left += 3; 417 418 DrawTextA (hdc, text, lstrlenA(text), 418 &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE); 419 &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE); 419 420 if (oldbkmode != TRANSPARENT) 420 421 SetBkMode(hdc, oldbkmode); 421 422 } 422 423 } … … 466 467 CreateStatusWindowA (INT style, LPCSTR text, HWND parent, UINT wid) 467 468 { 468 return CreateWindowA(STATUSCLASSNAMEA, text, style, 469 470 CW_USEDEFAULT, CW_USEDEFAULT, 471 469 return CreateWindowA(STATUSCLASSNAMEA, text, style, 470 CW_USEDEFAULT, CW_USEDEFAULT, 471 CW_USEDEFAULT, CW_USEDEFAULT, 472 parent, wid, 0, 0); 472 473 } 473 474 … … 491 492 { 492 493 return CreateWindowW(STATUSCLASSNAMEW, text, style, 493 494 495 494 CW_USEDEFAULT, CW_USEDEFAULT, 495 CW_USEDEFAULT, CW_USEDEFAULT, 496 parent, wid, 0, 0); 496 497 } 497 498 … … 521 522 HWND WINAPI 522 523 CreateUpDownControl (DWORD style, INT x, INT y, INT cx, INT cy, 523 524 524 HWND parent, INT id, HINSTANCE inst, 525 HWND buddy, INT maxVal, INT minVal, INT curVal) 525 526 { 526 527 HWND hUD = 527 528 528 CreateWindowA (UPDOWN_CLASSA, 0, style, x, y, cx, cy, 529 parent, id, inst, 0); 529 530 if (hUD) { 530 531 532 SendMessageA (hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0)); 531 SendMessageA (hUD, UDM_SETBUDDY, buddy, 0); 532 SendMessageA (hUD, UDM_SETRANGE, 0, MAKELONG(maxVal, minVal)); 533 SendMessageA (hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0)); 533 534 } 534 535 … … 584 585 585 586 if (!lpInitCtrls) 586 587 return FALSE; 587 588 if (lpInitCtrls->dwSize != sizeof(INITCOMMONCONTROLSEX)) 588 589 return FALSE; 589 590 590 591 TRACE("(0x%08lx)\n", lpInitCtrls->dwICC); 591 592 592 593 for (cCount = 0; cCount < 32; cCount++) { 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 594 dwMask = 1 << cCount; 595 if (!(lpInitCtrls->dwICC & dwMask)) 596 continue; 597 598 switch (lpInitCtrls->dwICC & dwMask) { 599 /* dummy initialization */ 600 case ICC_ANIMATE_CLASS: 601 case ICC_BAR_CLASSES: 602 case ICC_LISTVIEW_CLASSES: 603 case ICC_TREEVIEW_CLASSES: 604 case ICC_TAB_CLASSES: 605 case ICC_UPDOWN_CLASS: 606 case ICC_PROGRESS_CLASS: 607 case ICC_HOTKEY_CLASS: 608 break; 609 610 /* advanced classes - not included in Win95 */ 611 case ICC_DATE_CLASSES: 612 MONTHCAL_Register (); 613 DATETIME_Register (); 614 break; 615 616 case ICC_USEREX_CLASSES: 617 COMBOEX_Register (); 618 break; 619 620 case ICC_COOL_CLASSES: 621 REBAR_Register (); 622 break; 623 624 case ICC_INTERNET_CLASSES: 625 IPADDRESS_Register (); 626 break; 627 628 case ICC_PAGESCROLLER_CLASS: 629 PAGER_Register (); 630 break; 631 632 case ICC_NATIVEFNTCTL_CLASS: 633 NATIVEFONT_Register (); 634 break; 635 636 default: 637 FIXME("Unknown class! dwICC=0x%lX\n", dwMask); 638 break; 639 } 639 640 } 640 641 … … 681 682 hwndTB = 682 683 CreateWindowExA (0, TOOLBARCLASSNAMEA, "", style|WS_CHILD, 0, 0, 0, 0, 683 684 hwnd, (HMENU)wID, 0, NULL); 684 685 if(hwndTB) { 685 686 TBADDBITMAP tbab; 686 687 687 688 SendMessageA (hwndTB, TB_BUTTONSTRUCTSIZE, 688 689 (WPARAM)uStructSize, 0); 689 690 690 691 /* set bitmap and button size */ … … 705 706 706 707 707 708 709 710 711 712 713 714 715 716 717 718 719 708 /* add bitmaps */ 709 if (nBitmaps > 0) 710 { 711 tbab.hInst = hBMInst; 712 tbab.nID = wBMID; 713 714 SendMessageA (hwndTB, TB_ADDBITMAP, 715 (WPARAM)nBitmaps, (LPARAM)&tbab); 716 } 717 /* add buttons */ 718 if(iNumButtons > 0) 719 SendMessageA (hwndTB, TB_ADDBUTTONSA, 720 (WPARAM)iNumButtons, (LPARAM)lpButtons); 720 721 } 721 722 … … 741 742 HBITMAP WINAPI 742 743 CreateMappedBitmap (HINSTANCE hInstance, INT idBitmap, UINT wFlags, 743 744 LPCOLORMAP lpColorMap, INT iNumMaps) 744 745 { 745 746 HGLOBAL hglb; … … 754 755 COLORREF cRef; 755 756 COLORMAP internalColorMap[4] = 756 757 {{0x000000, 0}, {0x808080, 0}, {0xC0C0C0, 0}, {0xFFFFFF, 0}}; 757 758 758 759 /* initialize pointer to colortable and default color table */ 759 760 if (lpColorMap) { 760 761 761 iMaps = iNumMaps; 762 sysColorMap = lpColorMap; 762 763 } 763 764 else { 764 765 766 767 768 769 765 internalColorMap[0].to = GetSysColor (COLOR_BTNTEXT); 766 internalColorMap[1].to = GetSysColor (COLOR_BTNSHADOW); 767 internalColorMap[2].to = GetSysColor (COLOR_BTNFACE); 768 internalColorMap[3].to = GetSysColor (COLOR_BTNHIGHLIGHT); 769 iMaps = 4; 770 sysColorMap = (LPCOLORMAP)internalColorMap; 770 771 } 771 772 772 773 hRsrc = FindResourceA (hInstance, (LPSTR)idBitmap, RT_BITMAPA); 773 774 if (hRsrc == 0) 774 775 return 0; 775 776 hglb = LoadResource (hInstance, hRsrc); 776 777 if (hglb == 0) 777 778 return 0; 778 779 lpBitmap = (LPBITMAPINFOHEADER)LockResource (hglb); 779 780 if (lpBitmap == NULL) 780 781 return 0; 781 782 782 783 nColorTableSize = (1 << lpBitmap->biBitCount); … … 784 785 lpBitmapInfo = (LPBITMAPINFOHEADER)GlobalAlloc (GMEM_FIXED, nSize); 785 786 if (lpBitmapInfo == NULL) 786 787 return 0; 787 788 RtlMoveMemory (lpBitmapInfo, lpBitmap, nSize); 788 789 … … 790 791 791 792 for (iColor = 0; iColor < nColorTableSize; iColor++) { 792 793 for (i = 0; i < iMaps; i++) { 793 794 cRef = RGB(pColorTable[iColor].rgbRed, 794 795 pColorTable[iColor].rgbGreen, 795 796 pColorTable[iColor].rgbBlue); 796 797 if ( cRef == sysColorMap[i].from) { 797 798 #if 0 798 799 800 801 802 799 if (wFlags & CBS_MASKED) { 800 if (sysColorMap[i].to != COLOR_BTNTEXT) 801 pColorTable[iColor] = RGB(255, 255, 255); 802 } 803 else 803 804 #endif 804 805 pColorTable[iColor].rgbBlue = GetBValue(sysColorMap[i].to); 805 806 pColorTable[iColor].rgbGreen = GetGValue(sysColorMap[i].to); 806 807 pColorTable[iColor].rgbRed = GetRValue(sysColorMap[i].to); 807 808 809 808 break; 809 } 810 } 810 811 } 811 812 nWidth = (INT)lpBitmapInfo->biWidth; … … 814 815 hbm = CreateCompatibleBitmap (hdcScreen, nWidth, nHeight); 815 816 if (hbm) { 816 817 818 819 820 821 822 823 824 817 HDC hdcDst = CreateCompatibleDC (hdcScreen); 818 HBITMAP hbmOld = SelectObject (hdcDst, hbm); 819 LPBYTE lpBits = (LPBYTE)(lpBitmap + 1); 820 lpBits += (1 << (lpBitmapInfo->biBitCount)) * sizeof(RGBQUAD); 821 StretchDIBits (hdcDst, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight, 822 lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS, 823 SRCCOPY); 824 SelectObject (hdcDst, hbmOld); 825 DeleteDC (hdcDst); 825 826 } 826 827 ReleaseDC ((HWND)0, hdcScreen); … … 855 856 HWND WINAPI 856 857 CreateToolbar (HWND hwnd, DWORD style, UINT wID, INT nBitmaps, 857 858 858 HINSTANCE hBMInst, UINT wBMID, 859 LPCOLDTBBUTTON lpButtons,INT iNumButtons) 859 860 { 860 861 return CreateToolbarEx (hwnd, style | CCS_NODIVIDER, wID, nBitmaps, 861 862 862 hBMInst, wBMID, (LPCTBBUTTON)lpButtons, 863 iNumButtons, 0, 0, 0, 0, sizeof (OLDTBBUTTON)); 863 864 } 864 865 … … 885 886 if (pdvi->cbSize != sizeof(DLLVERSIONINFO)) { 886 887 WARN("wrong DLLVERSIONINFO size from app"); 887 888 return E_INVALIDARG; 888 889 } 889 890 … … 894 895 895 896 TRACE("%lu.%lu.%lu.%lu\n", 896 897 897 pdvi->dwMajorVersion, pdvi->dwMinorVersion, 898 pdvi->dwBuildNumber, pdvi->dwPlatformID); 898 899 899 900 return S_OK; … … 901 902 902 903 /*********************************************************************** 903 * 904 * DllInstall (COMCTL32.@) 904 905 */ 905 906 HRESULT WINAPI COMCTL32_DllInstall(BOOL bInstall, LPCWSTR cmdline) 906 907 { 907 FIXME("(%s, %s): stub\n", bInstall?"TRUE":"FALSE", 908 908 FIXME("(%s, %s): stub\n", bInstall?"TRUE":"FALSE", 909 debugstr_w(cmdline)); 909 910 910 911 return S_OK; … … 916 917 POINT pos; /* center of hover rectangle */ 917 918 INT iHoverTime; /* elapsed time the cursor has been inside of the hover rect */ 918 } _TRACKINGLIST; 919 } _TRACKINGLIST; 919 920 920 921 static _TRACKINGLIST TrackingList[10]; … … 955 956 if(TrackingList[i].tme.dwFlags & TME_HOVER) { 956 957 /* add the timer interval to the hovering time */ 957 TrackingList[i].iHoverTime+=iTimerInterval; 958 958 TrackingList[i].iHoverTime+=iTimerInterval; 959 959 960 /* has the cursor moved outside the rectangle centered around pos? */ 960 961 if((abs(pos.x - TrackingList[i].pos.x) > (hoverwidth / 2.0)) … … 985 986 } 986 987 } 987 988 988 989 /* stop the timer if the tracking list is empty */ 989 990 if(iTrackMax == 0) { … … 1036 1037 1037 1038 flags = ptme->dwFlags; 1038 1039 1039 1040 /* if HOVER_DEFAULT was specified replace this with the systems current value */ 1040 1041 if(ptme->dwHoverTime == HOVER_DEFAULT) … … 1042 1043 1043 1044 GetCursorPos(&pos); 1044 hwnd = WindowFromPoint(pos); 1045 hwnd = WindowFromPoint(pos); 1045 1046 1046 1047 if ( flags & TME_CANCEL ) { … … 1048 1049 cancel = 1; 1049 1050 } 1050 1051 1051 1052 if ( flags & TME_HOVER ) { 1052 1053 flags &= ~ TME_HOVER; 1053 1054 hover = 1; 1054 1055 } 1055 1056 1056 1057 if ( flags & TME_LEAVE ) { 1057 1058 flags &= ~ TME_LEAVE; … … 1075 1076 else 1076 1077 ptme->dwFlags = 0; 1077 1078 1078 1079 return TRUE; /* return here, TME_QUERY is retrieving information */ 1079 1080 } … … 1098 1099 { 1099 1100 TrackingList[i] = TrackingList[--iTrackMax]; 1100 1101 1101 1102 if(iTrackMax == 0) { 1102 1103 KillTimer(0, timer); … … 1119 1120 TrackingList[i].tme.dwHoverTime = ptme->dwHoverTime; 1120 1121 } 1121 1122 1122 1123 if(leave) 1123 1124 TrackingList[i].tme.dwFlags |= TME_LEAVE; 1124 1125 1125 1126 /* reset iHoverTime as per winapi specs */ 1126 TrackingList[i].iHoverTime = 0; 1127 1127 TrackingList[i].iHoverTime = 0; 1128 1128 1129 return TRUE; 1129 1130 } 1130 } 1131 } 1131 1132 1132 1133 /* if the tracking list is full return FALSE */ … … 1198 1199 1199 1200 hwndToolTip = CreateWindowExA(0, TOOLTIPS_CLASSA, NULL, 0, 1200 1201 1202 1201 CW_USEDEFAULT, CW_USEDEFAULT, 1202 CW_USEDEFAULT, CW_USEDEFAULT, hwndOwner, 1203 0, 0, 0); 1203 1204 1204 1205 /* Send NM_TOOLTIPSCREATED notification */ 1205 1206 if (hwndToolTip) 1206 1207 { 1207 1208 NMTOOLTIPSCREATED nmttc; 1208 1209 /* true owner can be different if hwndOwner is a child window */ 1209 1210 HWND hwndTrueOwner = GetWindow(hwndToolTip, GW_OWNER); 1210 1211 nmttc.hdr.hwndFrom = hwndTrueOwner; 1211 1212 nmttc.hdr.idFrom = GetWindowLongA(hwndTrueOwner, GWL_ID); 1212 1213 1213 nmttc.hdr.code = NM_TOOLTIPSCREATED; 1214 nmttc.hwndToolTips = hwndToolTip; 1214 1215 1215 1216 SendMessageA(GetParent(hwndTrueOwner), WM_NOTIFY, 1216 1217 (WPARAM)GetWindowLongA(hwndTrueOwner, GWL_ID), 1217 1218 (LPARAM)&nmttc); 1218 1219 } 1219 1220
Note:
See TracChangeset
for help on using the changeset viewer.