We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you a podcast all about Citrix Workspace, moving to the cloud, and analytics & intelligence. Episode 2 coming soon!Listen Now

x

how to create a brush with a transparent bitmap

molli500
molli500 asked
on
Medium Priority
715 Views
Last Modified: 2013-12-03
I need to fill polygons with a certain pattern and a certain color. This is most easilly done with a patterned brush.
However the pattern must be transparent.( it must consist of one transparent part an one coloured part) It must work just  like a mask, but a mask only works on other bit arrays. What i need is more like another predefined hatchbrush.
These will work with any color, but i need a lot more patterns.  

It is possible to create a brush with CreatePatternBrush() (windows API), but with this method the background is affected.(NOT transparent)

In short: I need a way to create a brush with any pattern(not the predefined rubbish) and any color that must be partially transparent.

It must be a solution that will work with windows API calls only, not with OWL or something like that.
Comment
Watch Question

Author

Commented:
Edited text of question
Tommy HuiEngineer

Commented:
There isn't anything in Windows that knows about transparencies other than cursors and icons. You will need to write the code yourself if you want transparent brushes.

Commented:
Masks and bitmap operations are the best way to achieve this.

Author

Commented:
Masks and bitmap operations don't work with the predefined draw functions. That is why I need a brush. I can very probably program my way around this by using masks and such, but thta is what i am trying to avoid. One answer suggested this, but that wasn't the question. What I need is a brush that will not affect the background except where its pattern is. It should be possible to use any colour for any pattern.
Commented:
HDC hdc = GetDC(m_hWnd);

if (hdc)
{
long x=0, y=0, width=0, height=0;
            
            if (m_HorzDrag.size())
            {
                  HBRUSH hOld = (HBRUSH)SelectObject(hdc, m_hBrush);

                  x = m_recHDrag.left;
                  y = m_recHDrag.top;
                  width  = m_recHDrag.right -x;
                  height = m_recHDrag.bottom-y;

                  PatBlt(hdc, x, y, width, height, PATINVERT);
                  SelectObject(hdc, hOld);
            }
            if (m_VertDrag.size())
            {
                  HBRUSH hOld = (HBRUSH)SelectObject(hdc, m_hBrush);

                  x = m_recVDrag.left;
                  y = m_recVDrag.top;
                  width  = m_recVDrag.right -x;
                  height = m_recVDrag.bottom-y;

                  PatBlt(hdc, x, y, width, height, PATINVERT);
                  SelectObject(hdc, hOld);
            }

            ReleaseDC(m_hWnd, hdc);
      }

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.