Environment: VC++ 4.2 Since the arcticle Transparent Window by Franz Polzer helped me a lot, I would like to contribute a little tool that converts bitmaps to region-files suitable to use as a window-mask (SetWindowRgn). Why does anybody need this tool? its flexible; its possible to adjust the key-color its fast (not the tool, but […]
CodeGuru content and product recommendations are
editorially independent. We may make money when you click on links
to our partners.
Learn More
Environment: VC++ 4.2
Since the arcticle
Transparent Window by Franz Polzer helped
me a lot, I would like to contribute a little tool that converts bitmaps
to region-files suitable to use as a window-mask (SetWindowRgn).
Why does anybody need this tool?
- its flexible; its possible to adjust the key-color
- its fast (not the tool, but your app); loading a region is better than
creating it online
- its free; source is included
How to use it?
enter a source bitmap path (or press browse)
- enter a key color (or click onto any pixel of the source bitmap)
- press “calc !” wait and see the result
- enter a destination path (or press browse)
- press “write”
To use those region-files in your own project, you need to do the following:
Import the *.RGN-file into your project-resources. The type of that resource
needs to be set to “Data”.
You can also import it manually by editing your *.rc file.
Just insert something like the following:
IDR_SAMPLE_REGION RCDATA DISCARDABLE “res\sample.rgn”
Below is some example code that loads and activates a region,
it should be called from something like “OnInitDialog”.
BOOL CTransparentWnd::InitRegion (unsigned short nRegionID)
{
const char *MSGCAPTION=”Init Region”;
HRSRC hrsrc;
HGLOBAL hmem;
DWORD dwSize;
RGNDATA *rd;
CRgn rgn;
if ((hrsrc=FindResource(NULL,
(LPCSTR)nRegionID,
RT_RCDATA)) == NULL)
{
MessageBox (“failed to find region”,MSGCAPTION,MB_OK);
return FALSE;
}
if ((hmem=LoadResource (NULL,hrsrc)) == NULL)
{
MessageBox (“failed to load region”,MSGCAPTION,MB_OK);
return FALSE;
}
if ((dwSize=SizeofResource (NULL,hrsrc)) == 0)
{
MessageBox (“region has an invalid size”,MSGCAPTION,MB_OK);
return FALSE;
}
if ((rd=(RGNDATA *)LockResource (hmem)) == NULL)
{
MessageBox (“failed to lock resource memory”,MSGCAPTION,MB_OK);
return FALSE;
}
if (!rgn.CreateFromData (NULL,dwSize,rd))
{
MessageBox (“failed to create a region from that data”,MSGCAPTION,MB_OK);
return FALSE;
}
if (!SetWindowRgn (GetSafeHwnd(),(HRGN)rgn,TRUE))
{
MessageBox (“failed to set the region for that window”,MSGCAPTION,MB_OK);
return FALSE;
}
return TRUE;
}
Download project files – 34 KB