MFC中CRectTracker::Track和CRectTracker::TrackRubberBand会不会发送WM_PAINT消息

hi_dzj 2011-03-15 07:00:54
1.他会不会引起窗口重绘??

2.或使之整个窗口无效还是画过的那部分区域??

3.那他内部是怎么调用函数的呢??

4.当按住左键鼠标移动时是不是只产生了按键消息??

希望各位大侠能详细指教一下。。。。。
...全文
441 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hi_dzj 2011-03-18
  • 打赏
  • 举报
回复
谢谢,现在又一个大致的了解了。。。。
无水先生 2011-03-16
  • 打赏
  • 举报
回复
窗口加代码 如:

CRectTracker * tmp,
if(tmp->HitTest(point)>0)
{
tmp->Draws(&dc);
tmp->Track(this,point,TRUE);
Invalidate();

}else

以上代码是父窗口的消息函数中,也就是说,父窗口负责消息接收,下给你个完整代码

void CPage2View::OnLButtonDown(UINT nFlags, CPoint point)
{
//*******************************
// 本例是随鼠标按下后移动,整个对像体移动的效果。
//
//
//*******************************
CHRectTracker * tmp,* tmp1;

for (int i=0;i<m_DataArray.GetCount();i++)
{
tmp = m_DataArray.ElementAt(i);
tmp->nIn = tmp->m_Tracker.HitTest(point); //看看点到了哪
}
bool fs = false;
int ps;
for ( ps = 0;ps <m_DataArray.GetCount(); ps++)
{
tmp = m_DataArray.ElementAt(ps);
if ( tmp->nIn >= 0)
{
fs = true; //看看点到了哪
tmp1 = m_DataArray.ElementAt(m_DataArray.GetCount()-1);
m_DataArray.SetAt(m_DataArray.GetCount()-1,tmp);
m_DataArray.SetAt(ps,tmp1);
break;
}
}
CClientDC dc(this);
if( !fs ) //不在四边形区域内;
{
CRectTracker temp;
temp.TrackRubberBand(this,point,TRUE);
temp.m_rect.NormalizeRect();
// Invalidate(); //引起OnDraw函数的发生;
}
else
{
tmp->Draws(&dc);
tmp->m_Tracker.Track(this,point,TRUE);
Invalidate();

}
CFormView::OnLButtonDown(nFlags, point);
}


VC_ZSY 2011-03-16
  • 打赏
  • 举报
回复
其实呢很简单,你按下鼠标左键的时候,CRectTRacker会捕获所有消息,如果是左键弹起或右键按下,则结束消息捕获,其他消息它会向上转发。这个过程中它自己处理的消息只有鼠标移动消息。
lan243675044 2011-03-16
  • 打赏
  • 举报
回复
我也才学vc没多久,但是我知道第四个问题,肯定不只产生按键消息,肯定至少还有移动消息,至于还有没有其他的我不是很清楚了。
无水先生 2011-03-15
  • 打赏
  • 举报
回复
他不是窗口,因此:
1.他会不会引起窗口重绘??
不会.而是窗口绘的时候汇他
2.或使之整个窗口无效还是画过的那部分区域??

窗口加代码 如:

CRectTracker * tmp,
if(tmp->HitTest(point)>0)
{
tmp->Draws(&dc);
tmp->Track(this,point,TRUE);
Invalidate();

}else


3.那他内部是怎么调用函数的呢??

Draw(pDC);
4.当按住左键鼠标移动时是不是只产生了按键消息??

tmp->HitTest(point)指出
hi_dzj 2011-03-15
  • 打赏
  • 举报
回复
求解答,谢谢!!!!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