读书人

做透明按钮时,只有第一次显示正常,而后

发布时间: 2012-01-16 23:36:51 作者: rapoo

做透明按钮时,只有第一次显示正常,而后的显示都不是透明了,为什么?
我自己做了一个按钮类,在其中的DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)中调用一个透明效果处理DrawTransBitmap(....),但是这个按钮显示的时候,只有第一次是正常的透明的,
但是当这个按钮被别的窗口覆盖以后,再还原显示出来的时候,
这个按钮的背景就变成刚刚那个窗口的背景颜色了,不透明了,请问我应该怎么修改呢?
我只在DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)中进行了透明处理,是不是还应该在别的地方也做呢?

[解决办法]
在OnPaint()或者OnEraseBkgnd()事件里还要再写对透明的操作。
[解决办法]
WM_CTLCOLORBTN:
SetBkMode((HDC)wParam, TRANSPARENT);
return (LONG)GetStockObject(NULL_BRUSH);
[解决办法]
DrawTransBitmap

只画有图形的地方,不画背景,应该让Button的父窗口刷新一下
[解决办法]
HBRUSH CDIALOGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_EDIT)
pDC->SetTextColor(RGB(0,0,255));

if(nCtlColor== CTLCOLOR_LISTBOX)
{
HBRUSH m_hbrush;
m_hbrush=CreateSolidBrush(RGB(0,0,0));
pDC->SetBkMode(TRANSPARENT);
//设置字体颜色
pDC->SetTextColor(RGB(255,255,255));
return m_hbrush;
}
CBrush m_cBrush;
m_cBrush.CreateSolidBrush(RGB(0,255,255));
switch(nCtlColor)
{
case CTLCOLOR_DLG:
pDC->SetBkMode(TRANSPARENT);
break;
case CTLCOLOR_STATIC:
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(0,255,255));
break;
}
DeleteObject(m_cBrush);
// TODO: Return a different brush if the default is not desired
return hbr;
}

读书人网 >VC/MFC

热点推荐