读书人

按钮透明别不见啊该怎么解决

发布时间: 2012-03-20 14:01:11 作者: rapoo

按钮透明,别不见啊
在对话框上添加了按钮,背景用图片DrawImage的。现在我想的是让添加的按钮透明,也就是试整个对话框是一个整的图片,但鼠标经过按钮时会高亮。按网上的做法,派生了class MyCButton : public CButton。在MyCButton里响应了OnMouseMove,OnMouseLeave,OnMouseHover等消息,
void MyCButton ::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
_TrackMouseEvent(&tme);
CButton::OnMouseMove(nFlags, point);
}
LRESULT MyCButton ::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
m_btnState = BTN_NOMAL;
m_bIsFristIn = TRUE;
TRACE(_T("Leave \n"));
Invalidate();
return 0;
}
LRESULT MyCButton ::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
m_btnState = BTN_HOVER;
TRACE(_T("Hover \n"));
if (m_bIsFristIn)
{
Invalidate();
m_bIsFristIn = FALSE;
}
return 0;
}
还有重载了OnPaint()消息,但不知道里面写什么代码,只写了这些。
void MyCButton::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics myGraphics(dc.m_hDC);
CRect ClientRect;
GetClientRect(&ClientRect);
//粘贴背景
dc.BitBlt (0,0,ClientRect.Width (),ClientRect.Height(),&m_memDC,0,0,SRCCOPY);

//内存画布
Bitmap CacheImage(ClientRect.Width(),ClientRect.Height());//依窗口大小创建内存画布
Graphics buffer(&CacheImage);


myGraphics.DrawImage(&CacheImage,0,0);
}
现在的问题是,我给按扭关联了一个变量后,程序运行,按钮不见了。。。。更别说透明了。。。,求解。

[解决办法]
BtnST按钮类应该适合你的要求,用的挺不错的。。。
[解决办法]
没有那是肯定的啊,你看你画哪去了
myGraphics.DrawImage(&CacheImage,0,0);
画到缓存画布上了,没拷贝回来吧
[解决办法]
按钮这种最简单的控件不如自己做。
创建一个全空白窗口,窗口里面画一个方形(占据整个窗口),里面填充颜色,鼠标经过再填充另一种颜色。还有一些按钮信息可以自己加。
我现在在研究用SDK实现所有控件,楼主有兴趣不妨一起。

读书人网 >VC/MFC

热点推荐