Invalidate无法清除边框? 我在按钮客户区边缘画了一个边框,我发现我调用Invalidate的时候边框无法消除,我是用一个条件来绘制边框的,调用Invalidate的时候应该是没有去绘制边框没分了。。就这么点请大家见谅 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 贴代码。InvalidateRect基本就是重新绘制的意思:使某一区域无效,重新绘制。还要看你代码是怎么写的。 又开一贴。真的是Invalidate没效果?试试Invalidate();UpdateWindow(); if (ST_MOUSEDOWN == m_DrawState)//按下按钮,绘制反向矩形框 { pDC->Draw3dRect(rcDraw,GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT)); } else//未按下按钮,绘制正常矩形框 { if(ST_MOVEIN == m_DrawState || ST_MOUSEUP == m_DrawState) { pDC->Draw3dRect(rcDraw,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_3DSHADOW)); } }LRESULT CTransParentButton::OnMouseLeave(WPARAM wParam,LPARAM lParam){ m_bTracking = false; m_DrawState=ST_MOVEOUT; InvalidateEx(); return 0;}rcDraw区域是自绘函数中的lpDrawItemStruct->rcItem; 单由上面代码,能确定一定是 Invalidate出错? InvalidateEx();不认识。换成Invalidate();UpdateWindow();呢? 如果在Invalidate前面加入如下代码 边框就会消失CRect rect;GetWindowRect(rect);GetParent()->ScreenToClient(rect);GetParent()->InvalidateRect(rect); ST_MOVEOUT,ST_MOVEIN,ST_MOUSEUP,ST_MOUSEDOWN这些逻辑对了吗?加TRACE语句看看。 没有错,因为如果在Invalidate前面加入如下代码 边框就会消失CRect rect;GetWindowRect(rect);GetParent()->ScreenToClient(rect);GetParent()->InvalidateRect(rect); RedrawWindow试试。黔驴技穷了。 刷新的话只会重新draw,你看看你的画边框是在哪个函数里实现的 对的。。就是DrawItem 很奇怪啊,为什么会消除不掉边框。。 再明确下,不是消除不掉边框。而是Invalidate时DrawItem没有响应对吧。 我觉得不是,因为如果我在DrawItem中添加代码,可以实现再画一个边框覆盖上原来的边框 哎,你的函数没有触发你的DrawItem函数,你跟踪看看 背景是图片。。问题就是invalidate没有清除掉边框 问题解决了,我修改了我的类,问题出在invalidate的刷新区域和不刷背景时,调用invalidate对于没有重绘的地方是不会清除掉的。我把所有绘图都放于兼容DC中,最后拷贝给目标DC;不过最先要创建个DC把背景拷贝下来,复制给兼容DC谢谢大家的指导,结贴了!! 代码移植问题求助 如何 更新动态创建控件的内容? Is It Possible?!能把主窗口设置为无模式对话框吗??? 看了 腾讯创新大赛 的网站,感觉挺难的 冒泡排序法 菜鸟级问题:有关工具条的 看过"windows核心编程"的朋友请进? 编了怎么多年程,的出的经验:不管什么语言,主要的是核心的算法。(讨论) 关于dll的一个问题,希望高手解答,谢谢 简单问题,请指点 求vc 工具 满足 鼠标到一个函数处 出现函数说明和例子 求助~~
{
pDC->Draw3dRect(rcDraw,GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
}
else//未按下按钮,绘制正常矩形框
{
if(ST_MOVEIN == m_DrawState || ST_MOUSEUP == m_DrawState)
{
pDC->Draw3dRect(rcDraw,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_3DSHADOW));
}
}
LRESULT CTransParentButton::OnMouseLeave(WPARAM wParam,LPARAM lParam)
{
m_bTracking = false;
m_DrawState=ST_MOVEOUT;
InvalidateEx();
return 0;
}
rcDraw区域是自绘函数中的lpDrawItemStruct->rcItem;
换成Invalidate();UpdateWindow();呢?
GetWindowRect(rect);
GetParent()->ScreenToClient(rect);
GetParent()->InvalidateRect(rect);
如果在Invalidate前面加入如下代码 边框就会消失CRect rect;
GetWindowRect(rect);
GetParent()->ScreenToClient(rect);
GetParent()->InvalidateRect(rect);
背景是图片。。问题就是invalidate没有清除掉边框
我把所有绘图都放于兼容DC中,最后拷贝给目标DC;不过最先要创建个DC把背景拷贝下来,复制给兼容DC
谢谢大家的指导,结贴了!!