请教不规则透明窗口,高手请进!
我在一个基于对话框的工程中,想加载一张图片,显示为不规则透明窗口,代码如下(参考别人的,参考的例子是基于CWnd类的)--为什么参考例子可以工作而我的不行?--基于对话框的工程还要添加额外的代码吗?
请高手帮忙指点:)
void CTransparentDlg::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
//////////////////////////////////////////////////////////////////////////////////////////////////
// Load bitmap
CBitmap cbmp1;
cbmp1.LoadBitmap(IDB_BITMAP1);
BITMAP bm;
cbmp1.GetBitmap(&bm);
CDC* pdc = GetDC();
CDC dcMem;
dcMem.CreateCompatibleDC(pdc);
dcMem.SelectObject(cbmp1);
pdc->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
COLORREF clrMask(RGB(20,20,20));
clrMask = ::GetPixel(dcMem.m_hDC,0,0);
HRGN rgnTemp;
int iX;
int nWidth = bm.bmWidth;
int nHeight = bm.bmHeight;
int iLeft;
HRGN hrgnWnd;
hrgnWnd = ::CreateRectRgn(0, 0, 0, 0);
/////////////////////////////////////////////////////////////////////////////////////////
CRect rctWnd;
GetWindowRect(&rctWnd);
CPoint ptOrg = rctWnd.TopLeft();
CRect rcNewWnd=CRect(ptOrg,CSize(bm.bmWidth,bm.bmHeight));
for(int y=0; y<nHeight; y++)
{
iX = 0;
do
{
COLORREF clrTemp = ::GetPixel(dcMem.m_hDC,iX,y);
while(iX<nWidth && clrTemp == clrMask)
{
clrTemp = ::GetPixel(dcMem.m_hDC,iX,y);
iX++;
}
// while(iX<nWidth && ::GetPixel(dcMem.m_hDC,iX,y)==clrMask)
// {
// iX++;
// }
iLeft = iX;
while(iX<nWidth && ::GetPixel(dcMem.m_hDC,iX,y)!=clrMask)
{
iX++;
}
rgnTemp = ::CreateRectRgn(iLeft, iX, y, y+1);
CombineRgn(hrgnWnd,hrgnWnd,rgnTemp,RGN_OR);
DeleteObject(rgnTemp);
} while(iX<nWidth);
}
BOOL bResult = SetWindowRgn(hrgnWnd, true);
MoveWindow(rcNewWnd);
}