Example #1
0
        public static void DrawImage(Graphics graphics, Image image, Point point, bool disabled)
        {
            if (!disabled)
            {
                Rectangle destination = new Rectangle(point, image.Size);
                graphics.DrawImage(image, destination, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
            }
            else
            {
                // Painting a disabled gray scale image is done using ILS_SATURATE on WinXP.
                // This code emulates that behaviour if comctl32 version 6 is not availble.
                NativeMethods.DLLVERSIONINFO dvi = new NativeMethods.DLLVERSIONINFO();
                dvi.cbSize = Marshal.SizeOf(typeof(NativeMethods.DLLVERSIONINFO));
                NativeMethods.DllGetVersion(ref dvi);
                if (dvi.dwMajorVersion < 6)
                {
                    ImageAttributes attributes  = new ImageAttributes();
                    Rectangle       destination = new Rectangle(point, image.Size);
                    float[][]       matrix      = new float[5][];
                    matrix[0] = new float[] { 0.2222f, 0.2222f, 0.2222f, 0.0000f, 0.0000f };
                    matrix[1] = new float[] { 0.2222f, 0.2222f, 0.2222f, 0.0000f, 0.0000f };
                    matrix[2] = new float[] { 0.2222f, 0.2222f, 0.2222f, 0.0000f, 0.0000f };
                    matrix[3] = new float[] { 0.3333f, 0.3333f, 0.3333f, 0.7500f, 0.0000f };
                    matrix[4] = new float[] { 0.0000f, 0.0000f, 0.0000f, 0.0000f, 1.0000f };
                    attributes.SetColorMatrix(new ColorMatrix(matrix));
                    graphics.DrawImage(image, destination, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
                }
                else
                {
                    ImageList imageList = new ImageList();
                    imageList.ImageSize  = image.Size;
                    imageList.ColorDepth = ColorDepth.Depth32Bit;
                    imageList.Images.Add(image);

                    IntPtr hdc = graphics.GetHdc();
                    NativeMethods.IMAGELISTDRAWPARAMS ildp = new NativeMethods.IMAGELISTDRAWPARAMS();
                    ildp.cbSize  = Marshal.SizeOf(typeof(NativeMethods.IMAGELISTDRAWPARAMS));
                    ildp.himl    = imageList.Handle;
                    ildp.i       = 0;               // image index
                    ildp.hdcDst  = hdc;
                    ildp.x       = point.X;
                    ildp.y       = point.Y;
                    ildp.cx      = 0;
                    ildp.cy      = 0;
                    ildp.xBitmap = 0;
                    ildp.yBitmap = 0;
                    ildp.fStyle  = NativeMethods.ILD_TRANSPARENT;
                    ildp.fState  = NativeMethods.ILS_SATURATE;
                    ildp.Frame   = -100;
                    NativeMethods.ImageList_DrawIndirect(ref ildp);
                    graphics.ReleaseHdc(hdc);
                }
            }
        }
        private void NotifyCustomDrawToolBar(ref Message m)
        {
            m.Result = (IntPtr)NativeMethods.CDRF_DODEFAULT;

            NativeMethods.DLLVERSIONINFO dvi = new NativeMethods.DLLVERSIONINFO();
            dvi.cbSize = Marshal.SizeOf(typeof(NativeMethods.DLLVERSIONINFO));
            NativeMethods.DllGetVersion(ref dvi);
            if (dvi.dwMajorVersion < 6)
            {
                NativeMethods.LPNMTBCUSTOMDRAW tbcd = (NativeMethods.LPNMTBCUSTOMDRAW)m.GetLParam(typeof(NativeMethods.LPNMTBCUSTOMDRAW));
                NativeMethods.RECT             rc   = tbcd.nmcd.rc;

                Rectangle rectangle = new Rectangle(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);

                Graphics       graphics = Graphics.FromHdc(tbcd.nmcd.hdc);
                CommandBarItem item     = items[tbcd.nmcd.dwItemSpec];

                bool hot      = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_HOT) != 0);
                bool selected = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_SELECTED) != 0);
                bool disabled = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_DISABLED) != 0);

                CommandBarCheckBox checkBox = item as CommandBarCheckBox;
                if ((checkBox != null) && (checkBox.IsChecked))
                {
                    ControlPaint.DrawBorder3D(graphics, rectangle, Border3DStyle.SunkenOuter);
                }
                else if (selected)
                {
                    ControlPaint.DrawBorder3D(graphics, rectangle, Border3DStyle.SunkenOuter);
                }
                else if (hot)
                {
                    ControlPaint.DrawBorder3D(graphics, rectangle, Border3DStyle.RaisedInner);
                }

                Image image = item.Image;
                if (image != null)
                {
                    Size  size  = image.Size;
                    Point point = new Point(rc.left + ((rc.right - rc.left - size.Width) / 2), rc.top + ((rc.bottom - rc.top - size.Height) / 2));
                    NativeMethods.DrawImage(graphics, image, point, disabled);
                }

                m.Result = (IntPtr)NativeMethods.CDRF_SKIPDEFAULT;
            }
        }
