各位大侠,我想在点击后插入一张bmp的透明图像(能够看背景的)该怎么做?以下是代码,但是不能显示,请帮忙改改。谢谢了。
case WM_LBUTTONDOWN:
{
hStaBitmap = LoadBitmap(m_hInstance, MAKEINTRESOURCE(IDB_STATICBK));
HDC hdc = GetDC(NULL);
g_hStaticDC = CreateCompatibleDC(hdc);
g_hOldBmp = SelectObject(g_hStaticDC, hStaBitmap);
HDC hdc2 = GetDC(hWnd);
hBackDC = CreateCompatibleDC(hdc);
BLENDFUNCTION bf;
bf.AlphaFormat=0;
bf.BlendFlags=0;
bf.BlendOp=AC_SRC_OVER;
bf.SourceConstantAlpha=100;//透明度0-255
AlphaBlend(hBackDC,0,44,320,80,g_hStaticDC,0,0,320,80,bf);
ReleaseDC(NULL, hdc);
ReleaseDC(NULL, hdc2);
}
break;
case WM_LBUTTONDOWN:
{
hStaBitmap = LoadBitmap(m_hInstance, MAKEINTRESOURCE(IDB_STATICBK));
HDC hdc = GetDC(NULL);
g_hStaticDC = CreateCompatibleDC(hdc);
g_hOldBmp = SelectObject(g_hStaticDC, hStaBitmap);
HDC hdc2 = GetDC(hWnd);
hBackDC = CreateCompatibleDC(hdc);
BLENDFUNCTION bf;
bf.AlphaFormat=0;
bf.BlendFlags=0;
bf.BlendOp=AC_SRC_OVER;
bf.SourceConstantAlpha=100;//透明度0-255
AlphaBlend(hBackDC,0,44,320,80,g_hStaticDC,0,0,320,80,bf);
ReleaseDC(NULL, hdc);
ReleaseDC(NULL, hdc2);
}
break;
AlphaBlend(hBackDC,0,44,320,80,g_hStaticDC,0,0,320,80,bf);
=========
看不明白你的代码啊,你在AlphaBlend中设的目标DC是hBackDc,这个是一个内存DC,当然显示不出来了。
case WM_LBUTTONDOWN:
{
hStaBitmap = LoadBitmap(m_hInstance, MAKEINTRESOURCE(IDB_STATICBK));
HDC hdc = GetDC(NULL);
g_hStaticDC = CreateCompatibleDC(hdc);
g_hOldBmp = SelectObject(g_hStaticDC, hStaBitmap);
HDC hdc2 = GetDC(hWnd);
//hBackDC = CreateCompatibleDC(hdc);//这个没用
BLENDFUNCTION bf;
bf.AlphaFormat=0;
bf.BlendFlags=0;
bf.BlendOp=AC_SRC_OVER;
bf.SourceConstantAlpha=100;//透明度0-255
AlphaBlend(hdc2,0,44,320,80,g_hStaticDC,0,0,320,80,bf);
ReleaseDC(NULL, hdc);
ReleaseDC(NULL, hdc2);
}
break;
//hBackDC = CreateCompatibleDC(hdc);
然后
AlphaBlend(hdc2,0,44,320,80,g_hStaticDC,0,0,320,80,bf);
HBITMAP hStaBitmap,g_hOldBmp,hABC;
HDC hdc,hdc2,g_hStaticDC,hBackDC;
BLENDFUNCTION bf;hStaBitmap = LoadBitmap(g_Ins, MAKEINTRESOURCE(IDB_STATICBK));hdc = GetDC(NULL);
g_hStaticDC = CreateCompatibleDC(hdc);
g_hOldBmp = SelectObject(g_hStaticDC, hStaBitmap);
hdc2 = GetDC(hWnd);
hBackDC = CreateCompatibleDC(hdc2);
//增加1 为内容DC建立画布
hABC = CreateCompatibleBitmap(hdc2,320,80);
SelectObject(hBackDC, hABC);bf.AlphaFormat=0;
bf.BlendFlags=0;
bf.BlendOp=AC_SRC_OVER;
bf.SourceConstantAlpha=100;//透明度0-255
AlphaBlend(hBackDC,0,0,320,80,g_hStaticDC,0,0,320,80,bf);
//增加2 把内存DC画到目的DC
BitBlt(hdc2,0,0,200,200,hBackDC,0,0,SRCCOPY);ReleaseDC(NULL, hdc);
ReleaseDC(hwnd, hdc2);
DeleteObject(hABC);
DeleteDC(hBackDC);
DeleteDC(g_hStaticDC);
不好意思,我是新手,拜托大家了。
把上面的代码修改一下即可
hdc2 = GetDC(hWnd);//hWnd->改为控件句柄.
其他不变.
InvalidateRect(hwnd,NULL,TRUE);