|
|
1.1 ! root 1: Changes in BTTNCUR.DLL Source Code and Documentation from Version 1.00b ! 2: to Version 1.1. See also below for 1.00 to 1.00b changes. ! 3: ! 4: BTTNCUR.DLL version 1.1 is now fully compatible and tested under Windows ! 5: 3.0. Previously the demo application crashed under Windows 3.0 on calls ! 6: to the non-existent MoveToEx (Win32 compatible). Version 1.1 only ! 7: uses MoveToEx for builds where the symbol WINVER < 0x030a. ! 8: ! 9: The images have been updated slightly and are now provided for 72dpi ! 10: (ega), 96dpi (vga), and 120dpi (super vga) ! 11: ! 12: Version 1.1 completely handles system color changes unlike version 1.00x. ! 13: This new version will dynamically convert black, light gray, dark gray, ! 14: and white pixels in the image bitmap into system colors set for the ! 15: button text, button shadow, button face, and button highlight, respectively. ! 16: If you have blue, red, yellow, and green button colors, BTTNCUR.DLL will ! 17: now work perfectly with all of them. ! 18: ! 19: BTTNCUR.DLL Version 1.1 also supports color images better by allowing ! 20: you to control which colors in the image bitmap are converted to system ! 21: colors. By default, any black, gray, or white colors are converted ! 22: into system button colors as decribed in the last paragraph. BTTNCUR.H ! 23: defines new PRESERVE_* flags for each of the four colors that are liable ! 24: to be converted. By specifing one or more flags you prevent BTTNCUR ! 25: from changing that color to a system color. For example, if you ! 26: want to preserve all black pixels in your image, specify PRESERVE_BLACK ! 27: when calling UIToolButtonDraw. ! 28: ! 29: Applications should obtain configuration data for the current display ! 30: through UIToolConfigureForDisplay. With this data the application can ! 31: configure itself for the correct toolbar size and button sizes and load ! 32: the appropriate application supplied bitmaps. ! 33: ! 34: Applications using UIToolConfigureForDisplay should now use ! 35: UIToolButtonDrawTDD instead of UIToolButtonDraw, passing one extra ! 36: parameter, a pointer to the TOOLDISPLAYDATA. Applications that ! 37: still call UIToolButtonDraw will always use 96dpi. ! 38: ! 39: NOTE: BTTNCUR.WRI has not been updated to reflect the new APIs. ! 40: ! 41: ! 42: ------------------------ ! 43: BTTNCUR.H changes ! 44: Added PRESERVE_ flags to allow application to control color conversions ! 45: from black, dark gray, light gray, and white into the ! 46: file compatible with C++. ! 47: ! 48: Added prototype for UIToolConfigureForDisplay, TOOLDISPLAYDATA structure, ! 49: and definitions for button and image sizes on 72dpi, 96dpi, and 120dpi. ! 50: ! 51: ------------------------ ! 52: BTTNCUR.RCV version changes ! 53: FILEVERSION and PRODUCTVERSION changed from 1,0,0,2 to 1,0,1,0 ! 54: ! 55: VALUE "FileVersion" and VALUE "ProductVersion" changed from ! 56: "1.00b\0","\0" to "1.1\0","\0" ! 57: ! 58: ! 59: ------------------------ ! 60: BTTNCURI.H changes ! 61: Defined STDCOLOR_* values as indices into an array in BTTNCUR.C ! 62: that holds hard-coded default button color that never change ! 63: regardless of the system colors. Also defined SYSCOLOR_* ! 64: flags that matched STDCOLOR_* flags for uniform array indices. ! 65: ! 66: Removed NEAR, FAR, and PASCAL from any function that didn't need it ! 67: so we can port to Windows NT cleanly. ! 68: ! 69: ------------------------ ! 70: BTTNCUR.C source code changes. There are significant modifications. ! 71: ! 72: Overall: ! 73: Updated header comment ! 74: ! 75: Removed NEAR, FAR, and PASCAL from any function that didn't need it ! 76: so we can port to Windows NT cleanly. ! 77: ! 78: #define STRICT at top of file ! 79: ! 80: Globals: ! 81: Eliminated the COLORREFs prefixed with RGB. Only a few are needed ! 82: statically and were moved to HBrushDitherCreate. ! 83: ! 84: Also added an array of standard colors used in the standard images: ! 85: ! 86: static const ! 87: COLORREF crStandard[4]={ RGB(0, 0, 0) //STDCOLOR_BLACK ! 88: , RGB(128, 128, 128) //STDCOLOR_DKGRAY ! 89: , RGB(192, 192, 192) //STDCOLOR_LTGRAY ! 90: , RGB(255, 255, 255)}; //STDCOLOR_WHITE ! 91: ! 92: Added an array of standard images instead of just 96dpi versions. ! 93: ! 94: UIToolConfigureForDisplay: ! 95: Added function to return the resolution of the display and ! 96: size information about button and image sizes. ! 97: ! 98: ! 99: ToolButtonInit(): ! 100: Call to CreatePatternBrush moved into HBrushDitherCreate. ! 101: Conditionally sets the highlight color for HDitherBrushCreate ! 102: depending on Windows 3.x or Windows 3.0 (3.0 did not support ! 103: COLOR_BTNHIGHLIGHT). ! 104: ! 105: ! 106: ToolButtonFree(): ! 107: Removed some old debug output no longer useful. ! 108: ! 109: ! 110: HDitherBitmapCreate() ! 111: Renamed to HBrushDitherCreate. ! 112: Moved CreatePatterBrush code from ToolButtonInit into this ! 113: function. ! 114: ! 115: To support changing system colors, this function maintains ! 116: static variables for the face and highlight colors that we ! 117: use to create the brush. If the function is called and the ! 118: current colors in the global hBrushDither are different than ! 119: the system colors, we recreate the brush and update the global ! 120: hBrushDither, deleting the old brush. Otherwise we just return ! 121: hBrushDither. ! 122: ! 123: Note that if we fail to create the new brush we just maintain ! 124: the old. We'll paint something, albeit not in the right colors, ! 125: but something nontheless. ! 126: ! 127: ! 128: UIToolButtonDraw(): ! 129: Calls UIToolButtonDrawTDD with default display configuration. ! 130: ! 131: UIToolButtonDrawTDD(): ! 132: This is the function that was overhauled the most, specifically ! 133: to handle variable colors. ! 134: ! 135: First, we added several local variables of which two are important. ! 136: crSys is an array of system colors for the text, shadow, face, ! 137: highlight, and frame, declared as static to keep references to ! 138: it off DS instead of SS; if it's in SS things will crash. The second ! 139: important variable is uColor, which receives the color preservation ! 140: flags passed in the hibyte of the uState parameter to UIToolButtonDraw. ! 141: ! 142: All the code to draw a blank button outline was moved into a separate ! 143: function DrawBlankButton. Since this procedure needs all the system ! 144: colors to do it's thing, I've set it up to take an array of five ! 145: COLORREFs (exactly crSys) in which it stores those color (it also ! 146: uses it as its color variables). This way we only have to call ! 147: GetSysColor once for each system color. ! 148: ! 149: Anything dealing with the dithered brush is moved to the ! 150: BUTTONGROUP_LIGHTFACE case where we just get the current brush ! 151: by calling HBrushDitherCreate, passing it the current face ! 152: and highlight colors. Remember that is these colors match those ! 153: used in the currently held global hBrushDither, this function just ! 154: returns that global, so it's quite fast. We have to be very careful ! 155: not to delete this brush where we're done with it since it is global. ! 156: ! 157: The largest amount of new code is under the line: ! 158: ! 159: if ((uState & BUTTONGROUP_ACTIVE) && !(uState & BUTTONGROUP_BLANK)) ! 160: ! 161: This has changed from a single BitBlt call to a much more complex ! 162: operation to handle specific color conversions and preservations. ! 163: A little optimization was done to detect when the system colors ! 164: for buttons match the defaults, that is, black, dark gray, light gray, ! 165: and white for text, shadow, face, and highlight. If these colors ! 166: all match, or if the caller requested preservation of all colors, ! 167: the we just do the single BitBlt of old. ! 168: ! 169: Otherwise we loop through each of the black/white/gray colors ! 170: that need possible conversion. For each one we create a mask ! 171: that contains 1's where the converting color exists in the image ! 172: and 0's everywhere else. For each color then we BitBlt the ! 173: mask, a brush matching the system color we're converting to, ! 174: and the destination bitmap (which we initialize with the unmodified ! 175: image itself) using ROP_DSPDxax. This leaves any color but the ! 176: one under conversion alone and replaces the converted color with ! 177: the system color. ! 178: ! 179: If the caller set a specific flag to preserve one or more specific ! 180: colors, then we replace the standard color with the standard color, ! 181: resulting in a no-op. ! 182: ! 183: Finally, to reduce flicker for this four Blt operation we create ! 184: and build the final image in a temporary bitmap, making it 6 total ! 185: Blts to handle the color changes. But since we optimized for the ! 186: 99% case where the system colors are the standard colors, this isn't ! 187: too much of a consideration. ! 188: ! 189: color conversions. ! 190: ! 191: ! 192: DrawBlankButton(): ! 193: New internal function. Moved code from UIToolButtonDraw here. ! 194: ! 195: ! 196: ! 197: ! 198: ------------------------ ! 199: CURSORS.C ! 200: Updated header comment ! 201: #define STRICT at top of file ! 202: ! 203: Removed PASCAL on both internal functions. ! 204: ! 205: ! 206: CursorsFree ! 207: Eliminated all the code inside this function as it was unnecessary. ! 208: ! 209: UICursorLoad ! 210: Eliminated code to revalidate a cursor in the array. Unnecessary. ! 211: ! 212: ! 213: ------------------------ ! 214: BCDEMO.C ! 215: ! 216: Tested for running under Windows 3.0 and avoided MoveToEx calls, ! 217: using MoveTo instead. Calling MoveToEx in a Windows 3.1 app ! 218: marked as 3.0 compatible under 3.0 causes an unknown GP fault. ! 219: ! 220: Uses UIToolButtonConfigureForDisplay and UIToolButtonDrawTDD. ! 221: ! 222: ! 223: ------------------------ ! 224: BTTNCUR.WRI ! 225: Updated to document PRESERVE_ flags and new capabilities of the library ! 226: with the exception of display configuration (no time). ! 227: Corrected two typos. ! 228: ! 229: ! 230: ! 231: ------------------------------------------------------------------------------ ! 232: ! 233: Changes in BTTNCUR.DLL Source Code and Documentation from Version 1.00 ! 234: to Version 1.00b ! 235: ! 236: ------------------------ ! 237: BTTNCUR.H changes ! 238: Added #ifdef __cplusplus to include extern "C" making the ! 239: file compatible with C++. ! 240: ! 241: ! 242: ------------------------ ! 243: BTTNCURI.H changes ! 244: Added #ifdef __cplusplus to include extern "C" making the ! 245: file compatible with C++. ! 246: ! 247: Removed code contained between a #ifdef NEVER that is unused. ! 248: ! 249: ! 250: ------------------------ ! 251: BTTNCUR.RCV version changes ! 252: FILEVERSION and PRODUCTVERSION changed from 1,0,0,0 to 1,0,0,2 ! 253: ! 254: VALUE "FileVersion" and VALUE "ProductVersion" changed from ! 255: "1.00\0","\0" to "1.00b\0","\0" ! 256: ! 257: ! 258: ------------------------ ! 259: BTTNCUR.C source code changes. ! 260: ! 261: Added a global for the frame color ! 262: static COLORREF rgbFrame =RGB(0, 0, 0); ! 263: ! 264: WEP(): ! 265: Added comment about resource cleanup messages in DEBUG mode. ! 266: ! 267: ! 268: ToolButtonInit(): ! 269: Added the line below just before the assignment of hDCGlyphs: ! 270: ! 271: rgbFrame=GetSysColor(COLOR_WINDOWFRAME); ! 272: ! 273: This insures that the frame color is properly shown on plasma ! 274: displays. ! 275: ! 276: ! 277: ToolButtonFree(): ! 278: Added the following lines just before return: ! 279: ! 280: if (NULL!=hBmpStandardImages) ! 281: DeleteObject(hBmpStandardImages); ! 282: hBmpStandardImages=NULL; ! 283: ! 284: ! 285: UIToolButtonDraw(): ! 286: The image centering is one too high. The line ! 287: ! 288: yOffsetGlyph=((dy-bmy) >> 1)-1; ! 289: ! 290: now reads: ! 291: ! 292: yOffsetGlyph=(dy-bmy) >> 1; ! 293: ! 294: ! 295: The declaration HBITMAP hBmp; now read HBITMAP hBmp=NULL; ! 296: ! 297: The line hBmpT=SelectObject(hDCGlyphs, hBmp); is now two: ! 298: ! 299: if (NULL!=hBmp) ! 300: SelectObject(hDCGlyphs, hBmp); ! 301: ! 302: The line SelectObject(hDCGlyphs, hBmpT); is now two: ! 303: ! 304: if (NULL!=hBmpT) ! 305: SelectObject(hDCGlyphs, hBmpT); ! 306: ! 307: ! 308: ! 309: ------------------------ ! 310: BTTNCUR.BMP ! 311: Fixed the images to be 16*15 (the standard) instead of 16*16 ! 312: as they originally were. Changed the label "16x16" to "16x15". ! 313: ! 314: Copied an image of the disabled state of Context-Sensitive Help ! 315: to this bitmap as it was previously missing. ! 316: ! 317: ! 318: ------------------------ ! 319: BTTNCUR.WRI ! 320: Corrected a few typos. Added comment about application termination ! 321: and erroneous debug warnings.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.