Example #3
0
		private void NotifyCustomDrawToolBar(ref Message m)
		{
			m.Result = (IntPtr) NativeMethods.CDRF_DODEFAULT;

			NativeMethods.DLLVERSIONINFO dvi = new NativeMethods.DLLVERSIONINFO();
			dvi.cbSize = Marshal.SizeOf(typeof(NativeMethods.DLLVERSIONINFO));
			NativeMethods.DllGetVersion(ref dvi);
			if (dvi.dwMajorVersion < 6)
			{
				NativeMethods.LPNMTBCUSTOMDRAW tbcd = (NativeMethods.LPNMTBCUSTOMDRAW)m.GetLParam(typeof(NativeMethods.LPNMTBCUSTOMDRAW));
				NativeMethods.RECT rc = tbcd.nmcd.rc;

				Rectangle rectangle = new Rectangle(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);

				Graphics graphics = Graphics.FromHdc(tbcd.nmcd.hdc);
				CommandBarItem item = items[tbcd.nmcd.dwItemSpec];

				bool hot = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_HOT) != 0);
				bool selected = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_SELECTED) != 0);
				bool disabled = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_DISABLED) != 0);
		
				CommandBarCheckBox checkBox = item as CommandBarCheckBox;
				if ((checkBox != null) && (checkBox.IsChecked))
				{
					ControlPaint.DrawBorder3D(graphics, rectangle, Border3DStyle.SunkenOuter);
				}
				else if (selected)
				{
					ControlPaint.DrawBorder3D(graphics, rectangle, Border3DStyle.SunkenOuter);
				}
				else if (hot)
				{
					ControlPaint.DrawBorder3D(graphics, rectangle, Border3DStyle.RaisedInner);
				}

				Image image = item.Image;
				if (image != null)
				{
					Size size = image.Size;
					Point point = new Point(rc.left + ((rc.right - rc.left - size.Width) / 2), rc.top + ((rc.bottom - rc.top - size.Height) / 2));
					NativeMethods.DrawImage(graphics, image, point, disabled);
				}

				m.Result = (IntPtr)NativeMethods.CDRF_SKIPDEFAULT;
			}
		}
        public static void DrawImage(Graphics graphics, Image image, Point point, bool disabled)
        {
            if (!disabled)
            {
                Rectangle destination = new Rectangle(point, image.Size);
                graphics.DrawImage(image, destination, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
            }
            else
            {
                // Painting a disabled gray scale image is done using ILS_SATURATE on WinXP.
                // This code emulates that behaviour if comctl32 version 6 is not availble.
                NativeMethods.DLLVERSIONINFO dvi = new NativeMethods.DLLVERSIONINFO();
                dvi.cbSize = Marshal.SizeOf(typeof(NativeMethods.DLLVERSIONINFO));
                NativeMethods.DllGetVersion(ref dvi);
                if (dvi.dwMajorVersion < 6)
                {
                    ImageAttributes attributes = new ImageAttributes();
                    Rectangle destination = new Rectangle(point, image.Size);
                    float[][] matrix = new float[5][];
                    matrix[0] = new float[] { 0.2222f, 0.2222f, 0.2222f, 0.0000f, 0.0000f };
                    matrix[1] = new float[] { 0.2222f, 0.2222f, 0.2222f, 0.0000f, 0.0000f };
                    matrix[2] = new float[] { 0.2222f, 0.2222f, 0.2222f, 0.0000f, 0.0000f };
                    matrix[3] = new float[] { 0.3333f, 0.3333f, 0.3333f, 0.7500f, 0.0000f };
                    matrix[4] = new float[] { 0.0000f, 0.0000f, 0.0000f, 0.0000f, 1.0000f };
                    attributes.SetColorMatrix(new ColorMatrix(matrix));
                    graphics.DrawImage(image, destination, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
                }
                else
                {
                    ImageList imageList = new ImageList();
                    imageList.ImageSize = image.Size;
                    imageList.ColorDepth = ColorDepth.Depth32Bit;
                    imageList.Images.Add(image);

                    IntPtr hdc = graphics.GetHdc();
                    NativeMethods.IMAGELISTDRAWPARAMS ildp = new NativeMethods.IMAGELISTDRAWPARAMS();
                    ildp.cbSize = Marshal.SizeOf(typeof(NativeMethods.IMAGELISTDRAWPARAMS));
                    ildp.himl = imageList.Handle;
                    ildp.i = 0; // image index
                    ildp.hdcDst = hdc;
                    ildp.x = point.X;
                    ildp.y = point.Y;
                    ildp.cx = 0;
                    ildp.cy = 0;
                    ildp.xBitmap = 0;
                    ildp.yBitmap = 0;
                    ildp.fStyle = NativeMethods.ILD_TRANSPARENT;
                    ildp.fState = NativeMethods.ILS_SATURATE;
                    ildp.Frame = -100;
                    NativeMethods.ImageList_DrawIndirect(ref ildp);
                    graphics.ReleaseHdc(hdc);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Finds out if COMCTL32.DLL version is new enough to support native
        /// arrows in headers.
        /// </summary>
        /// <returns>true if arrows are supported, false otherwise.</returns>
        private static bool ComCtlDllSupportsArrows()
        {
            IntPtr hModule = IntPtr.Zero;

            try
            {
                hModule = NativeMethods.LoadLibrary("comctl32.dll");
                if (hModule != IntPtr.Zero)
                {
                    IntPtr proc = NativeMethods.GetProcAddress(hModule, "DllGetVersion");
                    if (proc == IntPtr.Zero)
                        return false;
                }

                NativeMethods.DLLVERSIONINFO vi = new NativeMethods.DLLVERSIONINFO();
                vi.cbSize = Marshal.SizeOf(typeof(NativeMethods.DLLVERSIONINFO));

                NativeMethods.DllGetVersion(ref vi);

                return vi.dwMajorVersion >= 6;
            }
            finally
            {
                if (hModule != IntPtr.Zero)
                    NativeMethods.FreeLibrary(hModule);
            }
        }